AIThis post was created with the assistance of artificial intelligence (AI).

🔍 Read the full analysis: What To Patch And Verify When Broccoli2Shell Reaches Your Technology Stack on ThorstenMeyerAI.com

Before you orderOffer from Amazon

Get privacy and security gear delivered free with Prime

  • Fast, free delivery on millions of items
  • Prime Video, Amazon Music and more included
  • Member-only deals all year
Start your free Prime trial Free trial for eligible customers · Cancel anytime
As an affiliate, we earn on qualifying purchases.

TL;DR

The Broccoli2Shell vulnerability, CVE-2026-111497, affects Google’s Brotli decoder in versions 1.0.3 through 1.2.0 and reaches multiple runtimes and applications that bundle it. Fixed releases are available for several widely used components, but teams must identify bundled copies, update packages or runtimes, and restart processes. As of October 26, the source reports no known in-the-wild exploitation, while some bundled projects remain unfixed.

Broccoli2Shell, a vulnerability in Google’s Brotli decoder tracked as CVE-2026-111497, can corrupt memory when software processes a crafted compressed stream. Fixes are available for several runtimes and libraries, but the decoder is bundled across many technology stacks, so organizations need to check indirect dependencies and restart affected services after patching.

The flaw affects Brotli C decoder versions 1.0.3 through 1.2.0. The Node.js advisory describes malformed input that the decoder treated as incomplete rather than invalid, allowing it to write beyond an internal buffer. The CVE record identifies an out-of-bounds write and an unchecked return value. Memory corruption can cause a process to crash or expose data; code execution is a potential worst-case outcome, not an outcome established for every affected application.

Fixes listed in the source include Brotli 1.0.10, 1.1.1 and 1.2.1; Node.js 22.23.4, 24.22.1 and 26.12.1; Python Brotli 1.2.1 and brotlicffi 1.2.1.0; and Bun 1.4.4. The listed Envoy fixes are 1.40.0, 1.39.3, 1.38.6 and 1.37.8; Istio fixes are 1.29.9, 1.30.6 and 1.31.2. The source also lists fixed .NET runtime releases and Debian package updates. Node.js 20, 23 and 25 are identified as receiving no fix.

For operators, patching a dependency is only part of the work: running processes retain the old decoder until restarted. The source says official Node.js builds bundle Brotli, meaning the Node.js version is the relevant update for those builds. Other systems may link against an operating-system library or carry their own copy, so teams should verify the build and package actually deployed rather than rely on a direct-dependency scan alone.

At a glance
updateWhen: Developing; status as of October 26, 20…
The developmentA critical out-of-bounds write in the Brotli decoder has prompted fixes across runtimes, packages and infrastructure tools, requiring organizations to check more than direct dependencies.
Thorsten Meyer AI
CVE-2026-111497 · 26 Oct 2026

Infographic 01 · Where Brotli decoding meets untrusted input

One decoder, many doors.

The flaw sits in Google's Brotli C decoder. Every runtime, package and tool that copies it inherits the bug. Three paths bring attacker data to it.

9.2CVSS 4.0, Critical, in Google's CVE record
1.0.3–1.2.0affected Brotli versions
3supported Node.js lines fixed on 21 Oct
~83 MPyPI downloads of Brotli in the last month

Responses your code fetches

no WAF sees these

  • Node.js fetch() decodes Brotli automatically
  • Python requests, urllib3, aiohttp, httpx[brotli], Scrapy, once a Brotli package is installed
  • Webhooks, link previews, crawlers, “import from URL”

Request bodies you accept

WAF can block br bodies

  • Express 5.0.0–5.3.0 and body-parser 2.0.0–2.3.0 inflate Brotli bodies (json(), raw())
  • Upgrading Express alone does not help: the bug is in the runtime
  • A bare Node.js HTTP server does not decode bodies on its own

Files you open or process

not only HTTP

  • Archives and .br files (7-Zip-zstd, p7zip)
  • Parquet data files (DuckDB, Apache Arrow bundled build)
  • Fonts (woff2), firmware tools (EDK II), JPEG XL via libjxl

Fixed versions

patch, then restart a running process keeps the old decoder

