Skip to article
Decision intelligence for people who build, buy, and govern technology.How this desk reports

Enterprise IT

News update

Critical Brotli Decoder Flaw Exposes Node.js and Bun

A critical Brotli decoder flaw, CVE-2026-111497, causes memory corruption and RCE across Node.js, Bun, and Python. Enterprise teams must patch immediately.

Key takeaways

  • A critical memory corruption flaw in Google’s Brotli decoder (CVE-2026-111497) causes out-of-bounds writes, crashing processes or enabling arbitrary remote code execution.
  • The vulnerability impacts multiple language runtimes and proxies that embed the C decoder, including Node.js (22.x, 24.x, 26.x), Bun (1.4.3 and earlier), Python (Brotli and brotlicffi), and decompression-enabled Envoy and Istio.
  • Imperva’s Red Team demonstrated proof-of-concept RCE against an unmodified Linux ARM64 Node.js 24.22.0 build via both incoming Express bodies and outbound fetch responses.
  • The bug was silently fixed in upstream Brotli source code in February 2026 without a security advisory, delaying downstream release packaging until October 21, 2026.
  • Immediate mitigation requires updating runtime versions and restarting active processes; temporary workarounds include blocking incoming compressed bodies and disabling client Brotli decoding.

A critical Brotli decoder flaw, tracked as CVE-2026-111497, exposes major software runtimes and network proxies to buffer overflows and potential remote code execution (RCE). Disclosed on October 24, 2026 following coordinated vulnerability disclosures, the vulnerability resides in the C library used to decompress Brotli streams across Node.js, Bun, Python environments, and Envoy proxies. By submitting crafted compressed streams, remote attackers can trigger out-of-bounds writes to crash services, leak memory, or execute unauthorized code. Researchers have demonstrated RCE on an unmodified Node.js Linux ARM64 build. Infrastructure teams must immediately deploy runtime updates or disable untrusted Brotli decompression.

Because the vulnerable C code is embedded across individual runtimes rather than dynamically linked from a single system library, each platform must ship its own patch. The flaw highlights persistent supply chain risks when low-level parsing libraries are bundled across diverse application ecosystems.

Memory corruption flaw in Google Brotli decoder

Google developed Brotli as an open-source, lossless compression format for web traffic. The vulnerability lies within c/dec/decode.c inside the DecodeBlockTypeAndLength() function. In versions 1.0.3 through 1.2.0, the decoder’s block-switching logic fails to validate return values properly, combining an unchecked return value (CWE-252) with an out-of-bounds write (CWE-787).

When encountering an invalid block switch, the function returns a status that the decoder’s fast execution path misinterprets as a request for additional input data rather than a syntax error. Attackers can supply a malformed compressed stream that forces the parser to keep writing incoming bytes past the allocated internal buffer, corrupting adjacent heap memory.

Google assigned CVE-2026-111497 a CVSS v4.0 score of 9.2 (Critical), while Node.js rated it High and Red Hat assigned an 8.1 (Important) score. Upstream maintainers originally fixed the underlying logic flaw on February 27, 2026, but the commit was treated as a routine refactor without a security classification, leaving the vulnerability unreleased until October 21. OpenAI Codex Security researchers Khai Tran and Sylvie Mayer uncovered the flaw’s exploitability, coordinating fixes with Node.js maintainers Matteo Collina and Antoine du Hamel.

As with recent runtime vulnerabilities such as the PHP RCE flaws triggering emergency security patches, memory corruption in core runtimes invalidates application-level security assumptions.

Vulnerability exposure across runtimes, proxies, and clients

Critical Brotli Decoder Flaw Exposes Node.js and Bun: Vulnerability exposure across runtimes, proxies, and clients
Supporting visual for Vulnerability exposure across runtimes, proxies, and clients.

A service is exposed to CVE-2026-111497 only when it decodes untrusted Brotli data. The attack vector is bidirectional: an unpatched server can be compromised by a malicious client uploading compressed data, and an unpatched client can be compromised by a hostile server returning compressed responses.

