针对 CVE-2026-92935:vm2 数组形 require 嵌套逃逸(别名 GHSA-8hr7-r645-pc6w)的离线证据检查器。
它将显式提供的 vm2 包版本与经审阅的公告范围进行比较,并报告该版本证据能说明和不能说明的内容。要求 Python 3.10+,仅使用标准库;单个可执行文件 vm2_nesting_check.py 可单独复制使用。它从不访问网站、导入应用代码、运行包管理器或执行漏洞利用载荷。
potentially_affected 并非表示可利用。 它表示所报告的版本落在文档记载的受影响区间内。应用前提条件和可利用性并未确立,且每一行都保留 exploitability: not_tested。fixed_version_reported 并非补丁证明。 它仅描述版本声明;它从不证明已安装补丁或安全性。unknown 既不是干净也不是失败。 缺失、冲突、格式错误、预发布、带限定符以及自定义/厂商构建均保持 unknown,经审阅范围之外的任何内容也是如此。74aa57ba5df05c34d17ae67912cd26ec2335201b 捆绑而来,包含包特定的范围比较以及混合空白 CSV 修复。无需配套仓库。# Assess one reported version and print JSON
python vm2_nesting_check.py --version 3.11.7 --format json
# Assess the example inventory and save an HTML report
python vm2_nesting_check.py --inventory examples/inventory.example.json --format html --output report.html
# Assess a CSV inventory (CSV is the default format) and exit 1 on potentially_affected results
python vm2_nesting_check.py --csv-list inventory.csv --fail-on-finding
# Show every option, then run the local test suite
python vm2_nesting_check.py --help
python -m unittest -v
至少需要提供 --version、--inventory、--csv-list 或 --source 之一。--tool-version 会打印检查器版本(当前为 1.1.0)。
打开合成示例报告。仅为示例数据;这不是实时评估。
主要公告和已审查数据库检索于 2026-10-24(rules_as_of)。
文档记载的受影响区间为 3.11.4 至 3.11.6。已审查的修复版本为 3.11.7,已审查的修复分支为 3.11.x。
| 示例报告版本 | 结果 |
|---|---|
| 3.11.3 | unknown |
| 3.11.4 | potentially_affected |
| 3.11.6 | potentially_affected |
| 3.11.7 | fixed_version_reported |
| 3.11.8 | fixed_version_reported |
| 3.12.0 | unknown |
| 4.0.0 | unknown |
关于边界的说明:
v(v3.11.7)。缺失、冲突、格式错误、预发布、带限定符、自定义/厂商构建均保持为 unknown。--build-source(或 build_source 字段)为空白、unknown(默认值)、upstream、official 或 official_upstream 时按上游进行比较。任何其他值(例如厂商名称)都会产生 unknown,因为它需要独立的补丁证据。每个输入值都是一个独立的包实例;检查器不会在单个实例的多个条目之间协调证据。输入可以在一次运行中组合使用。
| 选项 | 输入 |
|---|---|
--version VERSION(别名 --package-version) | 报告的 vm2 版本;可重复。 |
--inventory FILE | JSON 对象或对象数组;可重复。 |
--csv-list FILE | 带标题行的 CSV;可重复。 |
--source FILE | 用于词法审查的显式 JS/TS 文件(参见源码审查候选);可重复。 |
--source-root DIR | 与 --source 一起使用时必需;证据路径相对于它。 |
--build-source SOURCE | --version 构建的来源,最多 512 个字符。适用于 CLI 版本。 |
--nodevm-nesting-enabled、--require-configuration-is-array-shaped、--attacker-supplied-javascript-executed(true 或 false) | 应用于 CLI 版本的操作员观察。 |
JSON 清单。 一个对象或一个对象数组。必需:整数 schema_version: 1 和字符串 package_version。可选:package: "vm2"、label、build_source 以及下面的观察键。未知或重复的键、错误的类型、非有限数字和格式错误的输入都会被拒绝。参见 examples/inventory.example.json。
{
"schema_version": 1,
"package": "vm2",
"package_version": "3.11.7",
"label": "example-package-instance",
"build_source": "unknown",
"nodevm_nesting_enabled": null,
"require_configuration_is_array_shaped": null,
"attacker_supplied_javascript_executed": null
}
CSV 列表。 表头必须包含 package_version。可选列为 label、build_source 以及各观测键;观测单元格取值为 true、false 或留空。其他列将被拒绝。
label,package_version,build_source
example-package-instance,3.11.7,unknown
这些可选观察项对应公告中的前提条件。仅在您已知晓时提供。在命令行中,将下划线替换为连字符(例如 --nodevm-nesting-enabled true)。
| 观察项键 | 含义 |
|---|---|
nodevm_nesting_enabled | NodeVM 嵌套已启用 |
require_configuration_is_array_shaped | require 配置为数组形式 |
attacker_supplied_javascript_executed | 攻击者提供的 JavaScript 已执行 |
每个观察项为布尔值或 null(未报告),均未经核实,且绝不会改变包版本结果。缺失的观察项不能证明已缓解。不执行污点分析、可达性测试或运行时求值。
可选的源码检查会为 NodeVM 构造生成独立的词法候选。它是一种审查辅助手段,而非配置、可达性或攻击者控制的证明。
python vm2_nesting_check.py --source examples/source.example.js --source-root examples --format json
python vm2_nesting_check.py --version 3.11.6 --source examples/source.example.js --source-root examples --format html
功能说明
--source 显式选择文件;--source-root 为必填项,且所有选中的路径都必须解析到该目录内。不会遍历或执行任何内容。接受的扩展名为 .js、.cjs、.mjs、.ts、.cts、.mts、.jsx 和 .tsx。vm2 CommonJS/ES 导入,包括解构别名和命名空间 .NodeVM 构造。new 候选,它会记录相对路径和行号、字面量 nesting 值、数组/对象或字面量 require 形态,以及与直接赋值变量上 .run() 的词法关联。unknown、可利用性 not_tested 和未填写的操作员前置条件。它们绝不会继承单独提供的版本的评估结果,也不会自行触发 --fail-on-finding 门禁。功能不包含的内容
unknown 覆盖行,绝不会给出不存在或已缓解的结论。边界与隐私。 源文件共享 限制与数据处理 中所述的 4 MiB/文件、100 个文件和 10,000 条结果的预算,并额外有 200,000 token/文件的限制。报告包含相对位置和形态标签,不包含源代码片段或源字符串内容。选中的源文件及其别名仍受保护,不受 --output --force 影响。
Schema。 CSV 和 JSON 报告 schema 1.1 新增了 source_path、source_line、source_nesting、source_require、source_run_argument 和 source_coverage;HTML 在其证据说明中包含这些候选。
使用 --format csv|json|html 选择格式(默认 csv),并使用 --output FILE 写入,否则报告输出到 stdout。JSON、公式中和化的 CSV 和转义的无脚本 HTML 共享相同的评估结果。--brand NAME 设置 HTML 报告中的组织名称(默认 CompleteTech LLC,最多 512 个字符)。
status | 含义 |
|---|---|
potentially_affected | 报告的版本位于文档记载的受影响区间内。并非确认可利用性。 |
fixed_version_reported | 报告的版本在已审查的 3.11.x 系列内满足修复条件。这是版本声明,而非已安装补丁的证明。 |
unknown | 证据缺失、冲突、格式错误、带限定条件、厂商构建、超出已审查范围,或来自源代码审查。并非干净结果。 |