The compressor you didn't know you were using
A flaw in the Brotli compressor set off emergency patches for Node.js, .NET, PHP and Python within a week. Do you know where it sits in your stack?

What happened
Know those Russian nesting dolls? You open the big one, there’s a smaller one inside, then a smaller one, and at the very end a tiny one you’d barely notice. Modern software is exactly like that. Your website runs on a framework, the framework on a runtime, and inside the runtime sit lots of small, bundled libraries. This time, one of the innermost dolls cracked.
That doll is called Brotli. It’s Google’s open-source compression library and one of the web’s core compression formats next to gzip: when browsers and servers send data packed up, they often use it. Researchers found an out-of-bounds write in its decompression part, the decoder: CVE-2026-111497. In plain terms, a deliberately malformed compressed stream can make the program write past the end of an internal memory area while unpacking. The result can be a crash, a memory leak, and under some conditions even remote code execution. The press calls it several names: Node2Shell, HTTP2Shell, and some researchers jokingly say Broccoli2Shell.
Fixed Brotli versions (1.0.10, 1.1.1 and 1.2.1) came out on 21 October 2026. That’s where the real story starts. Because so much software bundles its own copy of the library, out-of-band patches rolled in all week: Node.js on 21 October; Python’s Brotli packages, Bun, Envoy and Istio on 22–23 October; and on Sunday, 25 October, Microsoft with fixes for .NET 8, 9 and 10, Visual Studio and PowerShell. Around 26 October, PHP rebuilt its Windows packages for the second time in five days, just after the PHP2Shell fixes.
What struck me most: according to reports, the change fixing the root cause landed in Brotli’s source code back in February 2026. Nobody flagged it as a security bug at the time, and no release followed. The flaw was eventually reported by OpenAI’s Codex Security team; Node.js credits them with the discovery.
How worried should you be? As of 23 October 2026, no attacks in the wild had been reported, and the flaw wasn’t in CISA’s Known Exploited Vulnerabilities (KEV) catalog. There is, however, a public proof of concept (PoC, working demo code), and Imperva researchers showed code execution on an official Node.js build, though not on every attempt. Severity is disputed: scores range from 8.1 to 9.2, and the most likely impact is denial of service, meaning your service goes down.
Why it matters to you
If your company has a website, web shop or API running on Node.js, .NET, PHP (on Windows) or Python, Brotli is very likely in there. Even if the word never appears in your code: it’s enough that an HTTP client automatically unpacks compressed responses, or that the package was pulled in as a dependency of another package, a so-called transitive dependency.
The trap is that the usual routine isn’t enough here. Updating the system’s Brotli doesn’t fix applications that bundle their own copy. And the other way round: an updated package doesn’t protect you until you restart the running process or rebuild the container image.
No impact in Hungary is known yet, and at the time of research we found no warning from the Hungarian national cyber authority (NBSZ NKI) or regional data. Since many web services across the region run on .NET or Node.js, broad exposure is likely, but there are no hard numbers.
For professionals: technical details
- CVE: CVE-2026-111497, out-of-bounds write in the block-type switching code of the Brotli C decoder. Affected: Brotli 1.0.3–1.2.0; fixed: 1.0.10, 1.1.1, 1.2.1.
- Scores: Google CVSS 4.0: 9.2 (critical); Red Hat CVSS 3.1: 8.1 (AV:N/AC:H/PR:N/UI:N); Microsoft CVSS 3.1: 8.1, “Exploitation More Likely”; Node.js: “High”.
- Fixed versions: Node.js 22.23.4, 24.22.1, 26.12.1 (20/23/25 are end-of-life, no fix); .NET 8.0.33, 9.0.22, 10.0.14, 11 RC3; PHP Windows 8.5.12-1, 8.4.27-1, 8.3.36-1, 8.2.35-1; Python Brotli 1.2.1, brotlicffi 1.2.1.0; Bun 1.4.4; Envoy 1.36.12, 1.37.8, 1.38.6, 1.39.3, 1.40.0; Istio 1.29.9, 1.30.6, 1.31.2; Go andybalholm/brotli v1.2.7.
- Reachable paths: Node.js zlib, built-in fetch auto-decompression, Express 5 body parsing; ASP.NET Core request decompression and HttpClient automatic decompression (both off by default); PHP cURL when automatic decompression is enabled; Python urllib3/requests, httpx, aiohttp when the package is installed.
- Linux: some Node.js and .NET builds use the system Brotli, others the bundled one; your distribution’s advisory is authoritative (backported version numbers).
- Still unpatched per the public tracker (26 October): among others DuckDB, Apache Arrow, 7-Zip-zstd, p7zip, EDK II.
- ATT&CK (editorial mapping): T1190, T1499, T1059, T1105, T1552.
- Detection: the overwrite itself isn’t visible; watch post-exploitation behaviour (process spawn after a crash in the same workload, a shell under the web process, unexpected outbound connections), plus Brotli-compressed requests to endpoints that don’t normally get them.
- Indicators: no official IOC list is known. Official guidance: Microsoft .NET security announcement (dotnet/announcements #494), Red Hat RHSB-2026-015, the Node.js October 2026 security release, the PHP Windows download page.
Background report for professionals
The full research in one PDF
Timeline, actors, how the attack works, actions for each audience, technical details and source assessment. All in one place, printable and easy to pass on.
Sources
- Red Hat: CVE-2026-111497
- SecurityWeek: Node2Shell Brotli flaw triggers patching across Microsoft, Node.js, Python packages
- BleepingComputer: Microsoft releases emergency .NET patches for critical Brotli flaw
- The Hacker News: PHP issues second Windows security update
- The Hacker News: Node.js Brotli decoder bug could allow…
- The Hacker News: Researchers demonstrate Node2Shell RCE
- Wiz: CVE-2026-111497 – Brotli RCE in Node.js and beyond
- Sysdig: Detecting Node2Shell
- Aikido: Python packages vulnerable to Node2Shell
- Broccoli2Shell tracker
- SOC Prime: CVE-2026-111497
Made with the AI crew, reviewed by Péter
- The AI crew
- Collected and cross-checked vendor, researcher and press sources, produced the deep-dive research and the background report, wrote the draft and the English version, and came up with the cover image idea.
- Me
- I picked the topic and the angle, adopted the cover image idea, wrote my closing note, which the AI crew then expanded, and reviewed and approved the post.
Before publishing I checked every claim myself, and the opinions are mine.