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

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.
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.
| 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:
- Block incoming compressed bodies: Configure edge proxies to reject incoming requests with
Content-Encoding: brprior to body parsing. - Disable client Brotli decoding: Disable automatic Brotli decoding in HTTP clients and drop Brotli responses before decompression. Dropping
brfromAccept-Encodingheaders is insufficient, as servers can return Brotli regardless of requested encodings. - Uninstall vulnerable Python packages: In unpatched Python environments, uninstall
Brotliandbrotlicffito force clients back to gzip or deflate. For Node.js, no configuration workaround exists, making runtime upgrades mandatory.