Get the Weekly Brief

Curated analysis for tech leaders. Every Thursday.

Subscribe

In Node.js and Bun, the native fetch() method automatically decompresses HTTP responses served with Content-Encoding: br. On the server side, Node.js applications are vulnerable when using middleware like Express 5 or body-parser 2 to unpack Brotli request bodies. In Python, merely installing the Brotli or brotlicffi package causes popular HTTP clients like requests, urllib3, httpx, and aiohttp to automatically unpack Brotli streams without explicit application imports. Ingress proxies like Envoy and Istio are vulnerable only when Brotli decompression filters are explicitly enabled.

Affected Software Versions and Remediation Releases for CVE-2026-111497
Software / Component Affected Versions Fixed Release Exposure Vector
Google Brotli (C library) 1.0.3 to 1.2.0 1.0.10, 1.1.1, 1.2.1 Decoding untrusted Brotli payloads
Node.js 22.x, 24.x, 26.x; 20.x and older (EOL) 22.23.4, 24.22.1, 26.12.1 Native fetch() on br; Express 5 or body-parser 2 bodies
Bun 1.4.3 and earlier 1.4.4 Native fetch() on br; node:zlib usage
Envoy Proxy 1.39.2, 1.38.5, 1.37.7, 1.36.11 1.40.0, 1.39.3, 1.38.6, 1.37.8, 1.36.12 Only if Brotli decompressor filter is configured
Istio 1.31.0–1.31.1, 1.30.0–1.30.5, 1.29.0–1.29.8 1.31.2, 1.30.6, 1.29.9 Only if Brotli decompression is active
Python Brotli 1.2.0 and earlier 1.2.1 Installed in environment while HTTP clients decode br
Python brotlicffi 1.2.0.x and earlier 1.2.1.0 Installed in environment while HTTP clients decode br
cdxgen (SBOM CLI) 13.4.0, 12.8.8 and earlier 13.5.0, 12.8.9 Scanning untrusted input using standalone binaries

Mitigation strategies and patching hurdles

CISA’s advisory records active exploitation as none and automation as no, and Red Hat reported no reliable public exploit code in circulation. However, Imperva’s Red Team confirmed exploitability through project Node2Shell, achieving arbitrary code execution on an unmodified Node.js 24.22.0 binary on Linux ARM64 via both fetched responses and Express bodies. While private and timing-sensitive, the exploit proves remote weaponization is feasible.

Perimeter web application firewalls offer incomplete protection. Vercel deployed firewall rules upon disclosure, but noted they cannot protect responses that backend functions fetch from external servers. Furthermore, dependency scanners initially missed vulnerable Python packages because the CVE cataloged Google’s C repository rather than PyPI packages; PyPI advisories PYSEC-2026-4322 and PYSEC-2026-4323 were indexed on October 23. Operating system distributions are updating at different tempos; while Debian patched trixie on October 23, while Amazon Linux 2023 packages remained pending as of October 22.

What happens next

Platform teams must update runtime versions and immediately restart running processes and container instances, as running services retain the old decoder in memory until rebooted. Where patching cannot occur immediately, organizations should implement three interim controls:

  1. Block incoming compressed bodies: Configure edge proxies to reject incoming requests with Content-Encoding: br prior to body parsing.
  2. Disable client Brotli decoding: Disable automatic Brotli decoding in HTTP clients and drop Brotli responses before decompression. Dropping br from Accept-Encoding headers is insufficient, as servers can return Brotli regardless of requested encodings.
  3. Uninstall vulnerable Python packages: In unpatched Python environments, uninstall Brotli and brotlicffi to force clients back to gzip or deflate. For Node.js, no configuration workaround exists, making runtime upgrades mandatory.

Accountable publisher

TechNodeHQ Editorial Desk

Automated research and drafting with accountable publishing controls, transparent sourcing, and a public correction route.

Signal Briefing

Important technology changes, with the decision attached.

A concise briefing product is being finalized. No invented cadence or subscriber claim.

Ask about the briefing