近期开源安全圈再次被 Node.js 沙箱框架 vm2 的连续修补刷屏。维护者在 vm2 3.11.1 版本中修复了 NodeVM 的“巢嵌执行设置”漏洞,编号为 CVE-2026-44007。更早些时候,项目方在 3.10.5 版本处理过与 WebAssembly 例外处理机制相关的安全问题(CVE-2026-26956)。这意味着:vm2 不断暴露新的边界缺陷,且风险从沙箱绕过逐步升级到可能的主机端命令执行。
vm2 的核心价值在于:让 Node.js 应用把 JavaScript 放进受限环境运行,常见于线上代码执行、插件系统、自动化脚本或让用户自定义逻辑。但问题在于,沙箱并不等同于“真正隔离的虚拟机”。它仍运行在同一 Node.js 进程体系里。一旦隔离边界被绕过,攻击者就可能触及原本不该访问的主机能力。
CVE-2026-44007 的关键点在于开发者容易踩的“矛盾配置”。当某个 NodeVM 开启了 nesting:true(允许在沙箱内再建立运行环境),同时又以为通过 require:false 已经禁止模块加载时,沙箱内的恶意代码仍可能加载 vm2,并继续创建更深一层的 NodeVM。随后,攻击者可用自己指定的设置触发主机侧命令执行,从而实现沙箱逃逸的链式突破。
修补机制上,vm2 3.11.1 并不是“继续相信开发者设置没问题”,而是在检测到上述冲突条件时直接报错,避免开发者误判保护效果。这类策略本质上是在把“高风险组合配置”从可用状态变为失败状态。
项目方近期的更新节奏也值得关注:3.11.0 做过协调整理式发布,关闭多项安全通报,其中包含与完整沙箱逃逸、远端代码执行风险相关的内容;随后 3.11.1 与 3.11.2 又分别修补了不同问题,且 3.11.2 中仍有条目被标注为 RCE 风险。
因此,对仍在业务中使用 vm2 执行不受信任 JavaScript 的团队来说,升级到最新的 vm2(至少覆盖 3.11.2)是最直接的处置。同时,安托特报员也提醒:vm2 不应当被当作唯一防线。若服务允许外部代码进入执行环境,建议进一步采用独立进程、容器或虚拟机隔离,把“沙箱失效时的影响范围”压到最低。