CVE-2026-92954: vm2 3.10.0 through 3.11.5 Denial of Service via Host Promise
vm2 is a sandbox library for running untrusted JavaScript in Node.js. In versions >= 3.10.0 and <= 3.11.7, Promises returned from the host realm into the sandbox are not marked as handled at the bridge boundary; only Promises created inside the sandbox are wrapped with a rejection-swallowing handler (lib/setup-sandbox.js), and the bridge only installs host-side rejection sanitizers when sandbox code calls .then/.catch/.finally. As a result, code running in the sandbox can invoke a host function that returns a rejected Promise (for example events.once() exposed via the NodeVM events builtin, or any embedder-provided Promise-returning API) and simply ignore the return value, leaving the host Promise unhandled so that Node.js's default unhandled-rejection behavior terminates the host process. This is an incomplete fix of GHSA-hw58-p9xv-2mjh. The issue is fixed in version 3.11.8.
Affected Software
Remediation
Recommended actions to resolve this vulnerability, in priority order.
- Upgrade
Upgrade
vm2to a version that resolves this vulnerability.Fixed in 3.11.8Patch GHSA-hw58-p9xv-2mjh - Upgrade
Upgrade
vm2to a version that resolves this vulnerability.Fixed in 3.11.8
Event History
Frequently Asked Questions
Who is exposed to this denial-of-service condition?
Applications using vm2 versions 3.10.0 through 3.11.7 to execute untrusted JavaScript are exposed when sandboxed code can call a host function that returns a Promise which may reject. This includes the NodeVM events builtin when events.once() is available, as well as embedder-provided Promise-returning APIs.
What must an attacker do to trigger the issue?
The attacker needs the ability to run code in the vm2 sandbox and invoke an exposed host-side function that returns a rejected Promise. They can then ignore that returned Promise, leaving it unhandled and allowing Node.js default unhandled-rejection behavior to terminate the host process.
What should be done if the affected functionality cannot be removed immediately?
Upgrade vm2 to version 3.11.8, which fixes the issue. Until then, avoid exposing Promise-returning host APIs to untrusted sandbox code, including APIs that can return rejected Promises such as events.once().