CVE-2026-100721: patriksimek vm2 · Incorrect Authorization
Affects patriksimek vm2Source CVE Database V5
Public exploit available · CVSS 9.5 Critical : upgrade to 3.12.2 as a priority.
Data as of 26 Oct 2026, 10:12 UTC
- EPSS
- 0.5% chance of exploitation in 30 days – higher than 47% of CVEsExploit Prediction Scoring System: the likelihood attackers will use this flaw soon.
- CISA SSVC
- Exploitation
- Proof of concept is public or traded
- Automatable
- Attackers cannot reliably automate steps 1–4 of the kill chain
- Technical impact
- Total control over the software or total information disclosure
CISA SSVC assessment, 2026-09-28.
- Patch
- Available – fixed in 3.12.2
CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:H/VI:H/VA:H/SC:H/SI:H/SA:HExploitation evidence
t = 0 is the CVE’s publication on cve.org
Disclosed: evidence found.
CVE published 27 Sep 2026
Detectable: no evidence on record.
No public nuclei template indexed
Weaponised: evidence found.
CISA SSVC: proof of concept public
Exploited in the wildExploited: no evidence on record.
Not in CISA KEV and no source reports exploitation
Observed by OffSeq MirageSeen by Mirage: no evidence on record.
No attack traffic recorded by OffSeq Mirage sensors
Timeline
CVE ID reserved
by VulnCheck
, 23 hours before disclosure
CVE published
on cve.org
, t = 0
CISA SSVC assessment
proof of concept public
, 39 hours after disclosure
In Threat Radar
record ingested
, 29 days after disclosure
A missing step is not evidence of safety. Sources: cve.org (opens in a new tab), CISA SSVC, the Metasploit, Exploit-DB and nuclei-templates index as of 26 Oct 2026.
What to do
Upgrade patriksimek vm2 to 3.12.2.
Affected software
| Product | Affected | Fixed in |
|---|---|---|
| patriksimekvm2 | Affected
| Fixed in
|
npmvm2pkg:npm/vm2Other threats | Affected
| Fixed in
|
Check your own hosts for these packages with threat-finder (opens in a new tab), our free open-source scanner.
Description
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. `.../node_modules/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.
References
- github.com/patriksimek/vm2/security/advisories/GHSA-5h3f-q97h-ccvc (opens in a new tab)
- github.com/patriksimek/vm2/commit/6ac3916da84e060c403e407b6b6318fcc66b0e72 (opens in a new tab)
- github.com/patriksimek/vm2/commit/ab4ee7d803e8c80155e9eb3672226bddbca4aa9c (opens in a new tab)
- github.com/patriksimek/vm2/commit/91034466bfb7f56b95fd48083ec6ca36d058f164 (opens in a new tab)
- vulncheck.com/advisories/vm2-before-3.12.2-authorization-bypass-via-custom-resolver (opens in a new tab)