I am just amazed at how many people are blind to this.
Every single time one of these labs does something it is almost always sensationalized. They absolutely cannot refrain from describing how incredible their models are, it has to be injected into everything. I get this is basic grow-your-company stuff but it is getting obnoxious.
I think — and this is not at all a criticism of your comment —- that we have to urgently get out of the habit of calling them “labs”, because in this way we reinforce their attempts convey themselves as sort of scientifically neutral observers of what is happening.
Though I got told off for saying it maybe too snarkily, I also think that when well-paid, high-profile employees of one of these LLM as a service companies post in controversial or notable ways that could affect the perception of their employer’s products, we should consider that they are acting as a spokesperson. Any tweet where you might think “do I need to consider how this relates to my employer” is PR.
Apparently it doesn't contain a binding to the C library, but it does contain some compatibility and shares design decisions with it. In other words, it's not a clean-room implementation from the spec, but rather it's a port. Since this RCE is triggered by a OOB access, it's unlikely to have made it into the crate, but it's good to keep these things in mind.
Had a short moment to glance at it. My guess would be BROTLI_DCHECK(s>meta_block_remaining_len <= (int)BROTLI_BLOCK_SIZE_CAP) along with BROTLI_SAFE_WITH_STATUS having that goto saveStateAndReturn on non BROTLI_DECODER_SUCCESS.
Only decompression with Google's brotli library is affected. So if you use "Brotli" or "brotlicffi" in your Python app to decompress brotli, you're vulnerable. Compressing responses with brotli from Apache is safe.
We should start naming them like hurricanes: NIST creates a list of alphabetical names and assigns any CVE >= 9.0 with a name. Vulnerability Alex (CVE 9.4)
CVSS is a terrible proxy for vulnerability real world impact. Not to mention, that CVE with CVSS 10.0 in Bob's Flower Names library with 5 users is probably not that important.
I would love to hear your definition of this. Are llms used to aid in incident response? 100%. Why would I sit there and manually review data from multiple sources when I could have an agent pull from all and summarize? But to hand it off end to end? I haven't seen anyone accomplish this.
Handing it off completely is an incident waiting to happen.
What is the source of truth? If the LLM auto discovers when it needs to mitigate then it can get prompt injected. It's basically a backdoor into the system.
Someone needs to be responsible for integrating the LLMs and reporting the results to the company. It is at least one job role in every serious project.
This one again feels overblown, at least for servers. I just checked an org of over 200 GitHub repos. Node, Python, and C#. None of them are vulnerable... because none of them actually call the Brotli decoder. It's just not enabled by default on the server side, by the platforms themselves. This is much like the PHP bugs, where specific conditions have to be in play before you're actually vulnerable.
For clients? Sure, that's a bigger risk. Patch them. But bad guys aren't attacking your clients unless the clients connect to them. Don't stay up late to fix this.
(And yes, .NET is included here, because Microsoft's Brotli module is a binding for Google's vulnerable reference implementation.)
I can't find download numbers for extras, but it comes in the pretty dang innocuous-seeming `aiohttp[speedups]`, as well. Also `urllib3[brotli]`. Many, many people will be running these servers without recognizing the name of the library, especially in the agentic era.
I might be missing something obvious in your message, cause I don't see why server/client is relevant. Why would a frontend app speak a protocol that the backend doesn't?
That's just the total number of times that package was downloaded, which is completely unrelated to how many servers it appears in? Same with `aiohttp`: aiohttp can be used as a client library.
Sure, people should check their dependency trees, and make informed decisions.
Ok putting aside the "client" thing again assuming I'm just behind the times on python client-server architecture norms: What kind of vulnerability would concern you?
Sure, we can't say for sure that all 4 million of the jobs who downloaded (not built-with, but downloaded to cache anew) this library yesterday are running public-facing servers. But what subset of them might be? How much would it take before it's a concern?
Python feels particularly worrisome to me, as those are the kind of casually-setup servers on local dev boxes for some random little tool that are the most fertile ground for an exploit like this, where creds could be spread around in plaintext and malware could go unnoticed for a long time. And, of course, where the developers responsible probably aren't in the habit of watching the CVE list (yet...).
I hope I'm not coming across as rude -- I am honestly curious!
The whole package manager system is a complete disaster. A huge number of dependencies are pulled in that go unused in most projects, so the number of downloads is an extremely unreliable number. I'd be surprised if more than 10% of those downloads actually use the brotli decoder.
Well first off I love PyPI and am greatly offended on the behalf of thew newly-formed (forming?) council to fix it, but also I don't think that applies in this case. If your server is capable of decoding brotli packets it's at risk -- you don't have to actually use that functionality regularly.
There were no known breaches or end-to-end exploits as of Friday. I've seen LLM hallucinations purporting to be exploits and real exploits missing pieces (address leaks), but nothing complete. Friends at some of the bigger IR practices (CrowdStrike CAO, Unit 42, Talos) have said the same thing.
It'll happen sooner or later, but all signs are that this was first and foremost a process nightmare. It wasn't another Log4Shell.
The RCE was a know thing on Wednesday, without too much info. People started putting mitigation and orgs with valuable websites were shutting down servers.
Look at liveoverflow channel. Took him a good day with LLMs to find an exploit against a vanilla PHP instance.
It isn't a straightforward hack. But it is possible.
I feel like normal security issues don't get much publicity. The PHP and eMudhra issues seemed severe, and worth publicity. But then with things like this, I'm not sure. Is this a severe issue? Or is it just a run of the mill issue that's only newsworthy because web security is on people's minds right now?
The whole industry is on edge right now, and numbers wise the CVE count has exploded beyond belief. It's probably to take the side of caution, treat everything as important and update everything promptly rather than the old way of doing things where libraries are left months or years out of date until something happens.
> I's probably to take the side of caution, treat everything as important and update everything promptly
The risk is that if people keep seeing headlines about some vuln emergency that isn't in fact exploitable in most cases they'll just start to ignore them.
If your code ever accesses an HTTP URL that server can hack it. Some of the time, clients might be able to hack it too. This is comparable to the PHP issue.
I’d say this is reasonably severe. For a decently large class of servers exposed to the internet there’s a pretty simple way to RCE them. The actual set of vulnerable servers isn’t nearly as big as many would like to suggest. But if you’re running a node/express server, you should really be in panic mode right now.
Many compression formats support static dictionaries, and for a good reason. Short messages don't compress well. If you know a bunch of common data for a context, you can make the first several kilobytes compress a lot better.
I feel as though this should be googlebrotli2shell, not http2shell. Google deserves to take a bit of a reputational hit for this. This is a basic memory safety violation, from the same organization that does wuffs, that promotes Rust for memory safety, that has Carbon. zstd has high quality rust implementations and is from roughly the same time.
On top of that, the brotli library saw no releases for almost a full year, with the fix for this vulnerability being committed back in February. Google builds from main for all their projects, so were unaffected, but open source releases are a complete afterthought. Over 100 commits with miscellaneous fixes left languishing until a security incident forces a release.
On the decompression side yes, on the compression side the first good zstd rust port was announced yesterday. Until then, brotli was better supported in Rust than zstd.
But I agree, decompression libraries should be (mostly) memory safe nowadays, since that side is both easier to implement and more likely to be vulnerable.
Is there ever a demo of the "2shell" aspect here? Seems like the issue was fixed because it was thought to produce a hang. Has it ever been confirmed that the issue could result in an RCE? Or is this just hypothetical?
I had some fun playing with this on Wednesday. After the node release, it was still about a day before the patched brotli package showed up on pypi.
Very easy to reproduce the with a single httpx.get(URL) in Python, but I couldn’t figure out an ASLR bypass from that context. Crashing is easy and I (with LLM assistance) can get some read/write primitives, but no chain into getting a function pointer where I needed it. Probably needs heap manipulation, but I lost interest at that point.
Really hoping we see an actual RCE PoC. Also, the open weight models can easily provide a "regression test" that would shoo away most crawlers.
Why are you hoping for an RCE PoC? Curiosity's sake? Or because you'd like to use it offensively? The existence/publication of such a PoC makes the world less safe.
Curiosity. Calling it "node2shell" is a pretty strong claim. It is clearly the type of bug that can lead to code execution. What it takes to get there in the context of an http request is less clear.
As a practical matter, the impact could be pretty low. Very few things would accept brotli encoded data from a client. A PoC also doesn’t have to be for any particularly common configuration.
I’m someone who really enjoys reading Google’s Project Zero blog posts where they regularly walk through building exploits for phones and browsers. It gives you an appreciation for what is possible.
90 comments
[ 0.22 ms ] story [ 22.9 ms ] threadEvery single time one of these labs does something it is almost always sensationalized. They absolutely cannot refrain from describing how incredible their models are, it has to be injected into everything. I get this is basic grow-your-company stuff but it is getting obnoxious.
Though I got told off for saying it maybe too snarkily, I also think that when well-paid, high-profile employees of one of these LLM as a service companies post in controversial or notable ways that could affect the perception of their employer’s products, we should consider that they are acting as a spokesperson. Any tweet where you might think “do I need to consider how this relates to my employer” is PR.
Cargo links libcurl, which drags in brotli.
The python package has already been updated to 1.2.1. https://pypi.org/project/brotli/1.2.1/
Another day another out of bounds access in C code.
whether a hello wolrd in fastapi is affected might also be interesting
Rust Derangement Syndrome is at epidemic levels here.
Well for one you linked a bug that didn't lead to any known vulnerabilities. (And isn't an overflow.)
That's pretty difficult if you make outbound requests, and don't already have a TLS interception proxy set up.
I actually kinda like how that works.
and this is the actual CVE report, which doesn't say much: https://www.cve.org/CVERecord?id=CVE-2026-111497
What is the source of truth? If the LLM auto discovers when it needs to mitigate then it can get prompt injected. It's basically a backdoor into the system.
https://x.com/AikidoSecurity/status/2113759110625906950
For clients? Sure, that's a bigger risk. Patch them. But bad guys aren't attacking your clients unless the clients connect to them. Don't stay up late to fix this.
(And yes, .NET is included here, because Microsoft's Brotli module is a binding for Google's vulnerable reference implementation.)
I can't find download numbers for extras, but it comes in the pretty dang innocuous-seeming `aiohttp[speedups]`, as well. Also `urllib3[brotli]`. Many, many people will be running these servers without recognizing the name of the library, especially in the agentic era.
I might be missing something obvious in your message, cause I don't see why server/client is relevant. Why would a frontend app speak a protocol that the backend doesn't?
Sure, people should check their dependency trees, and make informed decisions.
Sure, we can't say for sure that all 4 million of the jobs who downloaded (not built-with, but downloaded to cache anew) this library yesterday are running public-facing servers. But what subset of them might be? How much would it take before it's a concern?
Python feels particularly worrisome to me, as those are the kind of casually-setup servers on local dev boxes for some random little tool that are the most fertile ground for an exploit like this, where creds could be spread around in plaintext and malware could go unnoticed for a long time. And, of course, where the developers responsible probably aren't in the habit of watching the CVE list (yet...).
I hope I'm not coming across as rude -- I am honestly curious!
If so, might be vulnerable.
Don't have Brotli enabled? Not vulnerable to this.
It'll happen sooner or later, but all signs are that this was first and foremost a process nightmare. It wasn't another Log4Shell.
The risk is that if people keep seeing headlines about some vuln emergency that isn't in fact exploitable in most cases they'll just start to ignore them.
[1] When more than half of the "standard" https://www.rfc-editor.org/info/rfc7932/#page-44 is an opaque binary blob, they're really not encouraging independent implementations.
https://broccoli2shell.com/
Is it really so hard to write a 2 sentence tweet that you need an AI to do it for you?
On top of that, the brotli library saw no releases for almost a full year, with the fix for this vulnerability being committed back in February. Google builds from main for all their projects, so were unaffected, but open source releases are a complete afterthought. Over 100 commits with miscellaneous fixes left languishing until a security incident forces a release.
On the decompression side yes, on the compression side the first good zstd rust port was announced yesterday. Until then, brotli was better supported in Rust than zstd.
But I agree, decompression libraries should be (mostly) memory safe nowadays, since that side is both easier to implement and more likely to be vulnerable.
However I guess testing isn't that great, probably.
https://www.imperva.com/blog/node2shell-from-brotli-data-to-...
There's also a public POC here, though with the caveat that they demonstrated it only on builds with weaker configurations. https://github.com/dimasma0305/CVE-2026-111497-POC
All that said, we haven't heard the major cloud providers or security labs saying they've seen exploitation in the wild yet.
Very easy to reproduce the with a single httpx.get(URL) in Python, but I couldn’t figure out an ASLR bypass from that context. Crashing is easy and I (with LLM assistance) can get some read/write primitives, but no chain into getting a function pointer where I needed it. Probably needs heap manipulation, but I lost interest at that point.
Really hoping we see an actual RCE PoC. Also, the open weight models can easily provide a "regression test" that would shoo away most crawlers.
As a practical matter, the impact could be pretty low. Very few things would accept brotli encoded data from a client. A PoC also doesn’t have to be for any particularly common configuration.
I’m someone who really enjoys reading Google’s Project Zero blog posts where they regularly walk through building exploits for phones and browsers. It gives you an appreciation for what is possible.