文章总结: vm2沙箱库被曝存在CVE-2026-26956严重沙箱逃逸漏洞,该漏洞通过WebAssembly异常处理机制绕过JavaScript层防护,导致任意代码执行。影响vm23.10.4及更早版本,PoC已公开。建议立即检查项目依赖并升级至安全版本,或采用禁用WASM异常处理、降级Node.js版本、使用容器隔离等临时缓解措施。 综合评分: 85 文章分类: 漏洞分析,WEB安全,安全工具,云安全,供应链安全
130万次下载的神库爆严重漏洞!Node.js沙箱逃逸PoC已公开,你的代码还在裸奔?
原创
RCS-TEAM安全团队 RCS-TEAM安全团队
RCS-TEAM
2026年5月9日 10:59 北京
在小说阅读器读本章
去阅读
130万次下载的神库爆严重漏洞!Node.js沙箱逃逸PoC已公开,你的代码还在裸奔?
一个被全球开发者依赖了多年的沙箱库,被证明根本关不住恶意代码。PoC已经摆在GitHub上了,你还没升级?
事情是这样的
5月6号,BleepingComputer爆了一条消息:vm2——这个每周下载量超过130万次的Node.js沙箱库——被发现存在一个Critical级别的沙箱逃逸漏洞,CVE编号 CVE-2026-26956。
什么叫沙箱逃逸?简单说就是:你以为把不可信代码关进了笼子里,实际上它一脚就把笼门踹开了,直接在你的服务器上跑任意代码。
更吓人的是,PoC exploit代码已经公开,攻击者不需要什么高超技巧,照着PoC就能打。
vm2是什么?为什么它这么重要?
vm2是一个Node.js的开源沙箱库,专门用来在受限环境中运行不可信的JavaScript代码。
它的工作方式是把用户提交的代码隔离在一个沙箱里,阻止访问 process、文件系统这些敏感的Node.js API。
你想想哪些场景会用到它:
▪在线代码编辑器(比如CodeSandbox、StackBlitz这类平台)
▪SaaS应用中执行用户上传的脚本
▪自动化测试工具中运行第三方代码
▪Serverless函数执行环境
全球每周130万次下载,说明有多少项目把vm2当安全底线在用。
漏洞原理:WebAssembly成了”后门”
这个漏洞的根因很有意思——WebAssembly的异常处理机制绕过了vm2的JavaScript层安全防线。
vm2原本的安全设计是:
①用JavaScript级别的保护来防止来自宿主环境的错误
②用Bridge Proxies来包裹跨上下文的对象
③全部跑在JavaScript层
但问题出在:WebAssembly异常处理可以在V8引擎底层拦截JavaScript错误,直接跳过vm2的JS层防护。
攻击者只需要:
①触发一个精心构造的 TypeError(通过 Symbol 到字符串的转换)
②导致宿主侧的错误对象泄露回沙箱
③这个错误对象没有被vm2清理,直接暴露了宿主环境
④沙箱逃逸,任意代码执行
一句话总结:vm2的JS层防护被WebAssembly从底层绕过了。
受影响范围
▪vm2 3.10.4 已确认受影响
▪更早版本很可能也受影响(官方没有排除)
▪需要运行在 Node.js 25 环境下(已在 Node.js 25.6.1 上验证)
▪需要启用 WebAssembly异常处理 和 JSTag支持
虽然看起来条件有点苛刻,但注意两点:
①PoC已公开,攻击者会想办法让环境满足条件
②很多在线平台默认就启用了这些特性
③即使你当前没升级Node.js 25,PoC的存在意味着漏洞细节已经完全暴露,未来可能有更多变种
怎么检查你的项目?
第一步:检查是否用了vm2
在项目根目录跑:
# 检查package.json grep "vm2" package.json # 检查node_modulesls node_modules | grep vm2 # 全局搜索 find . -name "package.json" -exec grep -l "vm2" {} \;
第二步:检查版本
npm ls vm2
如果版本 ≤ 3.10.4,立刻升级。
第三步:检查Node.js版本
node -v
如果你跑在 Node.js 25 上且用了vm2,风险等级直接拉满。
修复方案
方案一:升级vm2(推荐)
npm update vm2 # 或 yarn upgrade vm2
关注vm2官方GitHub仓库,等待修复版本发布。目前 maintainer 已经确认了漏洞,修复补丁应该很快。
方案二:临时缓解措施
如果暂时不能升级,做以下操作降低风险:
# 1. 禁用WebAssembly异常处理(启动Node时加参数) node --no-wasm-eh node your-app.js # 2. 不要在生产环境用Node.js 25# 降级到 LTS 版本(Node.js 22 LTS) nvm use 22 # 3. 在沙箱外层加一层防护# 用Docker容器隔离,即使沙箱逃逸也跑不出容器 docker run --read-only --memory=256m --cpus=0.5 your-app
方案三:考虑替代方案
如果vm2长期不修复,或者你的场景对安全要求极高,考虑换用:
| 替代方案 | 特点 | 适用场景 | | — | — | — | | isolated-vm | 基于V8 isolate,性能更好 | 高性能沙箱需求 | | Node.js Worker Threads | 原生线程隔离 | 简单隔离场景 | | Docker容器 | 操作系统级隔离 | 最高安全要求 | | Firecracker microVM | 硬件级隔离 | 多租户SaaS平台 |
给开发者的5条建议
1. 别把vm2当唯一防线
vm2是最后一道防线,不是唯一防线。你的代码应该有多层防护:输入验证 → 权限控制 → 沙箱 → 容器隔离。
2. 定期审计依赖
# 检查已知漏洞 npm audit # 更严格的检查 npm audit --audit-level=critical
把 npm audit 加到CI/CD流程里,每次提交自动检查。
3. 用npm的overrides锁定安全版本
{"overrides":{"vm2":"^3.10.5"}}
这样即使间接依赖引入了旧版本,也会被强制覆盖。
4. 监控vm2的GitHub仓库
https://github.com/patriksimek/vm2
关注Issues和Releases,有安全更新第一时间知道。
5. 生产环境别用最新版Node.js
Node.js 25 是最新主线版本,不是LTS。生产环境老老实实用LTS版本(目前是Node.js 22),减少未知风险。
这个漏洞告诉我们什么?
沙箱从来不是绝对安全的。
vm2的维护者花了多年时间构建JavaScript层的防护,结果被WebAssembly一个底层特性直接绕过了。这跟当年Java Applet沙箱、Flash沙箱被绕过是一个道理——只要攻击面够大,总能找到突破口。
对于安全团队来说,这意味着:
▪不要相信任何单一的沙箱机制
▪纵深防御(Defense in Depth)不是口号,是保命手段
▪依赖供应链安全(Supply Chain Security)越来越重要,一个npm包出事,下游几百万项目跟着遭殃
写在最后
这个漏洞目前影响的主要是Node.js 25环境,但PoC公开意味着攻击者随时可能找到更多利用方式。
不管你现在用的是什么版本,第一件事:检查你的项目有没有依赖vm2。
如果有,赶紧升级。如果没有,也看看有没有类似的沙箱库在裸奔。
网络安全这行,永远比攻击者快一步,才能睡得着觉。
信息来源:BleepingComputer 2026-05-06 报道、vm2官方安全公告 CVE编号:CVE-2026-26956 本文链接:数据织梦·每日安全速递
SECURITY · RCS-TEAM
关注 RCS-TEAM 安全团队
聚焦安全研究、漏洞分析、攻防技术与行业观察 持续输出高质量安全内容
长按识别二维码,立即关注
COMMUNITY · SECURITY GROUP
加入 RCS-TEAM 安全交流群
想继续交流漏洞分析、攻防实践和文章里的细节补充,欢迎扫码进群。
群内会不定期分享复现思路、工具经验和最新讨论。
扫码即可加入交流,二维码失效可在后台回复「加群」。
实战问题、漏洞思路、工具踩坑都可以在群里继续聊 也欢迎直接反馈你想看的后续选题
扫码加入交流群
若二维码失效或群满,请在后台回复「加群」
免责声明:
本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。
任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。
本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。
本文转载自:RCS-TEAM RCS-TEAM安全团队 RCS-TEAM安全团队《130万次下载的神库爆严重漏洞!Node.js沙箱逃逸PoC已公开,你的代码还在裸奔?》
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。









评论