CVE-2026-44004vm2是一个用于Node.js的开源虚拟机沙箱。在3.11.0版本之前,沙箱内的代码可以调用Buffer.alloc()并传入任意大小参数,直接在主机堆上分配内存。由于Buffer.alloc是同步的C++原生调用,vm2的超时机制无法中断其执行。攻击者可通过单个请求耗尽主机内存,导致进程崩溃报错“FATAL ERROR: Reached heap limit”。该漏洞已在3.11.0版本中修复。
该漏洞的根源在于vm2沙箱未能有效拦截或限制Node.js中的特定原生内存分配操作。在Node.js中,Buffer.alloc()是一个底层的同步C++函数,用于在V8引擎堆外或堆内直接分配内存。当攻击者在沙箱代码中调用Buffer.alloc(Number.MAX_SAFE_INTEGER)等超大数值时,执行流进入C++层。此时,vm2基于JavaScript的事件循环超时机制失效,无法中断同步的C++执行。这导致进程被迫尝试分配超出物理限制的内存,最终触发V8的FATAL ERROR,造成服务拒绝。此漏洞绕过了沙箱的资源保护限制。