流行的vm2 Node.js库近日披露一个高危沙箱逃逸漏洞,攻击者成功利用该漏洞可在底层操作系统上执行任意代码。该漏洞编号为CVE-2026-22709,CVSS评分为9.8分(满分10分)。
漏洞技术细节
vm2维护者Patrik Simek表示:"在vm2 3.10.0版本中,Promise.prototype.then和Promise.prototype.catch回调的净化处理可被绕过,导致攻击者能够逃逸沙箱并执行任意代码。"vm2是一个Node.js库,通过拦截和代理JavaScript对象,在安全的沙箱环境中运行不受信任的代码,防止沙箱代码访问主机环境。
新发现的漏洞源于该库对Promise处理程序的不当净化处理,形成了逃逸向量,最终导致在沙箱边界外执行任意代码。Endor Labs研究人员Peyton Kennedy和Cris Staicu指出:"关键问题在于JavaScript中的异步函数返回的是globalPromise对象而非localPromise对象。由于globalPromise.prototype.then和globalPromise.prototype.catch未像localPromise那样被正确净化处理。"
历史漏洞与维护现状
虽然CVE-2026-22709已在vm2 3.10.2版本中修复,但这是近年来困扰该库的一系列沙箱逃逸漏洞中的最新案例。此前已披露的漏洞包括:CVE-2022-36067、CVE-2023-29017、CVE-2023-29199、CVE-2023-30547、CVE-2023-32314、CVE-2023-37466和CVE-2023-37903。
2023年7月发现CVE-2023-37903后,Simek曾宣布该项目将停止维护。但最新GitHub仓库中的README文件已删除相关声明,安全页面也在2025年10月更新,表明vm2 3.x版本仍在积极维护中。
安全建议与替代方案
vm2维护者承认未来可能还会发现新的绕过方法,建议用户确保及时更新库版本,并考虑使用isolated-vm等具有更强隔离保证的替代方案。Semgrep表示:"作为vm2的继任者,isolated-vm不再依赖问题多发的vm模型,而是基于V8原生Isolate接口构建,提供了更坚实的基础。但即便如此,vm2维护者仍强调隔离的重要性,实际推荐使用Docker实现组件间的逻辑隔离。"
鉴于该漏洞的严重性,建议用户升级至最新版本(3.10.3),该版本修复了多个沙箱逃逸问题。
- it2021
- it2021.com






1F
这库怎么老出这种问题啊,心累
2F
3.10.2修了?赶紧升级先
3F
Promise这玩意还能这么绕,学到了
B1
@ 静夜听 Promise这玩意底层太复杂,稍不留神就翻车
4F
之前用vm2跑用户脚本,现在瑟瑟发抖
5F
隔离靠docker?说得轻巧,资源占用谁扛得住
6F
不是说要停更了吗,怎么又冒出来
7F
globalPromise没净化,这设计漏洞太低级了吧
重庆 重庆 B1
@ 星光预言者 低级是低级,但V8机制本来就难拦,真不全是码农背锅
B1
@ 星光预言者 确实,这设计太马虎了。
8F
有人试过isolated-vm吗?迁移成本高不高?
9F
沙箱逃逸都成传统艺能了 😂
B1
@ 千雪奈 哈哈,每次出事都修一下,修一下又出事,循环了
10F
要是早两个月发现,我们线上就炸了
11F
这库修了又出,修了又出,真拿它没办法了
12F
globalPromise没净化,这也太马虎了,离谱
13F
我们上周刚上线用vm2,现在赶紧回滚
14F
isolated-vm听说性能差不少,有兄弟实测过吗?
15F
Docker隔离听着靠谱,实际调度起来头疼死了
B1
@ 未来观察者 isolated-vm性能到底咋样?实测比vm2快多少?
16F
Promise还能这么玩?学废了,hhh
17F
之前踩过CVE-2023-37903的坑,折腾一周才搞定
18F
这漏洞要是被黑了,直接root权限送上门啊
B1
@ 星野梦 root直接开了,怕死。
19F
维护者说还在更新,可谁还敢信啊
20F
求问有没有轻量替代方案,Docker真扛不住
21F
Docker隔离是好事,但部署脚本真的要花半天。
22F
我之前也被CVE坑翻了一周。
23F
升级到3.10.3后,真的没有再出现逃逸吗?还有哪些细节要留意?
广东 深圳 24F
说是修了又出,我倒是觉得维护者真的在努力,只是安全圈子本身就很难彻底封堵这种异步逃逸,别把所有责任都压到库上。
25F
这事儿挺惊险的 😂
26F
这库漏洞也太多了吧
27F
isolated-vm听起来比vm2靠谱点。
四川 眉山 B1
@ 砚冰呵笔 我也这么觉得
28F
沙箱逃逸真是防不胜防啊
29F
这评分简直离谱,得赶紧升级了
重庆 重庆 B1
@ 书简 看到这分我也慌了,赶紧升
30F
Promise原型链又出幺蛾子了