Truvo Incident Tracker

Brotli decoder flaw: CVE-2026-111497

A memory corruption flaw in Google's Brotli decoder affects Node.js, .NET, Bun, Python packages, Envoy and PHP's Windows builds. Google fixed the library on October 21, 2026, and vendors shipped fixes over the following week. This page tracks what is confirmed, what is still unknown, and what to do, with each fact dated and sourced.

Status: ActiveSeverity: CriticalUpdated Oct 27, 2026, 14:00 UTC

Talk to incident response

Share what happened and a consultant will follow up to book a call.

Brotli flaw key facts

CVECVE-2026-111497, an out-of-bounds write in the Brotli C decoder (CWE-787). Also called Node2Shell, HTTP2Shell and Broccoli2Shell
SeverityCVSS v4.0 9.2 Critical (Google). CVSS v3.1 8.1 High (Microsoft). High (Node.js)
Brotli fixed inBrotli 1.0.10, 1.1.1 and 1.2.1 (released October 21, 2026). Affected from 1.0.3
Vendor fixesNode.js 26.12.1, 24.22.1, 22.23.4. .NET 10.0.14, 9.0.22, 8.0.33. Bun 1.4.4. Python Brotli 1.2.1, brotlicffi 1.2.1.0. Envoy 1.40.0, 1.39.3, 1.38.6, 1.37.8, 1.36.12. PHP for Windows 8.5.12-1, 8.4.27-1, 8.3.36-1, 8.2.35-1
No confirmed fixPowerShell 7.4, 7.5 and 7.6 as of October 27, 2026. Node.js 25, 23, 20 and older lines get no fix
Exposed whenSoftware decompresses Brotli data it did not create: request bodies, responses fetched from other servers, or files
ExploitationNo attacks reported as of October 27, 2026. Imperva showed code execution on an official Node.js 24.22.0 build, not yet released
CISA KEVNot listed as of October 27, 2026

Check your software for the Brotli flaw

Look up the version of a runtime or package, or copy the read-only self-check script and run the script on your servers. The script reads installed versions and sends nothing anywhere. The domain check reads response headers only, so treat the domain result as a hint. The same tool is available as a standalone Brotli vulnerability checker.

What is confirmed and what is still unknown about the Brotli flaw

