CVE-2026-92936 — vm2
Fix: patriksimek/vm2@5d5ba53CVE-2026-92936 is a CWE-209 vulnerability in vm2. A fix is available for vm2 — see the affected versions and patch details below.
vm2 3.11.0 before 3.11.7 Information Disclosure via Error Stack
Exploitation Status
Proof-of-concept exploit code exists
- CISA’s SSVC triage found public proof-of-concept exploit code for this CVE, though no confirmed active exploitation.
- CISA assesses this as automatable — exploitation doesn’t require manual, per-target effort, which raises the odds of mass scanning and opportunistic attacks.
Exploitation and automatability from CISA’s SSVC triage for CVE-2026-92936.
EPSS Exploitation Probability
Probability of exploitation in the next 30 days, from FIRST.org EPSS.
Real-World Exposure
vm2Real-time download stats are indexed for npm and PyPI packages. This vulnerability affects npm packages — download data is not available via public APIs for these ecosystems.
Description
Summary
Attacker-controlled code can trigger a host-realm syntax error and read its stack through the vm2 bridge. Host-realm stack formatting bypasses the sandbox-side redaction, so the returned value exposes absolute paths from vm2, Node.js internals, and the embedding application. Default VM and NodeVM configurations are affected without requiring special options.
PoC
A default-configured VM runs attacker-supplied code. Calling eval with deliberately malformed source makes the host-side source transformer throw a SyntaxError; reading .stack on the caught error exposes the host call stack to the sandbox.
const { VM } = require("vm2");
console.log(new VM().run(`
var s; try { eval("@@@ catch") } catch (e) { s = e.stack }
s;
`));
Observed output
SyntaxError: Unexpected character '@'
at makeNiceSyntaxError (.../lib/transformer.js:41:16)
at transformer (.../lib/transformer.js:116:8)
at Object.transformAndCheck (.../lib/vm.js:76:14)
at Object.apply (.../lib/setup-sandbox.js:2585:16)
at VM.run (.../lib/vm.js:529:16)
The stack string returned to the sandbox contains absolute host paths for lib/transformer.js, lib/vm.js, lib/setup-sandbox.js, Node internals, and the embedding application's own source file.
Impact
Sandboxed code running under the default new VM() or new NodeVM() configuration can read absolute filesystem paths of the embedding application's source tree plus host function names, bypassing the host-path redaction added for GHSA-v27g-jcqj-v8rw. On a multi-tenant code-runner this discloses deployment layout such as /home/app/... or /var/task/..., useful for fingerprinting and for chaining into further attacks. The bridge forwards .stack reads to the host-realm formatter (lib/bridge.js:1482), so the sandbox-side stack redaction never runs; the leak does not require special configuration and persists when string eval is disabled, because the host-side transformer throws before eval is handled. Information disclosure only, no code execution.
Affected Packages
| Ecosystem | Package | Vulnerable range | Fix |
|---|---|---|---|
| 📦npm | vm2 | ≥ 3.11.0&&< 3.11.7 | 3.11.7npm install vm2@3.11.7 |
Detection & mitigation playbook
Open-source dependencyDetect
Scan your dependency tree (package-lock.json, pnpm-lock.yaml, requirements.txt, go.sum, etc.) for vm2, including transitive dependencies — a direct dependency you never call can still pull in a vulnerable version.
Fix
Update vm2 to 3.11.7 or later, then make sure no transitive (indirect) dependency still pins the vulnerable range — O3 confirms CVE-2026-92936 is resolved across your whole dependency graph.
Workarounds
Assume what was exposed is already known: rotate any credential, token or key that the affected component could return, restrict the endpoint to callers that genuinely need it, and strip sensitive fields from responses and error output at the boundary rather than relying on the client not to read them.
Fixing This On Your OS
If you run this on a Linux distribution, patch through your package manager against the distro's own security advisory below — it tracks the exact backported fix for your release, which can ship on a different timeline (and sometimes a different severity) than the upstream project.
Moderate: This information disclosure vulnerability in vm2 allows sandboxed code to leak absolute host filesystem paths. While it does not lead to code execution, an attacker-supplied script within the sandbox can trigger a SyntaxError to expose sensitive path information from vm2, Node.js internals, and the embedding…
Mitigation for this issue is either not available or the currently available options do not meet the Red Hat Product Security criteria comprising ease of use and deployment, applicability to widespread installation base, or stability.Source: Red Hat security advisory for CVE-2026-92936 (CC BY 4.0)
Frequently Asked Questions
Is CVE-2026-92936 in your dependencies?
Find it across npm, including transitive dependencies.