流行的vm2 Node.js库中发现严重的沙箱逃逸漏洞,如被成功利用,可能允许攻击者在底层操作系统上运行任意代码。
这个被追踪为CVE-2026-22709的漏洞在CVSS评分系统中得分高达9.8分(满分10.0分)。
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。
CVE-2023-37903在2023年7月的发现也促使Simek宣布该项目将被停止。然而,这些引用已从GitHub存储库上最新的README文件中删除。安全页面也在2025年10月更新,提到vm2 3.x版本正在积极维护中。
不过,vm2的维护者也承认未来可能会发现新的绕过方法,敦促用户确保保持库的更新,并考虑其他强大的替代方案,如isolated-vm,以获得更强的隔离保证。
Semgrep表示:"vm2的继任者isolated-vm不依赖有问题的vm模型,而是依赖V8的原生Isolate接口,这提供了更坚实的基础。但即便如此,vm2的维护者仍强调隔离的重要性,实际上建议使用Docker并在组件之间进行逻辑分离。"
鉴于该漏洞的严重性,建议用户更新到最新版本(3.10.3),该版本修复了额外的沙箱逃逸问题。
Q&A
Q1:vm2是什么?有什么作用?
A:vm2是一个Node.js库,用于在安全的沙箱环境中运行不可信代码。它通过拦截和代理JavaScript对象来防止沙箱代码访问主机环境,为开发者提供安全的代码执行环境。
Q2:CVE-2026-22709漏洞有多严重?
A:CVE-2026-22709是一个严重的沙箱逃逸漏洞,CVSS评分高达9.8分(满分10.0分)。该漏洞源于对Promise处理程序的不当清理,攻击者可利用它逃逸沙箱并在底层操作系统上运行任意代码。
Q3:如何防护vm2库的安全风险?
A:建议用户立即更新到最新版本3.10.3,该版本修复了沙箱逃逸问题。考虑到vm2历史上存在多个类似漏洞,维护者建议考虑使用isolated-vm等更安全的替代方案,或使用Docker进行组件间逻辑分离。
热门跟贴