---
title: "CVE-2026-100721: vm2: NodeVM custom resolution bypasses external path boundaries"
url: https://erroneo.us/security/cve/CVE-2026-100721/
description: "CVE-2026-100721 (vm2 (npm)): vm2 before 3.12.2 contains an authorization bypass in the NodeVM external-module resolver. When an embedder configures…"
type: vulnerability-record
section: "Security Digest"
date_published: 2026-09-27
date_modified: 2026-10-07
publisher: erroneo.us
author: erroneo.us Security Desk
cve: "CVE-2026-100721"
kev: false
cvss: 9.5
epss: 0.004
license: All rights reserved. Quote with attribution and a link.
---

# CVE-2026-100721: vm2: NodeVM custom resolution bypasses external path boundaries

**Signal:** Critical and remotely reachable. No known exploitation yet, but it is network-reachable without credentials. (Computed from CISA KEV, EPSS and CVSS; not an editorial verdict.)

## Should you act?

- Not in CISA KEV , but CISA’s SSVC assessment records a public proof-of-concept, so attack code exists.
- EPSS 0.4% , percentile 33: FIRST’s model estimates a 0.4% chance of exploitation activity in the next 30 days, higher than 33% of all scored CVEs (low). EPSS is a probability, not a verdict.
- Remotely reachable with no login and no user interaction. If the vulnerable service is exposed to the internet, prioritize it.
- Only applies if your dependency tree includes vm2 (npm) <= 3.12.1, fixed in 3.12.2 . Check your lockfile, including transitive dependencies.
- Editorial verdict: Check exposure. vm2: 22 Critical Sandbox Escapes, Fixed in 3.12.2 — If anything outside your trust boundary can get code into vm2, upgrade to 3.12.2 today and plan to move that code out of process; if vm2 only runs your own code, upgrade on a normal cycle.

## What it is

vm2 before 3.12.2 contains an authorization bypass in the NodeVM external-module resolver. When an embedder configures require.external with a custom resolver (and context: 'host'), LegacyResolver.customResolve in lib/resolver-compat.js records the resolved module directory in this.externals as new RegExp('^' + escapeRegExp(resolvedPath)), without requiring a path separator or end-of-string boundary. Untrusted guest code can therefore require the allowlisted module (e.g. foo) and then require the absolute path of a non-allowlisted sibling whose path merely shares the resolved prefix (e.g. .../nodemodules/foo2/index.js); the sibling passes isPathAllowedForModule and is loaded through hostRequire, so its top-level code runs in the host process before the exports are wrapped with vm.readonly, resulting in a sandbox escape and arbitrary code execution in the host context.

## Affected packages

- npm `vm2` <= 3.12.1 → fixed: 3.12.2

## Affected products (CVE record)

- patriksimek vm2: < 3.12.2

## Severity

- VulnCheck CVSS 4.0: 9.5 `CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:H/VI:H/VA:H/SC:H/SI:H/SA:H`
- VulnCheck CVSS 3.1: 9 `CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:C/C:H/I:H/A:H`
- GitHub CVSS 4.0: 9.5 `CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:H/VI:H/VA:H/SC:H/SI:H/SA:H`

## Exploitation

- CISA KEV: not listed (no confirmed in-the-wild exploitation known to CISA).
- CISA SSVC assessment: exploitation poc , automatable no , technical impact total .
- FIRST EPSS (model of 2026-10-21): 0.40% probability of exploitation activity in the next 30 days; percentile 33.

## Sources

- [GitHub Security Advisory (GHSA-5h3f-q97h-ccvc)](https://github.com/patriksimek/vm2/security/advisories/GHSA-5h3f-q97h-ccvc)
- [Patch Commit](https://github.com/patriksimek/vm2/commit/6ac3916da84e060c403e407b6b6318fcc66b0e72)
- [Patch Commit](https://github.com/patriksimek/vm2/commit/ab4ee7d803e8c80155e9eb3672226bddbca4aa9c)
- [Patch Commit](https://github.com/patriksimek/vm2/commit/91034466bfb7f56b95fd48083ec6ca36d058f164)
- [GitHub Advisory GHSA-5h3f-q97h-ccvc](https://github.com/advisories/GHSA-5h3f-q97h-ccvc)
- [CVE.org record CVE-2026-100721](https://www.cve.org/CVERecord?id=CVE-2026-100721)
- [NVD entry CVE-2026-100721](https://nvd.nist.gov/vuln/detail/CVE-2026-100721)
- [VulnCheck Advisory: vm2 before 3.12.2 Authorization Bypass via Custom Resolver](https://www.vulncheck.com/advisories/vm2-before-3.12.2-authorization-bypass-via-custom-resolver)
- [github.com](https://github.com/patriksimek/vm2/commit/fb4977f6211da6cadffdf1f3a2017a826a21c51f)
- [github.com](https://github.com/patriksimek/vm2/releases/tag/v3.12.2)

---
Source page: https://erroneo.us/security/cve/CVE-2026-100721/ · Security Digest: https://erroneo.us/security/ · More: https://erroneo.us/llms.txt
