vm 沙箱逃逸(通过 Proxy)// sandbox_server.js - Vulnerable VM sandbox
const vm = require('vm');
const express = require('express');
const app = express();
app.use(express.json());
app.post('/eval', (req, res) => {
const code = req.body.code;
const sandbox = { console: { log: () => {} } }; // limited sandbox
const script = new vm.Script(code);
const context = vm.createContext(sandbox);
try {
const result = script.runInContext(context);
res.send(String(result));
} catch(e) {
res.send(e.message);
}
});
app.listen(3000);
vm 沙箱逃逸(通过 Proxy)应用程序使用 Node.js 的 vm 模块在沙箱中执行用户代码,但未能正确隔离全局对象。攻击者可以通过构造函数链(例如,通过 this.constructor.constructor)逃逸沙箱,并执行任意 shell 命令。
vm 上下文仍然提供对内置构造函数的访问,这些构造函数可授予对 Node.js 全局作用域(process)的访问权限。npm install express
node sandbox_server.js
python exploit_vm_escape.py
输出显示 `id` 的结果,证明命令已执行。