CVE-2026-45411vm2是Node.js的一个开源沙箱库。在3.11.3版本之前,存在一处严重的沙箱逃逸漏洞。攻击者利用异步生成器中的yield*表达式,可以在通过return函数关闭生成器时捕获主机异常。由于运行时错误地将then调用中的异常作为下一个值传递给迭代器,攻击者可借此绕过沙箱限制,在宿主系统上执行任意代码,造成严重安全风险。
该漏洞源于vm2在处理异步生成器和迭代器协议时的边界条件错误。具体而言,当攻击者在异步生成器内部使用yield*表达式委托给另一个迭代器时,若通过return()方法强制关闭生成器,vm2的内部机制会对返回的Promise进行await。在此过程中,如果在Promise的then回调链中抛出异常,该异常未被正确隔离,反而被运行时捕获并作为next值回传给yield*迭代器。攻击者通过精心构造恶意代码,利用这一逻辑缺陷捕获本应被隔离的主机对象或异常。一旦成功捕获主机上下文,攻击者即可利用Node.js的原生模块(如child_process)执行系统命令,从而实现完整的沙箱逃逸和远程代码执行。