nodejs

沙箱机制

沙箱机制简单来讲是一个隔离得虚拟环境,能够独立的在这个虚拟环境内运行代码,但是不会影响外界代码,能够屏蔽上下文,隔离当前的执行环境,避免被恶意代码攻击。

日常开发需求中有时候为了追求灵活性或降低开发难度,会在业务代码里直接使用 eval/Function/vm 等功能,其中 eval/Function 算是动态执行 JS,但无法屏蔽当前执行环境的上下文,会存在安全问题。 node.js 里提供了 vm 模块,相当于一个虚拟机,可以让你在执行代码时候隔离当前的执行环境,避免被恶意代码攻击,但实际上vm沙箱也存在安全漏洞。

vm沙箱

VM模块包含了三个常用的方法,用于创建独立运行的沙箱体制,如下三个方法:

vm.runInContext,vm.runInNewContext,vm.runInThisContext

此方法用于创建一个独立的沙箱运行空间,code内的代码可以访问外部的global对象,但是不能访问其他变量.而且code内部global与外部共享

img

具体可以看看文档http://nodejs.cn/api/vm.html

漏洞分析

先看一下简单的逃逸

1
2
3
4
const vm = require("vm");
console.log('goin');
vm.runInContext('this.constructor.constructor("return process")().exit()');
console.log('out');

上述代码在第三行结束了主程序运行,并且报错。

在这里插入图片描述

vm2沙箱逃逸

参考:https://prontosil.top/posts/9c09dcd4/


本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!