DEV Community

CVE Reports
CVE Reports

Posted on Originally published at cvereports.com

CVE-2026-92949: CVE-2026-92949: Sandbox Escape and State Mutation in vm2 via Accessor Property Descriptor Leak

CVE-2026-92949: Sandbox Escape and State Mutation in vm2 via Accessor Property Descriptor Leak

Vulnerability ID: CVE-2026-92949
CVSS Score: 4.0
Published: 2026-10-01

CVE-2026-92949 is a sandbox bypass vulnerability in the vm2 library affecting versions 3.9.6 through 3.11.6. The flaw exists due to a breakdown in the ReadOnlyHandler proxy boundary, allowing sandboxed scripts to obtain direct references to wrapped property setters on frozen host-bound objects, ultimately leading to unauthorized state modification in the host environment. This security failure violates the read-only contract enforced by the sandbox for frozen/readonly objects, though it does not by itself allow a full execution-level realm escape. Due to systemic and structural design difficulties in securing a shared-runtime JavaScript sandbox, the vm2 library has been officially deprecated.

TL;DR

A security flaw in vm2's proxy bridge allows sandboxed applications to leak and invoke property setters on frozen objects, enabling unauthorized write access to host-realm configurations and bypassing isolation controls.


⚠️ Exploit Status: POC

Technical Details

  • CWE ID: CWE-471: Modification of Assumed-Immutable Data (MAID)
  • Attack Vector: Network / Sandboxed Script Execution
  • CVSS Score: 4.0 (Medium)
  • EPSS Score: 0.00319 (Percentile: 22.47%)
  • Impact: Low Integrity (State Modification of Host objects)
  • Exploit Status: Proof of Concept (PoC) Verified
  • KEV Status: Not Listed

Affected Systems

  • Node.js applications running vm2 library within multi-tenant execution contexts
  • vm2: >= 3.9.6, < 3.11.7 (Fixed in: 3.11.7)

Code Analysis

Commit: d6ef73b

Fix sandbox bypass via accessor property descriptors by stripping setters on sandbox-bound properties and adjusting doPreventExtensions loops.

Exploit Details

  • Official Test Suites: Exploitation via Object.getOwnPropertyDescriptor and lookupSetter is verified within unit tests of the fixing commit.

Mitigation Strategies

  • Upgrade to vm2 version 3.11.7 or later to apply the explicit descriptor-filtering patch.
  • Migrate the application execution pipeline from the deprecated vm2 library to isolated-vm.
  • Enforce strict input sanitization inside host-defined accessors exposed to untrusted code.
  • Avoid passing complex host objects containing getters/setters to sandboxed contexts.

Remediation Steps:

  1. Identify instances of vm2 in package.json and transitively via npm-list.
  2. Update the package version constraint to 3.11.7.
  3. Execute npm install to rebuild dependency trees with the patched version.
  4. Prepare a migration path to isolate untrusted scripts inside isolated-vm or isolated micro-containers.

References


Read the full report for CVE-2026-92949 on our website for more details including interactive diagrams and full exploit analysis.

Top comments (0)