CTIPilot
AI-generated · no human review · verify critical claims against the linked source. how it works →
← Back to the live brief
NOTABLECVE-2026-111497NATOA1vulnerability

CVE-2026-111497, Node.js and Google Brotli (Node2Shell): an out-of-bounds write in the Brotli decoder lets crafted compressed data run code, reached through fetch() and Express 5 or body-parser 2 request bodies; fixed in Node.js 22.23.4, 24.22.1 and 26.12.1 and in the PyPI packages Brotli 1.2.1 and brotlicffi 1.2.1.0 (CVSS 4.0 9.2)

Node2Shell: crafted Brotli data runs code in Node.js; update the runtime and the PyPI Brotli packages

Defender actions

  • Update every Node.js 22.x, 24.x and 26.x runtime to 22.23.4, 24.22.1 or 26.12.1, including the Node binary inside container images, which a package inventory misses, and upgrade the PyPI Brotli package to 1.2.1 and brotlicffi to 1.2.1.0 wherever either is installed; move any application on an end-of-life Node.js line to a supported release.

Analysis

Node.js shipped security releases on 2026-10-21 for CVE-2026-111497, an out-of-bounds write in the Brotli decoder it bundles: an invalid block switch was reported as a need for more input instead of a format error, so the streaming decoder kept appending input to an eight-byte internal buffer (Node.js project, 2026-10-21). An attacker who can supply Brotli data that an application decompresses with the node:zlib module can corrupt process memory, which can lead to a crash, disclosure of process memory or remote code execution (Node.js project, 2026-10-21). Node.js rates it high (Node.js project, 2026-10-21), and the Google CNA record scores it CVSS 4.0 9.2 with no authentication and no user interaction (ENISA EUVD, 2026-10-23).

Imperva ran code carried in Brotli data against the official Node.js 24.22.0 Linux arm64 image, both through the built-in fetch() consuming a compressed response and through Express 5.0.0 to 5.3.0 and body-parser 2.0.0 to 2.3.0 request-body parsers (raw() and json()); execution took several attempts, and the fixed 24.22.1 rejected the same input (Imperva, 2026-10-22). A bare Node.js HTTP server does not decode an incoming Brotli body on receipt, so the request path needs those parsers (Imperva, 2026-10-22). Fixes are in Node.js 22.23.4, 24.22.1 and 26.12.1, whose release notes list CVE-2026-111497 as a high-severity Brotli fix (Node.js project, 2026-10-21; Node.js project, 2026-10-21; Node.js project, 2026-10-21); end-of-life lines are always affected when a security release occurs (Node.js project, 2026-10-21). No source reports exploitation.

The decoder is Google's, so the flaw reaches beyond Node.js: Google released Brotli 1.2.1 on 2026-10-21 and lists CVE-2026-111497 in its release as an out-of-bounds write that permits remote code execution (Google Brotli, 2026-10-21), and the CVE record covers Brotli 1.0.3 to 1.2.0, fixed in 1.0.10, 1.1.1 and 1.2.1 (ENISA EUVD, 2026-10-23). OpenSourceMalware found that the PyPI packages Brotli (up to 1.2.0, fixed in 1.2.1 on 2026-10-22) and brotlicffi (up to 1.2.0.2, fixed in 1.2.1.0 on 2026-10-23) compile the same decoder and that neither release's notes mention the flaw (OpenSourceMalware, 2026-10-23); it found no advisory database listing either package when it wrote, and ENISA's record now carries PyPI advisories for them (PYSEC-2026-4322 and PYSEC-2026-4323) dated 2026-10-23, which cite OpenSourceMalware's post as their reference, so the PyPI exposure rests on its source diff (ENISA EUVD, 2026-10-23).

Cited evidence

A flaw in the Brotli decoder bundled with Node.js allows malformed compressed input to write past the end of an internal decoder buffer.

Node.js project 2026-10-21

Our standalone proof of concept ran code carried in a Brotli response or request body inside applications using the official Node.js 24.22.0 Linux arm64 image.

Imperva Threat Research 2026-10-22

Sources8

PROVENANCE

AI-generated · no human review · this permalink is the shareable record for the finding · verify operationally critical claims against the linked primary source.