nodejs
沙箱机制
沙箱机制简单来讲是一个隔离得虚拟环境,能够独立的在这个虚拟环境内运行代码,但是不会影响外界代码,能够屏蔽上下文,隔离当前的执行环境,避免被恶意代码攻击。
日常开发需求中有时候为了追求灵活性或降低开发难度,会在业务代码里直接使用 eval/Function/vm 等功能,其中 eval/Function 算是动态执行 JS,但无法屏蔽当前执行环境的上下文,会存在安全问题。 node.js 里提供了 vm 模块,相当于一个虚拟机,可以让你在执行代码时候隔离当前的执行环境,避免被恶意代码攻击,但实际上vm沙箱也存在安全漏洞。
vm沙箱
VM模块包含了三个常用的方法,用于创建独立运行的沙箱体制,如下三个方法:
vm.runInContext,vm.runInNewContext,vm.runInThisContext
此方法用于创建一个独立的沙箱运行空间,code内的代码可以访问外部的global对象,但是不能访问其他变量.而且code内部global与外部共享
具体可以看看文档http://nodejs.cn/api/vm.html
漏洞分析
先看一下简单的逃逸
1 |
|
上述代码在第三行结束了主程序运行,并且报错。
vm2沙箱逃逸
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!