Confirmed

  • The bug is in the Brotli C decoder (c/dec/decode.c): an invalid block switch was treated as a need for more input, so the decoder kept writing past an 8-byte buffer (Node.js advisory)
  • Node.js is affected through node:zlib Brotli decompression in all supported lines, fixed October 21 (Node.js advisory)
  • .NET is affected only when an app turns on Brotli decompression: ASP.NET Core request decompression, HttpClient AutomaticDecompression set to Brotli or All, or BrotliStream on untrusted data. .NET Framework is not affected (Microsoft, dotnet/announcements#494)
  • Self-contained and NativeAOT .NET apps carry their own copy and must be rebuilt with a patched SDK (Microsoft)
  • Python requests, urllib3, httpx and aiohttp decode br responses automatically when Brotli or brotlicffi is installed (GitHub advisory GHSA-9v8h-qqgm-4m35)
  • Envoy is affected only when the Brotli decompressor filter is configured (Envoy advisory GHSA-3wvj-j6qm-62mr)
  • PHP rebuilt the Windows packages on October 26. php -v shows the same version as the first build (php.net)

Not yet known

  • When Microsoft will ship a fixed PowerShell 7 build
  • Whether nginx with ngx_brotli, browsers, and pure Go, Rust or Java Brotli ports are affected. No primary source has said
  • Which Linux distributions have shipped patched libbrotli packages, beyond what each vendor tracker shows
  • Whether working exploits will be released for common setups. The demonstrated Node.js exploit did not work every time

What to do about the Brotli flaw, step by step

Find every copy first, because Brotli is bundled inside runtimes and compiled apps. Then patch in order of exposure, using the NIST SP 800-61 phases. No attacks have been reported, so most teams can treat the flaw as a patching job with a short check for signs of misuse.

1. Inventory

  • Run the self-check script on every server and inside every container image
  • List self-contained .NET apps, NativeAOT apps and bun build --compile executables
  • List services that accept Content-Encoding: br request bodies or fetch br responses from other servers

2. Remediation

  • Upgrade to the fixed releases and rebuild container images
  • Rebuild self-contained and compiled apps with a patched toolchain and redeploy
  • If patching must wait: turn off Brotli request decompression and automatic br decoding of untrusted responses

3. Detection and analysis

  • Look for worker crashes, memory errors and restarts in services that decompress Brotli
  • Record per service: not exposed, patched, or needs review

4. Containment and recovery

  • Only for services with signs of compromise: isolate, rotate the credentials the service held, and rebuild from a known-good image

5. Post-incident activity

  • Add bundled libraries such as Brotli to the software inventory
  • Set an upgrade date or a formal risk acceptance for end-of-life runtimes

Brotli flaw obligations under SOC 2, ISO 27001, GDPR, HIPAA and Canadian privacy law

A vulnerability is not a breach. Patching and checking for misuse is vulnerability management under SOC 2 and ISO 27001. Privacy laws apply only if personal data or PHI was compromised.

Framework or lawWhen it appliesWhat it asks forClock
SOC 2
Framework
Always, for systems in scopeDetect and patch (CC7.1), evaluate the event (CC7.3), respond and recover if exploited (CC7.4, CC7.5)None set by SOC 2. Your policy and customer contracts
ISO 27001:2022
Framework
Always, for systems in scopeTechnical vulnerability management (A.8.8), event decision (A.5.25), incident response (A.5.26-A.5.28)None set by ISO. Your procedure
GDPR
Law
Exploitation led to personal data being compromisedNotify the supervisory authority unless unlikely to result in risk. Tell individuals if high risk. Document every breach72 hours from reasonable certainty of a breach
HIPAA
Law
Attempted access is a security incident. PHI accessed is a presumed breachDocument incidents. Four-factor risk assessment. Notify individuals, HHS and media as requiredIndividuals within 60 days of discovery
PIPEDA
Law
Breach of security safeguards with real risk of significant harmReport to the OPC and notify individuals. Record every breachAs soon as feasible. Keep records 24 months
Quebec Law 25
Law
Confidentiality incident with risk of serious injuryNotify the CAI and affected people. Register every incidentPromptly

Need help finding every copy of Brotli?

Brotli hides inside runtimes, proxies, packages and compiled apps. Truvo's team inventories where the decoder runs, patches and rebuilds what needs it, and leaves the evidence your auditor will ask for.

Brotli flaw: questions and answers

Yes. All three names refer to CVE-2026-111497 in Google's Brotli decoder. Different researchers and news outlets used different names as fixes reached Node.js, HTTP stacks and .NET.

Node.js 26.12.1, 24.22.1 and 22.23.4. .NET runtime 10.0.14, 9.0.22 and 8.0.33. Bun 1.4.4. Python Brotli 1.2.1 and brotlicffi 1.2.1.0. Envoy 1.40.0, 1.39.3, 1.38.6, 1.37.8 and 1.36.12. PHP for Windows 8.5.12-1, 8.4.27-1, 8.3.36-1 and 8.2.35-1. The Brotli library itself is fixed in 1.0.10, 1.1.1 and 1.2.1.

No. The flaw is in decompression. Exposure comes from software that decompresses Brotli data it did not create, such as request bodies, responses fetched from other servers, or uploaded files.

Updating the shared runtime fixes apps that use the shared runtime. Self-contained and NativeAOT apps carry their own copy of the decoder, so rebuild those apps with a patched SDK and redeploy.

No attacks had been reported as of October 27, 2026, and CISA had not added the CVE to the Known Exploited Vulnerabilities catalog. Imperva showed code execution on an official Node.js 24.22.0 build but has not released the exploit.

Change log

  • Oct 27, 2026: Tracker and Brotli vulnerability checker published, with read-only self-check scripts for Linux, macOS and Windows. Facts as of 14:00 UTC.