Skip to main content

vm2 CVE-2026-92953

| EUVDEUVD-2026-81602 CRITICAL
Improper Control of Dynamically-Managed Code Resources (CWE-913)
9.3
CVSS 4.0 · Vendor: VulnCheck
View

Attack ChainAIDerived

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

  1. Access
    Submit malicious JS to vm2 sandbox
  2. Delivery
    Walk prototype chain to host TypedArray/ArrayBuffer prototypes
  3. Exploit
    Mutate host Uint8Array/%TypedArray%/ArrayBuffer.prototype
  4. Execution
    VM.run() returns to host
  5. Persist
    Host typed arrays observe attacker properties
  6. Impact
    Corrupt host data integrity/availability

Vulnerability Assessment

Weakness
CWE
OWASP Top 10:2025
A08:2025 - Software or Data Integrity Failures
ASVS 5.0
V15 - Secure Coding and Architecture Dynamic code resource control
Exploitation Conditions

Exploitation requires that the host application embed vm2 (versions 3.11.0 through 3.11.7) and execute attacker-controlled JavaScript inside a VM/NodeVM sandbox, then subsequently create or operate on host-side TypedArray/ArrayBuffer instances whose polluted prototype properties are observable. The vulnerability is inherent to any such configuration (no non-default option is named as a prerequisite), but it is fundamentally gated by the vm2 usage model: applications that do NOT run untrusted code in vm2, or that never touch host typed arrays after sandbox execution, are not exploitable. The limiting factor is therefore the deliberate deployment of vm2 as an untrusted-code sandbox - not a special feature flag.

Impact

The CVSS 4.0 vector (AV:N/AC:L/PR:N/UI:N, VI:H/VA:H plus subsequent-system SI:H/SA:H) rates this 9.3 Critical, reflecting a sandbox-escape-class prototype pollution where mutations to host TypedArray/ArrayBuffer prototypes persist into the host realm after VM.run() returns - a genuine scope change affecting the subsequent (host) system. However, this is a library-embedded vulnerability whose real-world risk is entirely conditional on the vm2 threat model: it only matters where an application deliberately executes untrusted/attacker-supplied JavaScript inside a vm2 sandbox and later handles host-created typed arrays. There is no EPSS score, no CISA KEV listing, and no explicitly published exploit in the provided data (a working technique is likely described in the GHSA advisory but is not confirmed as standalone POC). Notably, the vendor tags this 'Information Disclosure', which directly conflicts with the CVSS vector setting VC:N (no confidentiality impact) - the actual impact is integrity and availability, so treat the tag as mislabeled. One data caveat: the stated fix version 3.11.8 does not match vm2's public release history (the project stopped around 3.9.19 and was deprecated in 2023), so the version metadata should be verified against the advisory. Net: a legitimately high-severity flaw for the narrow population that still runs vm2 with untrusted code, but not a broad internet-facing emergency absent that specific usage.

Exploit ScenarioDerived

An application uses vm2 (3.11.0-3.11.7) to run untrusted user-supplied JavaScript - e.g. a code playground, template evaluator, or serverless function runner. Malicious sandboxed code walks prototype chains to reach and mutate host Uint8Array.prototype/%TypedArray%.prototype/ArrayBuffer.prototype, so that after VM.run() returns, host code operating on its own typed arrays observes attacker-controlled properties, corrupting host-side data handling or logic. No public standalone exploit is confirmed, though the GHSA advisory likely details the prototype-walking primitive.

Act Now Prioritize within 24-48h. Why: CRITICAL severity.
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

Prototype pollution in the vm2 Node.js sandbox (versions 3.11.0 through 3.11.7) lets JavaScript running inside a VM/NodeVM instance walk the prototype chain into host-realm intrinsics and mutate Uint8Array.prototype, %TypedArray%.prototype, and ArrayBuffer.prototype, so the pollution survives after VM.run() returns and is observed by host-created typed arrays. Because the vm2 usage model is to execute untrusted code, the CVSS 4.0 vector (AV:N/AC:L/PR:N/UI:N, VI:H/VA:H plus SI:H/SA:H) yields a 9.3 Critical sandbox-escape-class rating: unauthenticated remote attackers who can supply the sandboxed script can reach the host realm, though the impact is only realized if the host application subsequently creates or operates on host-side TypedArray/ArrayBuffer instances. No public exploit code was identified at time of analysis and the issue is not listed as confirmed actively exploited (CISA KEV), so risk is driven by upstream supply-chain exposure of applications embedding vm2 as an untrusted-code boundary. The vulnerability was reported by VulnCheck and is tracked under CWE-913.

RemediationAI

