Skip to main content

vm2 EUVDEUVD-2026-81608

| CVE-2026-92959 HIGH
Protection Mechanism Failure (CWE-693)
7.1
CVSS 4.0 · Vendor: VulnCheck
View

Attack ChainAIDerived

Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain

  1. Access
    Submit script to allowAsync:false sandbox
  2. Delivery
    Pass crafted thenable to Promise static method
  3. Exploit
    Native PromiseResolveThenableJob invokes unpatched then
  4. Execution
    Work scheduled in later microtask
  5. Impact
    Code executes after run() returns, outside timeout

Vulnerability Assessment

Weakness
CWE
OWASP Top 10:2025
A06:2025 - Insecure Design
ASVS 5.0
V15 - Secure Coding and Architecture Protection mechanism completeness
Exploitation Conditions

Requires an application that (1) uses vm2 before the patched release, (2) sets allowAsync:false in VM or NodeVM and relies on it as a security control, and (3) executes attacker-controlled JavaScript inside the sandbox. The attacker must be able to supply sandboxed script that calls a Promise static method (Promise.resolve/all/race/any/allSettled) with an attacker-defined thenable. Exploitation is limited to deployments that treat the sandbox and its timeout/async restriction as a trust boundary; applications that already permit async or do not run untrusted code are unaffected. No user interaction beyond submitting the script; PR:L reflects the assumed ability to run code in the sandbox.

Impact

This is a genuine but moderate-severity protection-mechanism failure (CWE-693), not a high-priority emergency. The vendor CVSS 4.0 vector (AV:N/AC:L/AT:N/PR:L/UI:N/VC:N/VI:L/VA:H, base 7.1) is availability-dominant: the flaw defeats the allowAsync:false control and the run() timeout, letting sandboxed work continue after the host thinks execution finished (VA:H), with only minor integrity impact (VI:L) and no confidentiality impact (VC:N). Crucially, every vm2 vulnerability is gated on the application's core threat model - the host must be executing untrusted/attacker-supplied JavaScript inside the sandbox, which is reflected in PR:L rather than PR:N. No EPSS score, no CISA KEV listing, and no standalone proof-of-concept are present in the input: exploitation status is 'no public exploit identified at time of analysis.' The VC:N in the vendor vector directly conflicts with the input 'Information Disclosure' tag - the described impact is asynchronous execution escaping the timeout, not data disclosure, so that tag appears mislabeled. Overall this is a real correctness/isolation weakness for anyone relying on allowAsync:false as a security boundary, but with no active exploitation signal and availability-only impact, it is a patch-in-normal-cycle item rather than a fire drill.

Exploit ScenarioDerived

An application embeds vm2 with allowAsync:false and a timeout, trusting that untrusted script cannot run asynchronous or post-timeout work. An attacker submits sandboxed JavaScript that hands a crafted thenable to Promise.resolve/all/race/any/allSettled; native promise resolution assimilates it and invokes the sandbox's then in a later microtask, bypassing the patched then, so the attacker's code keeps running after run() returns and outside the timeout. No public exploit code is identified in the provided data.

This Week Schedule remediation this week. Why: HIGH severity (CVSS 7.0-8.9).
Patch available 0.3% exploitation probability (EPSS)

Get an e-mail when this CVE is exploited, patched or re-scored. Free account.

Alert me

AnalysisAIv1 – Sep 17, 2026

Sandboxed JavaScript in vm2 before 3.11.8 can bypass the allowAsync:false restriction by supplying an attacker-controlled thenable to Promise static methods, allowing asynchronous work to continue after VM.run() or NodeVM.run() returns and outside the configured timeout. This is a genuine but moderate-severity protection-mechanism failure (CWE-693) affecting applications that rely on the vm2 sandbox and its async restriction as a trust boundary for executing untrusted code; the CVSS vector indicates PR:L, reflecting the need to supply JavaScript code executed inside the sandbox. No public exploit identified at time of analysis.

RemediationAI

Vendor-released patch: vm2 3.11.8 or later fully enforces allowAsync:false by preventing Promise static methods from assimilating attacker-controlled thenables. Upgrade to at least 3.11.8 as the primary remediation. Consult the GitHub security advisory at https://github.com/patriksimek/vm2/security/advisories/GHSA-f8gf-w286-fmq2 and the VulnCheck advisory at https://www.vulncheck.com/advisories/vm2-before-3.11.8-allowasync-bypass-via-promise-thenable for additional details. If an immediate upgrade is not possible, avoid relying solely on allowAsync:false as a security boundary: restrict execution of untrusted code in vm2, or run sandboxed code in a separate child process with an externally enforced hard timeout that terminates the process after the expected run duration. Note that external timeouts do not prevent microtasks from executing before termination, and such workarounds are fragile compared to upgrading. Applications that do not use allowAsync:false or do not execute untrusted code are unaffected and do not require emergency action.

