{"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.00167,"epssPercentile":0.06365,"slug":"CVE-2026-92962","body":"## Overview\n\nvm2 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.\n\n## Remediation\n\nRefer to the linked advisories for vendor-supplied fixes and affected version ranges.\n\n## Vendor advisories\n\n- **Red Hat VEX** · Low · updated 2026-09-18 · [vex](https://security.access.redhat.com/data/csaf/v2/vex/2026/cve-2026-92962.json)","depth":"twilight","depthScore":24,"depthScoreParts":{"impact":11.6,"likelihood":0,"exploitation":12,"ransomware":0},"changes":[{"seq":206272,"id":"CVE-2026-92962","ts":1789662166300,"field":"exploit_available","old":"false","new":"true"}]}