Vendor-released patch: upgrade vm2 to 3.11.8 or later, which is the first version outside the affected 3.11.0-through-3.11.7 range; confirm the resolved version in your lockfile (npm ls vm2) because the fix is transitive for many consumers. If immediate upgrade is not possible, treat vm2 as a non-isolating sandbox and move untrusted execution out of premise: run the untrusted script in a separate OS process or container with resource and filesystem limits rather than in-process with vm2, or switch to an isolate-backed runtime (for example Node's worker_threads with a separate isolate or isolated-vm), accepting the added latency and IPC complexity that comes with process/isolate boundaries. As an in-process stopgap, freeze the intrinsic prototypes before executing untrusted code (Object.freeze(Uint8Array.prototype), Object.freeze(ArrayBuffer.prototype), and the shared %TypedArray%.prototype) so subsequent writes from the sandbox throw instead of persisting - the trade-off is that this is a process-wide change and can break libraries or application code that legitimately add properties or polyfills to typed-array prototypes, and it must be applied before any untrusted execution and re-applied if prototypes are re-created. Additionally, avoid creating or consuming host-side TypedArray and ArrayBuffer instances with attacker-influenced property access after VM.run() returns (copying results through JSON serialization or an explicit allowlist of properties avoids reading polluted prototype attributes), and audit host code paths that iterate or read typed-array properties after sandboxed execution. Consult GHSA-3vgf-8m4q-q4qr (https://github.com/patriksimek/vm2/security/advisories/GHSA-3vgf-8m4q-q4qr) and the VulnCheck advisory (https://www.vulncheck.com/advisories/vm2-3.11.0-through-3.11.7-prototype-pollution-via-typedarray) for vendor guidance; no public exploit code was identified at time of analysis, but the absence of published exploit code should not be treated as a reason to delay the upgrade because the affected versions remain the current dependency range in many deployments.

Affected VersionsENISA

vm2 3.11.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 widely embedded npm library that runs untrusted JavaScript inside Node.js with a proxy-based membrane intended to isolate the sandbox realm from the host. The CWE-913 root cause class (Improper Control of Dynamically-Managed Code Resources) manifests here through improper control of dynamically-determined object attributes: the sandbox's prototype-walking protections do not cover the typed-array intrinsic prototypes, so primitives that traverse the prototype chain can reach and modify host-realm objects such as Uint8Array.prototype, %TypedArray%.prototype, and ArrayBuffer.prototype. Unlike a simple denial-of-service pollution, these are shared intrinsic objects, so the mutation persists beyond the sandboxed execution and is visible to code running afterwards in the host realm. CPE data (cpe:2.3:a:patriksimek:vm2:*:*:*:*:*:*:*:*) identifies the patriksimek:vm2 package as the sole affected component, with the version range stated as 3.11.0 through 3.11.7. The scope-change (S:C in the assessor's CVSS 3.1 view) reflects that the vulnerable component (the sandbox) and the impacted component (the host process and any typed-array consumers it serves) are distinct - an escape of the untrusted-code boundary rather than a defect confined to the sandbox itself.

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 9.3 CRITICAL
CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:H/VA:H/SC:N/SI:H/SA:H
vuln.today AI 10.0 CRITICAL

Sandboxed untrusted code (PR:N, AV:N, AC:L) mutates host prototypes crossing the sandbox boundary (S:C) with no confidentiality but high integrity/availability impact on the host.

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

Primary rating from Vendor (VulnCheck).

CVSS VectorVendor: VulnCheck

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

Lifecycle Timeline

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

DescriptionCVE.org

vm2 versions from 3.11.0 before 3.11.8 fail to protect host TypedArray and ArrayBuffer prototypes from sandbox mutation. Attackers can use prototype-walking primitives to reach and modify host Uint8Array.prototype, %TypedArray%.prototype, and ArrayBuffer.prototype, causing host-created typed arrays to observe attacker-controlled properties after VM.run() returns.

Technical POC Analysis

Prototype pollution / incomplete host-intrinsic protection.

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

Organizations that embed the vm2 Node.js sandbox (versions 3.11.0 through 3.11.7) to run untrusted JavaScript face a critical isolation failure: an unauthenticated remote attacker who can supply the sandboxed script may escape into the host realm and mutate host-side typed-array and ArrayBuffer prototypes. No vendor-released patch identified at time of analysis, and no public exploit identified at time of analysis, so leadership should treat any service that executes third-party or user-supplied code via vm2 as a high-priority risk to application integrity and availability.

Business Impact: Severe
Compensating Controls

No vendor-released patch identified at time of analysis; interim mitigations include removing or disabling vm2 3.11.0-3.11.7 for untrusted code, running untrusted scripts in separate low-privilege processes or containers, restricting script input to trusted sources, and monitoring for anomalous TypedArray/ArrayBuffer prototype changes.

Threat Intelligence Overview

EPSS Score
0.3%
Top 72% exploitable
Prevalence
Medium
popular but deprecated Node.js sandbox library, niche embedded use
Threat Intel
1
1 source
Data Quality
4 sources
Confidence: Medium

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 CRITICAL
CISA KEV No
Public POC No
EPSS 0.3%
Patch available Yes
Active threat No
Deciding rule
CRITICAL severity
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
Out-of-Cycle
Exploitation· derived
None
System Exposure· derived
Open
Automatable· derived
Yes
Human Impact
Very High

Priority Score

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

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