---
id: CVE-2026-92962
title: vm2 is a sandbox for running untrusted JavaScript
summary: >-
  vm2 is a sandbox for running untrusted JavaScript. In vm2 versions up to and
  including 3.11.3, the defaultSandboxPrepareStackTrace function in
  lib/setup-sandbox.js builds its output array using prototype-walking index
  assignment (lines[l…
severity: low
cvss: 2.1
cvssVector: 'CVSS:4.0/AV:L/AC:H/AT:N/PR:N/UI:N/VC:N/VI:N/VA:N/SC:N/SI:L/SA:N'
cwe:
  - CWE-693
  - CWE-915
vendor: patriksimek
product: vm2
affected:
  - vm2 < 3.11.4
published: '2026-09-17'
updated: '2026-09-17'
sourceUpdated: '2026-09-17T16:18:34.940'
source: NVD
sourceUrl: 'https://nvd.nist.gov/vuln/detail/CVE-2026-92962'
references:
  - url: 'https://github.com/patriksimek/vm2/security/advisories/GHSA-q3fm-4wcw-g57x'
    label: disclosure@vulncheck.com
  - url: >-
      https://www.vulncheck.com/advisories/vm2-before-3.11.4-defense-invariant-violation-via-setup-sandbox-js
    label: disclosure@vulncheck.com
  - url: 'https://github.com/patriksimek/vm2/security/advisories/GHSA-q3fm-4wcw-g57x'
    label: 134c704f-9b21-4f2e-91b3-4a467353bcc0
  - url: >-
      https://security.access.redhat.com/data/csaf/v2/vex/2026/cve-2026-92962.json
  - url: 'https://access.redhat.com/security/cve/CVE-2026-92962'
  - url: 'https://www.cve.org/CVERecord?id=CVE-2026-92962'
  - url: 'https://nvd.nist.gov/vuln/detail/CVE-2026-92962'
  - url: 'https://bugzilla.redhat.com/show_bug.cgi?id=2536028'
tags:
  - nvd
  - cve.org
  - exploit-available
  - csaf
  - vex
  - red-hat
exploitAvailable: true
ssvc:
  exploitation: poc
  automatable: 'no'
  technicalImpact: partial
  timestamp: '2026-09-17T15:39:05.864817Z'
cvssSource: cna
ingestedAt: '2026-09-17T14:19:30.992Z'
scores:
  cna: 2.1
  vendor: 2.5
epss: 0.00155
epssPercentile: 0.03892
---

## Overview

vm2 is a sandbox for running untrusted JavaScript. In vm2 versions up to and including 3.11.3, the defaultSandboxPrepareStackTrace function in lib/setup-sandbox.js builds its output array using prototype-walking index assignment (lines[lines.length] = value) rather than a prototype-bypassing define-property primitive. Because this bridge-internal array is allocated in the sandbox realm, code inside the sandbox can install an accessor on Array.prototype for the relevant index; the accessor is then invoked whenever the sandbox reads error.stack (or otherwise triggers Error.prepareStackTrace), allowing sandbox code to observe and intercept each stack-trace line written by the bridge. The same pattern is used in the error-handling (catch) branch. The values written are formatted strings only, so the practical impact is limited to an information side channel and a violation of vm2's bridge-container defense invariant rather than a sandbox escape; the vendor rates the issue Low. The issue is fixed in vm2 3.11.4, which installs each entry as an own data property via Reflect.defineProperty.

## Remediation

Refer to the linked advisories for vendor-supplied fixes and affected version ranges.

## Vendor advisories

- **Red Hat VEX** · Low · updated 2026-09-18 · [vex](https://security.access.redhat.com/data/csaf/v2/vex/2026/cve-2026-92962.json)
