<?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://cve.radiocsirt.org</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>Tue, 13 Oct 2026 03:34:20 +0000</lastBuildDate>
    <item>
      <title>GHSA-v836-6xw4-9cx3 — vm2 has Memory Exhaustion DoS via bufferAllocLimit Bypass</title>
      <link>https://cve.radiocsirt.org/vuln/ghsa-v836-6xw4-9cx3</link>
      <description>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; npm: vm2&lt;/p&gt;
&lt;p&gt;### Summary:&lt;/p&gt;
&lt;p&gt;The `bufferAllocLimit` defense (GHSA-6785-pvv7-mvg7) can be completely bypassed using `ArrayBuffer`, `SharedArrayBuffer`, or any `TypedArray` constructor. These allocate identical host-process RSS through the same V8/libuv C++ allocation path as `Buffer.alloc` but are not subject to the size cap.&lt;/p&gt;
&lt;p&gt;### Details:&lt;/p&gt;
&lt;p&gt;The `bufferAllocLimit` option (vm2 v3.11.0+) caps `Buffer.alloc`, `Buffer.allocUnsafe`, `Buffer.allocUnsafeSlow`, and the deprecated `Buffer(N)` / `new Buffer(N)` forms. The cap is enforced in `setup-sandbox.js` via `checkBufferAllocLimit()` (line 353-359).&lt;/p&gt;
&lt;p&gt;However, `ArrayBuffer`, `SharedArrayBuffer`, `Uint8Array`, `Float64Array`, and all other TypedArray constructors are sandbox-realm V8 intrinsics that allocate host memory through the SAME underlying C++ path (`v8::ArrayBuffer::NewBackingStore` → `ArrayBufferAllocator::Allocate` → `calloc/malloc`). These constructors are NOT intercepted by the `bufferAllocLimit` defense.&lt;/p&gt;
&lt;p&gt;A single `new ArrayBuffer(N)` call with a large `N` exhausts host RSS in one synchronous allocation that V8&amp;#39;s `timeout` cannot interrupt.&lt;/p&gt;
&lt;p&gt;### Environment:&lt;/p&gt;
&lt;p&gt;- vm2 version: 3.11.3
- Node.js: v25.8.1 (affects all Node.js versions)
- Configuration: Default `new VM()` or any configuration including `bufferAllocLimit`&lt;/p&gt;
&lt;p&gt;### POC:&lt;/p&gt;
&lt;p&gt;```javascript
const { VM } = require(&amp;#39;vm2&amp;#39;);&lt;/p&gt;
&lt;p&gt;// Operator sets bufferAllocLimit thinking they&amp;#39;re protected:
const vm = new VM({ bufferAllocLimit: 10 * 1024 * 1024 }); // 10MB cap&lt;/p&gt;
&lt;p&gt;// Buffer.alloc IS capped (as int…&lt;/p&gt;</description>
      <content:encoded>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; npm: vm2&lt;/p&gt;
&lt;p&gt;### Summary:&lt;/p&gt;
&lt;p&gt;The `bufferAllocLimit` defense (GHSA-6785-pvv7-mvg7) can be completely bypassed using `ArrayBuffer`, `SharedArrayBuffer`, or any `TypedArray` constructor. These allocate identical host-process RSS through the same V8/libuv C++ allocation path as `Buffer.alloc` but are not subject to the size cap.&lt;/p&gt;
&lt;p&gt;### Details:&lt;/p&gt;
&lt;p&gt;The `bufferAllocLimit` option (vm2 v3.11.0+) caps `Buffer.alloc`, `Buffer.allocUnsafe`, `Buffer.allocUnsafeSlow`, and the deprecated `Buffer(N)` / `new Buffer(N)` forms. The cap is enforced in `setup-sandbox.js` via `checkBufferAllocLimit()` (line 353-359).&lt;/p&gt;
&lt;p&gt;However, `ArrayBuffer`, `SharedArrayBuffer`, `Uint8Array`, `Float64Array`, and all other TypedArray constructors are sandbox-realm V8 intrinsics that allocate host memory through the SAME underlying C++ path (`v8::ArrayBuffer::NewBackingStore` → `ArrayBufferAllocator::Allocate` → `calloc/malloc`). These constructors are NOT intercepted by the `bufferAllocLimit` defense.&lt;/p&gt;
&lt;p&gt;A single `new ArrayBuffer(N)` call with a large `N` exhausts host RSS in one synchronous allocation that V8&amp;#39;s `timeout` cannot interrupt.&lt;/p&gt;
&lt;p&gt;### Environment:&lt;/p&gt;
&lt;p&gt;- vm2 version: 3.11.3
- Node.js: v25.8.1 (affects all Node.js versions)
- Configuration: Default `new VM()` or any configuration including `bufferAllocLimit`&lt;/p&gt;
&lt;p&gt;### POC:&lt;/p&gt;
&lt;p&gt;```javascript
const { VM } = require(&amp;#39;vm2&amp;#39;);&lt;/p&gt;
&lt;p&gt;// Operator sets bufferAllocLimit thinking they&amp;#39;re protected:
const vm = new VM({ bufferAllocLimit: 10 * 1024 * 1024 }); // 10MB cap&lt;/p&gt;
&lt;p&gt;// Buffer.alloc IS capped (as int…&lt;/p&gt;</content:encoded>
      <guid isPermaLink="false">https://cve.radiocsirt.org/vuln/ghsa-v836-6xw4-9cx3</guid>
    </item>
  </channel>
</rss>
