Node.js 沙箱库 vm2 曝高危沙箱逃逸漏洞(CVE-2026-22709)

张开发
2026/4/4 20:26:57 15 分钟阅读
Node.js 沙箱库 vm2 曝高危沙箱逃逸漏洞(CVE-2026-22709)
近日热门 Node.js 沙箱库vm2被披露一个高危漏洞CVE-2026-22709CVSS 评分 9.8Critical。攻击者可利用该漏洞轻松突破沙箱限制在底层主机系统上执行任意代码RCE。vm2 是一款开源库主要用于创建安全的 JavaScript 执行环境。它允许开发者运行不受信任的代码同时限制其对文件系统等资源的访问是实现代码隔离的常用工具。What is Sandboxing? Understand Sandboxing in Cyber Security - OPSWAT该库广泛应用于支持用户脚本的SaaS 平台、在线代码运行工具、聊天机器人以及众多开源项目中。GitHub 上使用 vm2 的项目超过 20 万个npm 周下载量长期稳定在百万次级别目前最新版本为 3.10.5。漏洞根源Promise 回调清理机制存在缺陷漏洞核心在于 vm2 对异步操作Promise的隔离不够完善。vm2 会对自身内置 Promise 的回调函数进行数据清理sanitization。但异步函数返回的是全局 Promise 对象其 .then() 和 .catch() 回调函数未能得到充分的清理校验。攻击者可通过覆盖 Function.prototype.call 等方式绕过清理导致沙箱逃逸。维护者明确指出在 vm2 3.10.0 版本中Promise.prototype.then 和 Promise.prototype.catch 的回调清理机制可被绕过从而允许任意代码执行。官方已修复3.10.1 版本进行了部分修复。3.10.2 版本进一步强化措施避免绕过。目前推荐升级至最新版本 3.10.5或至少 3.10.2所有已知漏洞均已修复。开发者还公开了 PoC 演示代码展示了如何在沙箱内触发漏洞并执行主机命令。鉴于利用方式简单官方强烈建议所有用户立即升级。Threat actors misuse Node.js to deliver malware and other malicious payloads | Microsoft Security Blog已发布的漏洞利用片段示例简化示意JavaScript// 简化概念示例实际 PoC 更具体请参考官方 advisory const { VM } require(vm2); const vm new VM(); vm.run( // 攻击代码覆盖原型绕过 Promise 清理 // ...完整 PoC 见 GitHub Security Advisory );建议不要在生产环境中直接运行未经验证的演示代码。vm2 的历史沙箱逃逸问题vm2 长期以来沙箱逃逸漏洞频发曾在 2023 年宣布停止维护并被判定“不适合运行不受信任代码”。2023 年 10 月项目重启发布 3.10.0 版本修复当时已知问题并保持向下兼容至 Node 6。历史高危漏洞包括CVE-2022-36067允许突破隔离执行主机命令。CVE-2023-29017利用程序迅速公开。CVE-2023-30547同月披露的另一沙箱逃逸漏洞。以及其他多个类似问题。尽管多次修复但此次 CVE-2026-22709 再次提醒开发者沙箱库的安全边界极易被复杂异步机制突破。安全建议立即升级将 vm2 更新至3.10.5或至少 3.10.2Bashnpm install vm2latest替代方案考虑使用更安全的隔离工具如 isolated-vm官方曾推荐或其他基于虚拟化/进程隔离的方案。最佳实践避免在高风险场景下运行完全不受信任的代码结合静态分析、权限最小化等防御措施。监控依赖定期使用 Snyk、Dependabot 等工具检查项目中的 vm2 版本。参考来源GitHub Security Advisory、NVD、The Hacker News 等安全报告。

更多文章