<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Vm2 (&lt;= 3.11.3) — CraftedSignal Threat Feed</title><link>https://feed.craftedsignal.io/products/vm2--3.11.3/</link><description>Trending threats, MITRE ATT&amp;CK coverage, and detection metadata. Fed continuously.</description><generator>Hugo</generator><language>en</language><managingEditor>hello@craftedsignal.io</managingEditor><webMaster>hello@craftedsignal.io</webMaster><lastBuildDate>Fri, 29 May 2026 17:52:09 +0000</lastBuildDate><atom:link href="https://feed.craftedsignal.io/products/vm2--3.11.3/feed.xml" rel="self" type="application/rss+xml"/><item><title>vm2 CVE-2023-37903 Patch Bypass: Remote Code Execution</title><link>https://feed.craftedsignal.io/briefs/2026-05-vm2-rce-bypass/</link><pubDate>Fri, 29 May 2026 17:52:09 +0000</pubDate><author>hello@craftedsignal.io</author><guid isPermaLink="true">https://feed.craftedsignal.io/briefs/2026-05-vm2-rce-bypass/</guid><description>The vm2 npm package has a remote code execution vulnerability due to a patch bypass for CVE-2023-37903; the vulnerability occurs because the check for `nesting: true` and `require: false` in `nodevm.js` uses strict equality, which can be bypassed by omitting the `require` option entirely, allowing an attacker to execute arbitrary OS commands.</description><content:encoded><![CDATA[<p>The vm2 npm package, a sandboxing solution for Node.js, is vulnerable to a remote code execution (RCE) bypass of the CVE-2023-37903 patch. This bypass occurs because the check implemented to prevent the combination of <code>nesting: true</code> and <code>require: false</code> uses strict equality (<code>===</code>). By simply omitting the <code>require</code> option when instantiating a <code>NodeVM</code>, the check is bypassed, as <code>options.require</code> becomes <code>undefined</code>, not <code>false</code>. This oversight allows an attacker to bypass the intended security restrictions and execute arbitrary code on the host system. This vulnerability affects vm2 versions 3.11.3 and earlier and poses a significant risk to applications relying on vm2 for sandboxing untrusted code.</p>
<h2 id="attack-chain">Attack Chain</h2>
<ol>
<li>An attacker injects malicious JavaScript code into a <code>NodeVM</code> instance configured with <code>nesting: true</code> but without explicitly setting the <code>require</code> option.</li>
<li>The initial security check in <code>nodevm.js</code> at line 263 fails because <code>options.require</code> is <code>undefined</code> instead of <code>false</code>, thus bypassing the intended restriction.</li>
<li>The code inside the <code>NodeVM</code> then uses <code>require('vm2')</code> to gain access to the vm2 library itself.</li>
<li>The injected code constructs a new, nested <code>NodeVM</code> instance, this time explicitly enabling the <code>child_process</code> module via <code>require: { builtin: ['child_process'] }</code>.</li>
<li>The nested <code>NodeVM</code> instance is then used to execute arbitrary operating system commands using <code>child_process.execSync()</code>.</li>
<li>The output of the command is converted to a string.</li>
<li>The string is returned as the result of the initial <code>nvm.run()</code> call, demonstrating successful command execution on the host.</li>
<li>The attacker achieves full remote code execution on the host system.</li>
</ol>
<h2 id="impact">Impact</h2>
<p>Successful exploitation of this vulnerability allows an attacker to execute arbitrary commands on the host system. In a multi-tenant environment or any situation where vm2 is used to sandbox untrusted code, this can lead to complete system compromise. The attacker can gain access to sensitive data, install malware, or pivot to other systems on the network. The observed damage is full RCE.</p>
<h2 id="recommendation">Recommendation</h2>
<ul>
<li>Upgrade to a patched version of vm2 that addresses this vulnerability.</li>
<li>Apply the suggested fix to <code>nodevm.js</code> locally if an immediate upgrade is not possible: Change the check to <code>if (options.nesting === true &amp;&amp; !options.require)</code> as documented in the advisory.</li>
<li>Deploy the Sigma rules provided to detect attempts to exploit this vulnerability, focusing on <code>process_creation</code> events originating from within vm2 sandboxes.</li>
<li>Monitor for unusual <code>require()</code> calls within vm2 sandboxes, especially those attempting to load the <code>child_process</code> module.</li>
</ul>
]]></content:encoded><category domain="severity">critical</category><category domain="type">advisory</category><category>vm2</category><category>rce</category><category>sandbox-escape</category><category>CVE-2026-47137</category></item><item><title>VM2 Sandbox Escape via JSPI Promise .finally() Species Bypass (CVE-2026-47210)</title><link>https://feed.craftedsignal.io/briefs/2026-05-vm2-sandbox-escape/</link><pubDate>Fri, 29 May 2026 17:51:55 +0000</pubDate><author>hello@craftedsignal.io</author><guid isPermaLink="true">https://feed.craftedsignal.io/briefs/2026-05-vm2-sandbox-escape/</guid><description>A sandbox escape vulnerability, CVE-2026-47210, in `vm2` allows arbitrary code execution in the host process when untrusted code is executed with async support on runtimes exposing WebAssembly JSPI, bypassing Promise-species hardening and exposing a host-originated rejection object to attacker-controlled species logic.</description><content:encoded><![CDATA[<p>A critical sandbox escape vulnerability exists in <code>vm2</code> (versions 3.11.3 and earlier) that allows for arbitrary code execution on the host system. This vulnerability, assigned CVE-2026-47210, occurs when <code>vm2</code> is used with Node.js runtimes (specifically Node 26) that expose WebAssembly JSPI features (<code>WebAssembly.promising</code> / <code>WebAssembly.Suspending</code>). By exploiting the interaction between JSPI-backed Promises and the <code>.finally()</code> method, an attacker can bypass the intended sandbox protection and gain access to the host process. This bypass exposes a host-originated TypeError during JSPI processing which exposes a usable host constructor chain within attacker-controlled species logic. This can lead to full compromise of services relying on <code>vm2</code> isolation.</p>
<h2 id="attack-chain">Attack Chain</h2>
<ol>
<li>Attacker provides untrusted JavaScript code to the <code>vm2</code> sandbox environment.</li>
<li>The JavaScript code leverages WebAssembly JSPI features, specifically <code>WebAssembly.promising</code> and <code>WebAssembly.Suspending</code>, to create JSPI-backed Promises.</li>
<li>The attacker manipulates the JSPI-backed Promise to reach the <code>Promise.prototype.finally()</code> method.</li>
<li>The <code>finally()</code> method is triggered, leading to execution of attacker-controlled species logic.</li>
<li>A host-originated <code>TypeError</code> is generated during JSPI processing due to the Promise rejection.</li>
<li>The rejection object from the TypeError exposes a host constructor chain to the attacker.</li>
<li>The attacker utilizes the host constructor chain to gain access to the host <code>process</code> object.</li>
<li>The attacker leverages the <code>process</code> object (e.g., <code>process.mainModule.require('child_process').execSync</code>) to execute arbitrary commands on the host system, escaping the sandbox.</li>
</ol>
<h2 id="impact">Impact</h2>
<p>This vulnerability allows for a complete sandbox escape, leading to arbitrary code execution in the host process. This poses a significant risk to applications relying on <code>vm2</code> for security isolation. Successful exploitation can result in arbitrary command execution, unauthorized file access (read/write), theft of sensitive data (secrets, tokens, credentials), and full compromise of services utilizing <code>vm2</code>. This issue affects applications using <code>vm2</code> to execute untrusted JavaScript, especially those running on Node.js 26.</p>
<h2 id="recommendation">Recommendation</h2>
<ul>
<li>Upgrade <code>vm2</code> to a version greater than 3.11.3 to patch CVE-2026-47210.</li>
<li>Apply the following rules to detect potential exploitation attempts targeting <code>vm2</code> sandboxes.</li>
<li>Monitor process creation events for unexpected child processes spawned from Node.js processes, especially if they involve command execution (Rule: &ldquo;Detect Suspicious Child Process from Node.js&rdquo;).</li>
<li>Monitor <code>vm2</code> for suspicious activity related to WebAssembly and Promise handling (Rule: &ldquo;Detect vm2 WebAssembly Promise .finally()&rdquo;).</li>
</ul>
]]></content:encoded><category domain="severity">critical</category><category domain="type">advisory</category><category>sandbox-escape</category><category>rce</category><category>vm2</category></item><item><title>VM2 Sandbox Breakout Vulnerability via Promise Species Manipulation (CVE-2026-47208)</title><link>https://feed.craftedsignal.io/briefs/2026-05-vm2-sandbox-breakout/</link><pubDate>Fri, 29 May 2026 17:41:49 +0000</pubDate><author>hello@craftedsignal.io</author><guid isPermaLink="true">https://feed.craftedsignal.io/briefs/2026-05-vm2-sandbox-breakout/</guid><description>VM2 is vulnerable to a sandbox breakout vulnerability (CVE-2026-47208) that allows attackers to execute arbitrary commands on the host system by manipulating Promise species and escaping the sandbox context.</description><content:encoded><![CDATA[<p>A critical sandbox breakout vulnerability (CVE-2026-47208) has been identified in vm2 versions 3.11.3 and earlier. This flaw allows an attacker with the ability to execute arbitrary code within the vm2 sandbox to escape the sandbox and achieve arbitrary code execution on the host system. The vulnerability arises due to a missing <code>resetPromiseSpecies</code> call within the <code>localPromise</code> constructor when handling rejected promises, leading to the possibility of injecting a custom promise with a specially crafted reject method. This bypasses the intended security boundaries of the vm2 sandbox.</p>
<h2 id="attack-chain">Attack Chain</h2>
<ol>
<li>Attacker gains initial code execution within the vm2 sandbox environment.</li>
<li>Attacker defines a custom <code>FakePromise</code> class with a getter for <code>Symbol.species</code> that returns a custom constructor <code>ct</code>.</li>
<li>Attacker defines a function <code>doCatch</code> that takes a function <code>f</code> as input and creates a new Promise using <code>Promise.withResolvers()</code>.</li>
<li>The custom constructor <code>ct</code> is assigned to the <code>Symbol.species</code> of the <code>FakePromise</code> class within the <code>doCatch</code> function. The <code>ct</code> constructor defines how the promise will be resolved or rejected, intercepting errors.</li>
<li>The <code>FakePromise</code> constructor is called with a resolver function, allowing the custom reject method in <code>ct</code> to get called when a promise is rejected.</li>
<li>The attacker triggers an error within the sandbox (e.g., a <code>RangeError</code> by overflowing the stack). The custom reject method in <code>ct</code> intercepts the error, determines if it is a <code>RangeError</code> and not a standard Error object, and then executes host commands using <code>child_process.execSync('touch pwned')</code>.</li>
<li>A file named <code>pwned</code> is created on the host system, demonstrating successful code execution outside the sandbox.</li>
<li>The attacker now has arbitrary code execution on the host system.</li>
</ol>
<h2 id="impact">Impact</h2>
<p>Successful exploitation of CVE-2026-47208 allows an attacker to bypass the vm2 sandbox and execute arbitrary code on the host system. This can lead to complete system compromise, data theft, or denial-of-service. The severity is critical due to the ease of exploitation and the potential for widespread impact on applications relying on vm2 for sandboxing untrusted code. The number of victims depends on the adoption of the vulnerable vm2 package.</p>
<h2 id="recommendation">Recommendation</h2>
<ul>
<li>Upgrade to vm2 version 3.11.4 or later to patch CVE-2026-47208.</li>
<li>Deploy the Sigma rule &ldquo;Detect VM2 Sandbox Escape via Promise Species Manipulation&rdquo; to detect exploitation attempts by monitoring for the execution of <code>child_process.execSync</code> within the vm2 sandbox.</li>
<li>Review and restrict the use of vm2 in environments where untrusted code execution is a significant risk.</li>
</ul>
]]></content:encoded><category domain="severity">critical</category><category domain="type">advisory</category><category>vm2</category><category>sandbox-escape</category><category>rce</category></item></channel></rss>