vm2 JSPI-backed Promise.finally() Sandbox Escape
CVE-2026-47210 is a sandbox escape vulnerability in vm2 versions before 3.11.4. When untrusted asynchronous JavaScript executes on a runtime exposing the WebAssembly JavaScript Promise Integration APIs, a JSPI-backed Promise can reach Promise.prototype.finally() while bypassing vm2's Promise-species hardening. Attacker-controlled species logic can then receive a host-originated rejection object, breaking the vm2 isolation boundary and enabling code execution in the host process.
What it means and what to do now: patch path, interim mitigations, and the assume-compromise checklist.
What an attacker gets, and what they’ve been doing with it.
Successful exploitation breaks the vm2 sandbox boundary and enables arbitrary code and command execution in the host process. An attacker can access files available to that process and steal secrets and credentials, resulting in complete compromise of services that depend on vm2 isolation.
If you can’t patch tonight, do this now.
Until vm2 is upgraded, do not rely on vulnerable vm2 versions as a security boundary on runtimes that expose WebAssembly JSPI. Limit or disable execution of untrusted code in affected vm2 deployments, particularly where asynchronous code support is enabled.
Patch, then assume compromise.
Upgrade vm2 to version 3.11.4 or later. The patched release removes WebAssembly.promising and WebAssembly.Suspending from the sandbox environment before untrusted code executes.
No public exploits tracked yet. Mallory keeps watching.
7 sources tracked across advisories, community write-ups, and news. New activity surfaces here as Mallory finds it.