Tech News

Broccoli2Shell: Node2Shell’s Brotli Flaw Now Affects Python, .NET, and Linux

Node2Shell, HTTP2Shell, Broccoli2Shell: three names for a single flaw, and a growing list of affected software every day. After Node.js, it is now Python, .NET, and several Linux distributions that are publishing patches for this Brotli-related vulnerability. Here is what you need to know.

If you follow the content published on IT-Connect closely, you probably saw my article about Node2Shell, the Brotli flaw exposing Node.js to remote code execution. At that point, the issue seemed to mainly affect Node.js. That is no longer the case.

The vulnerability in question, associated with CVE-2026-111497, is located in Brotli's C decoder, Google's compression library. It affects versions 1.0.3 through 1.2.0, and it has been fixed in versions 1.0.10, 1.1.1, and 1.2.1. Since this is a third-party component used by different tools, Node.js is not the only one at risk: any software that decompresses attacker-controlled Brotli data with a vulnerable version is potentially exposed. GitHub rates it CVSS 4.0 9.2, which means critical severity, whereas the Node.js project classifies it as high severity.

This also explains the shifting names. HTTP2Shell is a reminder that HTTP clients and servers are affected, even though the flaw is not specific to HTTP/2. Broccoli2Shell comes from a joke by researcher Juliano Rizzo: "Node2Shell is a terrible name. I call it Broccoli", he wrote on X. The independent site broccoli2shell.com has since been tracking patch status project by project.

Originally, this vulnerability discovered in Node.js by OpenAI Codex Security was nicknamed Node2Shell. In any case, we are talking about the same security flaw. Even so, this bug had been lingering for some time, as had its fix: it had been present in Brotli's code since February 2026, but according to Aikido, no one had identified it as a security fix.

No version included it before the one released on October 21.

Python, .NET, Linux: who is affected?

Let us now look at the components and systems impacted by this vulnerability:

  • Python : the Brotli and brotlicffi packages, which compile the same C decoder, were patched in 1.2.1 and 1.2.1.0. Both versions have been available since October 22 and 23, 2026. Be careful: your code does not need to import them directly: urllib3 (and therefore requests), aiohttp, and httpx with the brotli extra use them automatically as soon as they are installed, as Aikido explains.
  • .NET : Microsoft released out-of-band updates on October 25 for .NET 8.0.33, 9.0.22, 10.0.14, and .NET 11 RC3. The Redmond-based company mentions a risk of information disclosure, denial of service, or privilege escalation for applications that decompress Brotli via ASP.NET Core, HttpClient, or System.IO.Compression. "Request decompression and automatic response decompression are not enabled by default.", Microsoft notes.
  • Linux distributions : according to Aikido's tracking as of October 26, Debian 12 and 13, Alpine, and Amazon Linux 2023 have a patched libbrotli package. Ubuntu followed on October 26 with a version fixing 22.04, 24.04, 26.04, and 26.10. On Fedora, version 1.2.1 is under testing for versions 43 to 45. On the Red Hat side, the security bulletin confirms that RHEL 7 through 10 are affected, but no patch is available yet.
  • Embedded copies : some software directly embeds Brotli code into its own binary instead of using the library installed on the system. Updating your distribution's libbrotli package therefore changes nothing for them: you have to wait for a new version of the software itself. As of October 26, broccoli2shell.com still listed DuckDB, Apache Arrow (embedded build), 7-Zip-zstd, p7zip, EDK II, and woff2 (Makefile build) as unpatched.

Updating is not enough

Installing the fix is the first step, but another one must follow: restarting or rebuilding, depending on the context. A process keeps using the old decoder until it is restarted, and a container image remains vulnerable until it is rebuilt and redeployed. On the .NET side, self-contained applications must be republished because they ship their own runtime. It is the same logic as with PHP2Shell, as I explained in my article on checking and updating PHP containers under Docker.

If immediate updating is impossible, two measures can reduce exposure:

  • Python : uninstall Brotli and brotlicffi. HTTP clients will then fall back to gzip and deflate.
  • Incoming requests : reject request bodies sent with the Content-Encoding: br header at the proxy, load balancer, or WAF level.

Limitation: these measures do not protect the responses your application fetches, and removing br from the Accept-Encoding header does not change anything, because a malicious server can still send Brotli anyway. For Node.js, only updating the runtime fixes the issue.

author avatar
Florian Burnel Co-founder of IT-Connect
Systems and network engineer, co-founder of IT-Connect and Microsoft MVP "Cloud and Datacenter Management". I'd like to share my experience and discoveries through my articles. I'm a generalist with a particular interest in Microsoft solutions and scripting. Enjoy your reading.

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.