IPBUF安全漏洞报告
English
CVE-2026-44002 CVSS 5.8 中危

CVE-2026-44002 vm2信息泄露漏洞

披露日期: 2026-05-13

漏洞信息

漏洞编号
CVE-2026-44002
漏洞类型
信息泄露
CVSS评分
5.8 中危
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
无需交互 (UI:N)
影响产品
vm2

相关标签

信息泄露vm2Node.js沙箱逃逸路径泄露

漏洞概述

vm2是一个Node.js的开源虚拟机与沙箱环境。在3.11.0版本之前,其CallSite包装类虽然阻止了可能导致宿主对象泄露的getThis()和getFunction()方法,但却允许getFileName()返回未经过净化的宿主绝对路径。这允许任何在沙箱中运行的代码提取宿主服务器的完整目录结构、库路径以及框架版本信息,造成敏感信息泄露风险。

技术细节

该漏洞源于vm2沙箱对V8引擎CallSite对象的安全封装不完整。CallSite对象通常用于获取堆栈跟踪信息。vm2为了防止沙箱逃逸,拦截了getThis()和getFunction()这两个可能返回宿主对象引用的方法。然而,开发人员未对getFileName()方法实施相同的过滤机制。攻击者可以在沙箱代码中故意抛出错误或创建堆栈跟踪,进而访问CallSite对象。通过调用getFileName(),攻击者能够获取宿主服务器上文件的绝对路径,而非经过沙箱虚拟化的路径。这使得攻击者能够推断出服务器的目录结构、安装的依赖库版本及具体框架信息,为进一步的攻击提供情报。

攻击链分析

STEP 1
1. 代码注入
攻击者向目标服务器发送包含恶意代码的请求,该代码将被传递给vm2沙箱执行。
STEP 2
2. 触发堆栈
恶意代码在沙箱内执行,故意创建一个Error对象或触发异常以获取当前的堆栈跟踪信息。
STEP 3
3. 信息提取
代码访问堆栈中的CallSite对象,并调用存在漏洞的getFileName()方法。
STEP 4
4. 路径泄露
getFileName()返回宿主操作系统的绝对路径,攻击者据此分析出服务器的目录结构和环境信息。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
const {VM} = require('vm2'); const vm = new VM(); // Malicious code intended to run inside the sandbox const maliciousCode = ` const err = new Error(); // Access the stack trace which contains CallSite objects const stack = err.stack; // The vulnerable getFileName() method allows access to host absolute paths // This bypasses the sandbox restrictions designed to hide file structure console.log("[+] Leaking Host File Paths:"); console.log(stack); `; vm.run(maliciousCode);

影响范围

vm2 < 3.11.0

防御指南

临时缓解措施
在无法立即升级的情况下,应严格限制vm2沙箱所执行代码的来源,确保仅运行受信任的代码。同时,监控沙箱环境的输出日志,防止敏感路径信息被打印到标准输出或返回给前端用户。

参考链接

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