Affected VersionsENISA

vm2 0 <3.11.8

Affected Packages

npm vm2 fix: 3.11.8

Source: OSV (Open Source Vulnerabilities)

Affects your stack

Affects 1 package in npm

Checking this CVE against your own stacks and servers is part of the Basic plan and up.

Technical ContextAI · show details

vm2 is a Node.js sandbox library that isolates untrusted JavaScript. Its allowAsync:false option is intended to prevent sandboxed code from scheduling asynchronous work, ensuring that execution completes within the sandbox and does not outlive the configured timeout. The library attempts to enforce this by replacing localPromise.prototype.then with a handler that throws 'Async not available'. However, the Promise static methods (Promise.resolve, Promise.all, Promise.race, Promise.any, Promise.allSettled) still assimilate thenables. When such a static method receives an attacker-defined thenable, native promise resolution triggers a PromiseResolveThenableJob that invokes the sandboxed code's then method in a microtask, bypassing the patched then entirely. This is a protection-mechanism failure (CWE-693): the sandbox fails to enforce its stated security control, so sandboxed script can schedule work that runs after the host believes execution is complete and outside the timeout. The affected product is the npm package vm2 (CPE: cpe:2.3:a:patriksimek:vm2:*:*:*:*:*:*:*:*), and applications are only affected if they set allowAsync:false and execute attacker-controlled JavaScript inside the sandbox.

Know when Vm2 gets its next vulnerability

  • Watch products and get an email when something new is published
  • Check this CVE against your own stack and servers
  • Exploit and PoC references, threat intelligence from 22 sources

No credit card · 7-day full trial

Severity by source

Vendor (VulnCheck) PRIMARY 7.1 HIGH
CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:N/VC:N/VI:L/VA:H/SC:N/SI:N/SA:N
vuln.today AI 7.1 HIGH

