<?xml version='1.0' encoding='UTF-8'?>
<?xml-stylesheet href="/static/style.xsl" type="text/xsl"?>
<rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/" version="2.0">
  <channel>
    <title>Most recent entries from all</title>
    <link>https://vulnerability.circl.lu</link>
    <description>Contains only the most 10 recent entries.</description>
    <docs>http://www.rssboard.org/rss-specification</docs>
    <generator>python-feedgen</generator>
    <language>en</language>
    <lastBuildDate>Sun, 04 Oct 2026 21:50:57 +0000</lastBuildDate>
    <item>
      <title>CVE-2026-92944 — vm2 3.10.2 through 3.11.6 Sandbox Escape via Promise Protector</title>
      <link>https://vulnerability.circl.lu/vuln/cve-2026-92944</link>
      <description>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; patriksimek vm2&lt;/p&gt;
&lt;p&gt;vm2 versions 3.10.2 through 3.11.6 contain a sandbox escape vulnerability on Node.js 26 where Promise.prototype.finally() bypasses vm2&amp;#39;s wrapper protections due to a stale PromiseThenLookupChain protector in V8 14.6. Attackers can exploit this by creating an async function that returns a Promise with an attacker-controlled constructor Symbol.species, allowing them to reach the host Function constructor and process object for arbitrary code execution.&lt;/p&gt;</description>
      <content:encoded>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; patriksimek vm2&lt;/p&gt;
&lt;p&gt;vm2 versions 3.10.2 through 3.11.6 contain a sandbox escape vulnerability on Node.js 26 where Promise.prototype.finally() bypasses vm2&amp;#39;s wrapper protections due to a stale PromiseThenLookupChain protector in V8 14.6. Attackers can exploit this by creating an async function that returns a Promise with an attacker-controlled constructor Symbol.species, allowing them to reach the host Function constructor and process object for arbitrary code execution.&lt;/p&gt;</content:encoded>
      <guid isPermaLink="false">https://vulnerability.circl.lu/vuln/cve-2026-92944</guid>
    </item>
    <item>
      <title>GHSA-27g9-p43v-cw3v — vm2 sandbox escape on Node.js 26 through a stale PromiseThenLookupChain protector</title>
      <link>https://vulnerability.circl.lu/vuln/ghsa-27g9-p43v-cw3v</link>
      <description>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; npm: vm2&lt;/p&gt;
&lt;p&gt;## Reporter&lt;/p&gt;
&lt;p&gt;- Name or handle: `[YMsora]`
- Report date: 2026-08-14&lt;/p&gt;
&lt;p&gt;## Summary&lt;/p&gt;
&lt;p&gt;The latest published vm2 release, **3.11.5**, and the current `main` branch are vulnerable to a sandbox escape when used on Node.js 26. An ordinary fulfilled Promise created by an async function can retain an attacker-controlled `constructor[Symbol.species]` across `Promise.prototype.finally()`.&lt;/p&gt;
&lt;p&gt;vm2 installs wrappers on the intrinsic `Promise.prototype.then` and `catch` methods. On Node.js 26 / V8 14.6, V8&amp;#39;s `SetPrototypeProperties` path updates these existing data properties without invalidating the `PromiseThenLookupChain` protector. `Promise.prototype.finally()` subsequently trusts the stale protector and uses an internal `InvokeThen` fast path that calls the original native `then`, bypassing vm2&amp;#39;s wrapper and its `resetPromiseSpecies(this)` hardening.&lt;/p&gt;
&lt;p&gt;The attacker-controlled species constructor therefore supplies the resolve and reject functions used by a native Promise reaction. A calibrated stack overflow at that native reaction boundary yields a raw host-realm `RangeError` to the attacker-controlled reject function. Its constructor chain reaches the host `Function` constructor and consequently the host `process` object.&lt;/p&gt;
&lt;p&gt;The attached proof is non-destructive: it reads only `process.version`. It does not execute commands, access files, or perform network requests.&lt;/p&gt;
&lt;p&gt;## Latest-version status&lt;/p&gt;
&lt;p&gt;Verified on 2026-08-14:&lt;/p&gt;
&lt;p&gt;- npm `latest`: `vm2@3.11.5`
- `vm2@3.11.5` publication time: 2026-05-18T…&lt;/p&gt;</description>
      <content:encoded>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; npm: vm2&lt;/p&gt;
&lt;p&gt;## Reporter&lt;/p&gt;
&lt;p&gt;- Name or handle: `[YMsora]`
- Report date: 2026-08-14&lt;/p&gt;
&lt;p&gt;## Summary&lt;/p&gt;
&lt;p&gt;The latest published vm2 release, **3.11.5**, and the current `main` branch are vulnerable to a sandbox escape when used on Node.js 26. An ordinary fulfilled Promise created by an async function can retain an attacker-controlled `constructor[Symbol.species]` across `Promise.prototype.finally()`.&lt;/p&gt;
&lt;p&gt;vm2 installs wrappers on the intrinsic `Promise.prototype.then` and `catch` methods. On Node.js 26 / V8 14.6, V8&amp;#39;s `SetPrototypeProperties` path updates these existing data properties without invalidating the `PromiseThenLookupChain` protector. `Promise.prototype.finally()` subsequently trusts the stale protector and uses an internal `InvokeThen` fast path that calls the original native `then`, bypassing vm2&amp;#39;s wrapper and its `resetPromiseSpecies(this)` hardening.&lt;/p&gt;
&lt;p&gt;The attacker-controlled species constructor therefore supplies the resolve and reject functions used by a native Promise reaction. A calibrated stack overflow at that native reaction boundary yields a raw host-realm `RangeError` to the attacker-controlled reject function. Its constructor chain reaches the host `Function` constructor and consequently the host `process` object.&lt;/p&gt;
&lt;p&gt;The attached proof is non-destructive: it reads only `process.version`. It does not execute commands, access files, or perform network requests.&lt;/p&gt;
&lt;p&gt;## Latest-version status&lt;/p&gt;
&lt;p&gt;Verified on 2026-08-14:&lt;/p&gt;
&lt;p&gt;- npm `latest`: `vm2@3.11.5`
- `vm2@3.11.5` publication time: 2026-05-18T…&lt;/p&gt;</content:encoded>
      <guid isPermaLink="false">https://vulnerability.circl.lu/vuln/ghsa-27g9-p43v-cw3v</guid>
    </item>
  </channel>
</rss>