ComponentFixed inNote
Google Brotli (C library)1.0.10 · 1.1.1 · 1.2.11.0.3–1.2.0
Node.js22.23.4 · 24.22.1 · 26.12.120, 23, 25: no fix (end of life)
Python Brotli / brotlicffi1.2.1 / 1.2.1.01.0.3 up to 1.2.0.x
Bun1.4.4includes Brotli 1.2.1
Envoy Proxy1.40.0 · 1.39.3 · 1.38.6 · 1.37.8if Brotli decompression is configured
Istio1.29.9 · 1.30.6 · 1.31.21.29 is end of life
.NET runtime8.0.33 · 9.0.22 · 10.0.14GitHub source builds still affected
Debian brotlibookworm 1.0.9-2+deb12u1 · trixie 1.1.0-2+deb13u1DLA 4855-1 · DSA-6582-1

Official Node.js builds bundle their own Brotli, so only the Node.js version matters there; some distributions (Debian, Ubuntu 22.04+) build Node.js against the system library instead.

Sources: CVE record (Google CNA, CISA ADP 23 Oct); Node.js (21 Oct 2026); GHSA-9v8h-qqgm-4m35; Brotli releases (21 Oct 2026); Patch the Planet (23 Oct 2026); Imperva (22 Oct 2026); broccoli2shell.com (26 Oct 2026); OpenSourceMalware (23 Oct 2026); Debian tracker; pypistats.org (26 Oct 2026).
Powered by Thorsten Meyer AI

Why Bundled Decoders Need Checks

The issue matters because Brotli is used across web and software infrastructure, and a single decoder flaw can reach applications through layers that teams may not recognize as dependencies. Node.js can automatically decompress Brotli responses through its built-in fetch function. Python HTTP clients may do the same when a Brotli package is installed. The source also identifies services that inflate compressed request bodies, as well as tools that handle files such as archives, fonts, Parquet data and firmware.

That spread changes the response from a routine library upgrade into an inventory and verification task. A service may be exposed while fetching a remote response, accepting a compressed body, or processing a file; whether any particular deployment is reachable depends on its configuration and data paths. The source says the vulnerability is rated Critical, with a CVSS 4.0 score of 9.2. Imperva reported achieving code execution on an unmodified official Node.js image after several attempts. That demonstration indicates potential severity, but does not establish exploitation in deployed systems.

Teams should identify affected runtimes, packages, containers and tools; apply the appropriate vendor or distribution update; rebuild images where needed; and restart running services. They should also verify the effective decoder version, since updating an application framework alone may not replace a separate Brotli library. The reported 236-day period between the source-code change and releases carrying the fix also illustrates how a correction in a shared component may take time to reach downstream users.

Products Worth Considering

LG UltraGear 27G640A-B 27-Inch QHD IPS Gaming Monitor, 300Hz, 1ms, G-SYNC Compatible, FreeSync Premium, DisplayHDR 400

LG UltraGear 27G640A-B 27-Inch QHD IPS Gaming Monitor, 300Hz, 1ms, G-SYNC Compatible, FreeSync Premium, DisplayHDR 400

LG 34GX90SA-W 34-inch Ultragear WQHD OLED Curved Gaming Monitor

LG 34GX90SA-W 34-inch Ultragear WQHD OLED Curved Gaming Monitor

LG UltraGear 32GX850A-B 32-Inch 4K UHD Glossy OLED Gaming Monitor

LG UltraGear 32GX850A-B 32-Inch 4K UHD Glossy OLED Gaming Monitor

As an affiliate, we earn on qualifying purchases.

From Source Fix to Runtime Releases

The source says the underlying code change was committed to Brotli on February 27, 2026, under the title “Detect and report invalid stream earlier.” It says that change did not mention security. OpenAI later said the security significance was not known at the time and that no newer Brotli release was available. Releases containing the fix appeared on October 21, according to the account; the CVE became public on October 22.