Attacker must be able to run script in the sandbox (PR:L, AV:N over the host's exposure); primary impact is escaping the timeout/async control (A:H) with minor integrity (I:L) and no confidentiality.

3.1 AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:L/A:H
4.0 AV:N/AC:L/AT:N/PR:L/UI:N/VC:N/VI:L/VA:H/SC:N/SI:N/SA:N
Red Hat 7.1 HIGH

Primary rating from Vendor (VulnCheck).

CVSS VectorVendor: VulnCheck

Attack Vector
Network
Attack Complexity
Low
Attack Requirements
None
Privileges Required
Low
User Interaction
None
Vulnerable system: Confidentiality
None
Vulnerable system: Integrity
Low
Vulnerable system: Availability
High
Subsequent system: Confidentiality
None
Subsequent system: Integrity
None
Subsequent system: Availability
None

Lifecycle Timeline

2
Patch available
Sep 17, 2026 - 15:17 EUVD
CVE Published
Sep 17, 2026 - 13:46 cve.org
HIGH 7.1

DescriptionCVE.org

vm2 before 3.11.8 does not fully enforce the allowAsync: false option in VM and NodeVM. While localPromise.prototype.then is replaced with a handler that throws 'Async not available', the sandbox's Promise static methods (Promise.resolve, Promise.all, Promise.race, Promise.any, and Promise.allSettled) still assimilate attacker-supplied thenables: native promise resolution performs PromiseResolveThenableJob and invokes the sandboxed code's then method in a microtask without passing through the patched then, so the async restriction is never applied. As a result, sandboxed script can schedule work that runs after VM.run() or NodeVM.run() has returned and outside the configured timeout, continuing to execute after the host believes execution is complete.

Technical POC Analysis

CWE-693 (Protection Mechanism Failure).

Full technical POC analysis - root cause, step-by-step exploitation and patch breakdown - is part of the Pro and Business plans.

Executive ViewAI

Why It Matters

A protection-mechanism flaw in the vm2 sandbox library (versions before 3.11.8) allows untrusted JavaScript to keep running after the sandbox call returns, defeating the timeout and async restrictions that teams rely on as a security boundary. Any application or service that uses vm2 to execute third-party or user-supplied code - including plugin platforms, rules engines, and multi-tenant automation - could be affected by allowing attacker-supplied code to persist and consume resources beyond its intended window. Because the sandbox is frequently treated as the last line of defense, leadership should treat this as a trust-boundary risk pending a vendor fix.

Business Impact: Medium
Compensating Controls

No vendor-released patch identified at time of analysis. Interim mitigations: enforce an external hard wall-clock timeout and resource quotas (CPU, memory, process count) at the OS or container level so asynchronous work cannot continue after NodeVM.run() or VM.run() returns; execute untrusted code only in short-lived, single-use, least-privileged child processes or containers with restricted network egress and filesystem access; restrict which authenticated users and services may submit JavaScript into the sandbox; monitor for anomalous long-running or CPU-consuming sandbox processes; and accelerate migration of untrusted code execution away from the vm2 sandbox to a stronger isolation boundary.

Threat Intelligence Overview

EPSS Score
0.3%
Top 82% exploitable
Prevalence
Medium
popular but deprecated Node.js sandbox library, still widely embedded
Threat Intel
1
1 source
Data Quality
6 sources
Confidence: High

How this decision was reached

The engine reads each signal below and applies a fixed list of rules from top to bottom. The first rule that matches sets the recommended action – like a statement, every line is shown.

SignalValue
Severity HIGH
CISA KEV No
Public POC No
EPSS 0.3%
Patch available Yes
Active threat No
Deciding rule
HIGH severity (CVSS 7.0-8.9)
What every action level means
Emergency Immediate action required. Criteria: CRITICAL + in CISA KEV (actively exploited) without patch, OR CRITICAL + EPSS > 30% without patch, OR CRITICAL + active threat signals without patch.
Act Now Prioritize within 24-48h. Criteria: in KEV with patch available, OR CRITICAL + public POC, OR HIGH + EPSS > 10%, OR CRITICAL + active threat, OR any CRITICAL severity.
This Week Schedule remediation this week. Criteria: HIGH severity (CVSS 7.0-8.9). Patch within normal change window.
This Month Plan within 30 days. Criteria: MEDIUM severity (CVSS 4.0-6.9), lower exploitation probability. Include in regular patch cycle.
Monitor Track and reassess. Criteria: LOW severity (CVSS 0.1-3.9), minimal exploitation risk. No immediate action needed.

SSVC AssessmentENISA

SSVC Decision· derived
Scheduled
Exploitation· derived
None
System Exposure· derived
Open
Automatable· derived
No
Human Impact
Medium

Priority Score

36
Low Medium High Critical
KEV: 0
EPSS: 0
CVSS: +36
PoC: 0
Weaponized: 0
Threat intel: 0
Gov advisory: 0

Attack Technique

Information disclosure occurs when an application unintentionally exposes sensitive data that aids attackers in reconnaissance or directly compromises security.

More in Vm2

View all
CVE-2023-37466 CRITICAL POC
10.0 Jul 14

vm2 is an advanced vm/sandbox for Node.js. Rated critical severity (CVSS 10.0), this vulnerability is remotely exploitab

CVE-2023-32314 CRITICAL POC
10.0 May 15

vm2 is a sandbox that can run untrusted code with Node's built-in modules. Rated critical severity (CVSS 10.0), this vul

CVE-2023-30547 CRITICAL POC
10.0 Apr 17

vm2 is a sandbox that can run untrusted code with whitelisted Node's built-in modules. Rated critical severity (CVSS 10.

CVE-2023-29199 CRITICAL POC
10.0 Apr 14

There exists a vulnerability in source code transformer (exception sanitization logic) of vm2 for versions up to 3.9.15,

CVE-2022-36067 CRITICAL POC
10.0 Sep 06

vm2 is a sandbox that can run untrusted code with whitelisted Node's built-in modules. Rated critical severity (CVSS 10.

CVE-2021-23449 CRITICAL POC
10.0 Oct 18

This affects the package vm2 before 3.9.4 via a Prototype Pollution attack vector, which can lead to execution of arbitr

CVE-2026-26956 CRITICAL POC
9.8 May 04

Full sandbox escape with arbitrary code execution allows remote attackers to break out of vm2's Node.js sandbox environm

CVE-2026-24120 CRITICAL POC
9.8 May 04

Sandbox escape in vm2 for Node.js allows remote unauthenticated attackers to execute arbitrary commands on the host syst

CVE-2026-45411 CRITICAL POC
9.8 May 13

Sandbox escape in vm2 (patriksimek/vm2) versions prior to 3.11.3 enables remote code execution on the host Node.js proce

CVE-2026-22709 CRITICAL POC
9.8 Jan 26

Sandbox escape in vm2 Node.js sandbox before 3.10.2 via Promise.prototype.then/catch callback sanitization bypass. PoC a

CVE-2023-29017 CRITICAL POC
9.8 Apr 06

vm2 is a sandbox that can run untrusted code with whitelisted Node's built-in modules. Rated critical severity (CVSS 9.8

CVE-2022-25893 CRITICAL POC
9.8 Dec 21

The package vm2 before 3.9.10 are vulnerable to Arbitrary Code Execution due to the usage of prototype lookup for the We

Vendor StatusVendor

This site uses cookies essential for authentication and security. No tracking or analytics cookies are used. Privacy Policy