CVE-2026-92958: vm2 builtin denylist bypass in NodeVM

CVE-2026-92958 · Severity: high · CVSS 8.5 · Published 2026-09-17

vm2 is a JavaScript sandbox engine used to safely run untrusted code in an isolated environment. This vulnerability allows sandboxed code to bypass filesystem access restrictions and directly access fs/promises, enabling attackers to create and modify files on the host system despite the embedder explicitly denying fs access. Organizations using vm2 to sandbox user-submitted code or plugins face direct data exposure and system compromise risks.

Technologies: vm2 (npm). Vendors: npm.

Quick answers

Is CVE-2026-92958 exploited in the wild?
No. Junglewise Threat Intelligence has no report of CVE-2026-92958 being exploited in the wild.
How severe is CVE-2026-92958?
High severity, with a CVSS score of 8.5, published 17 September 2026.
Which products and versions are affected?
vm2 (npm) <= 3.11.6, SEMVER:introduced=0,fixed=3.11.7.
Is there a fix for CVE-2026-92958?
Yes. vm2 (npm): upgrade to 3.11.7 or later. Junglewise finds every place you run it, drafts the upgrade and applies it once you approve.
How is CVE-2026-92958 attacked?
It is attacked over the network.
Am I affected by CVE-2026-92958?
Check whether you run vm2 (npm) at an affected version. Junglewise does that check for you around the clock: connect your code, cloud and domains, and it matches new vulnerabilities like this one against what you actually run and tells you when one reaches you.

How to fix

  • vm2 (npm): upgrade to 3.11.7 or later
    npm install vm2@3.11.7

Technical details

The vulnerability is a denylist bypass in NodeVM's builtin module filtering (lib/builtin.js). When using a wildcard policy (e.g., require: { builtin: ['*', '-fs', '-child_process'] }), negative entries are matched by exact module name only. This means -fs blocks only the fs module itself but not fs/promises or node:fs/promises. Additionally, the node: prefix handling is inconsistent—negative entries like -node:fs/promises do not block require('fs/promises'). An attacker with code execution in the sandbox can call require('fs/promises') to access the promise-based filesystem API, then use methods like fsp.writeFile(), mkdir, rm, and others to read/write/modify files on the host. The attack requires no additional privileges or user interaction. This issue is fixed in vm2 3.11.7.

Affected products

  • vm2 vm2 through 3.11.6

Identifiers

  • CVE-2026-92958
  • GHSA-6rh5-qq4q-97xh

Timeline

  • 2026-08-24: disclosed: GitHub Security Advisory GHSA-6rh5-qq4q-97xh published
  • 2026-09-17: advisory: CVE-2026-92958 published
  • 2026: patched: Fixed in vm2 3.11.7

References

This page as Markdown. Free to reuse under CC BY 4.0 with a link back.