Node.js credits OpenAI Codex Security, and OpenAI said the flaw was found during red-teaming with teams of AI agents. The source reports a public proof of concept appearing on GitHub on October 22. It also says that by October 26 an independent tracker listed more than 30 projects and packages with bundled copies, including seven that it still listed as unfixed. Examples named there include DuckDB, Apache Arrow’s bundled build, 7-Zip-zstd, p7zip and EDK II firmware tools. These project-level statuses can change, so operators should check current advisories before deciding a component remains vulnerable.

The concern is not limited to Node.js. The source describes fixes landing across Python packages and Linux distributions and notes that some distributions build Node.js against a system Brotli library. It reports about 83 million downloads of the Python Brotli package in the previous month, based on pypistats.org and checked October 26. That is a download count, not a measure of vulnerable installations or active exposure.

Exposure and Remaining Unfixed Copies

The source reports that known exploitation in the wild had not been identified as of October 26. It says CISA’s data listed exploitation as “none” and that the CVE was not in CISA’s Known Exploited Vulnerabilities catalog. Those details describe the status reported at that time; they do not prove that no undiscovered attacks have occurred.

It is not clear from the source how many organizations use affected builds or how many are exposed through a reachable input path. A vulnerable version alone does not establish that an application can be attacked: exposure depends on whether it processes attacker-controlled compressed data and how the decoder is used. The source also lists bundled copies without fixes as of October 26, while noting that additional projects had fixes in their main branches. A fix in a development branch may not yet be included in a released package.

The source does not provide a complete, continuously updated inventory of affected products or current vendor response times. The separate DreamHost password-reset incident mentioned in the material has no stated cause and is not linked to Broccoli2Shell; the two developments should not be treated as connected.

Patch, Restart and Recheck

Technology teams should compare deployed versions against current advisories from runtime, package, distribution and product maintainers. Include containers, operating-system packages, language libraries and tools that bundle Brotli internally. Where software links to a system library, verify the library version supplied by the distribution; where it bundles Brotli, check for a product-specific update.

After installing a fix, rebuild affected images and restart processes that may have loaded the old decoder. Then confirm the running version and review relevant service and application logs for failures or unusual behavior. For components without a released fix, track the maintainer’s advisory and release status, and consider whether the component can be isolated or temporarily removed from paths that process untrusted compressed data. The source provides no single date by which all listed projects will ship fixes, so remediation remains a continuing inventory and verification task.

Key Questions

What is Broccoli2Shell?

Broccoli2Shell is the name used for CVE-2026-111497, a flaw in Google’s Brotli decoder. According to the source, malformed compressed input can trigger an out-of-bounds write and corrupt memory.

Which versions should teams check?

The source identifies Brotli C versions 1.0.3 through 1.2.0 as affected and lists fixes across Node.js, Python packages, Bun, Envoy, Istio, .NET and Debian. Check the relevant vendor advisory for the exact fixed version used by your deployment.

Does upgrading Express fix the issue?

Not by itself, according to the source. It says affected Express and body-parser releases can inflate Brotli request bodies, but the flaw is in the Brotli decoder rather than Express. Verify and update the decoder or runtime actually used.

Is the vulnerability being exploited?

The source reports no known in-the-wild exploitation as of October 26, 2026. It also describes an Imperva code-execution demonstration on an official Node.js image after several attempts; a demonstration does not establish active attacks in the wild.

Why must services be restarted after patching?

A running process can continue using the decoder it loaded before the update. The source says restarting affected processes is necessary for the patched decoder to take effect.

Source: ThorstenMeyerAI.com

You May Also Like

CVE-2026-15409: SonicWall SMA1000 Appliances Server-Side Request Forgery Vulnerability Actively Exploited (CISA KEV)

A server-side request forgery flaw in SonicWall SMA1000 appliances is actively being exploited, allowing remote attackers to cause unintended requests.

Advances in Malware Analysis and Reverse Engineering

Harnessing the latest advances in malware analysis and reverse engineering reveals new insights into cyber threats, prompting you to explore further to stay protected.

MSI Center – How To Gain SYSTEM Privileges In Seconds

Security researchers reveal a flaw in MSI Center enabling users to gain SYSTEM privileges within seconds, raising concerns over device security.

Introduction to Metaverse Security

Unlock essential insights into Metaverse security and discover how to protect your digital world from evolving cyber threats.