26 comments

  • netsharc 21 hours ago

    Well, whoever picked the name HTTP2Shell certainly didn't use any intelligence, artificial or genuine.

    It's so meaningless, broad and undescriptive of the actual issue. No it probably doesn't affect an HTTP server with nothing else behind it, so why is HTTP being blasted?

    You might as well call it Exploit Pro Max...

    • super256 8 hours ago

      A better name is Konduktsemmel, which is a bread roll (Semmel) which you eat on a funeral (Kondukt) in Austria. Fits to Brotli, doesn't it?

      (Actually you eat cake and drink coffee on a funeral, but it's still called like that in some parts of Austria.)

      • Rapzid 18 hours ago

        I think we've all seen where an LLM names a session, issue, or PR based on its early understanding and fails update it later.

        AI isn't being asked to review the title, and it doesn't have experience or think, so of course it's not going to flag it.

        No human reviews anything anymore so of course they aren't going to catch it.

        Edit: AI for as good as it is at "writing" is terrible at writing and particularly at naming things. I had an AI name a client OpenAICompatibleEmbeddingClient. "Brooooo.. I think "compatible" is implied, who names stuff like that?!"

        • rafram 12 hours ago

          That means that it supports other services with OpenAI-compatible embeddings APIs (not just OpenAI's own API). Seems reasonable!

          • Rapzid 7 hours ago

            Fortunately I didn't ask it for excuses and so it didn't give them like a pedantic junior on the spectrum.

            Which they will happily do if you ask them "why" they did something. 100% they will give their best "well actually" impression.

          • rmaxdev 15 hours ago

            LLM-based AI is a synthesis of human observed behavior

          • lifeisloving 13 hours ago

            Descriptive type names are a good thing. Id argue that one isnt that bad, but llms do take it to another level sometimes.

          • CharlieDigital 21 hours ago

            Feels like the goal was sensationalism.

            • cromka 9 hours ago

              Something that OpenAI would coin. Just like Anthropic did with Mythos.

            • rererereferred 18 hours ago

              Just call it CVE-2026-111497. More accurate and much easier to remember and to talk about with your boss.

              • kevincox 10 hours ago

                I can maybe remember CVE-2026. But there is no way I can remember 6 random digits.

                • ygjb 9 hours ago

                  Yeah, because the six number chunk is near the limit of recall. Don't remember CVE-2026 since the year and CVE can be reconstructed from time memory. You know it came up this year. Remember that vuln 111-497 (as two chunks) came out this year, and remembering two short chunks is easier.

                • N19PEDL2 17 hours ago

                  Or EUVD-2026-108169.

                • cowlevel 18 hours ago

                  Actually it does, if the server is willing to decompress POST bodies.

                  • croes 18 hours ago

                    Brotli bodies, so Brotli2Shell

                    • SkiFire13 1 hour ago

                      And only those using Google's Brotli implementation.

                  • techpression 21 hours ago

                    I immediately thought HTTP/2 was having a bad day somehow. Might I suggest Software2Shell to be less confusing.

                    • CharlieDigital 20 hours ago

                      Specifically Brotli2Shell

                      • photios 20 hours ago

                        google2shell would have been nice :D

                        • anilakar 19 hours ago

                          Alt-tabbing from browser to terminal and back has always felt exhausting. Nice.

                          • devsda 18 hours ago

                            With ad served malware, this wouldn't be the first time though :)

                      • reddozen 21 hours ago

                        The author clearly used super intelligence.

                        • Stitch4223 7 hours ago

                          You and I, my friend, are the only ones in this thread not being sent to work in the glitter mines of south Arkansas as enemies of God's Country. SI has the best names, other intelligence is vastly inferior, using it is worse than many schisms of -isms combined.

                        • TZubiri 16 hours ago

                          It looks like marketing HTTP2Shell seems to appeal to everyone that uses HTTP, while Brotli2Shell might not wake up people that know what it is.

                          Now, whether it's warranted or not, that's another matter, but they know how to appeal for maximum awareness/interaction.

                          • groundzeros2015 18 hours ago

                            All these names are silly. It's just marketing.

                            • sigmarule 18 hours ago

                              There are levels of silliness, and this has achieved a new one.

                          • pimterry 20 hours ago

                            Much prefer the Broccoli2Shell name & site (for the same vuln): https://broccoli2shell.com/. For starters, I'm pretty sure you can hit this without HTTP if you do any manual Brotli decoding, HTTP just happens to be the most common case that comes up.

                            • illusive4080 16 hours ago

                              Why do critical vulnerabilities get a cutesy name and website nowadays? Who’s paying for these sites?

                              • sbarre 14 hours ago

                                Small static websites are effectively free (Cloudflare, GCP free tier, etc)..

                                • reassess_blind 13 hours ago

                                  Domains aren’t

                                  • mynameisvlad 13 hours ago

                                    Sure, but domains aren't going to be more than $10 or $20 for the year they're relevant.

                                    • ygjb 9 hours ago

                                      \o/

                                      1. See a vuln domain reported, clone the site. 2. Wait for it to expire and snag it. 3. Republish the site with malware 4. Watch people dither about domain names and stuff instead of taking time to fix things.

                                    • ygjb 9 hours ago

                                      Sure they are. The domain you want isn't.

                                      GitHub.io domains, workers.dev domains, etc are all free domains.

                                      Clever use and abuse of some startups can get you a free domain with a signup package that you can subsequently transfer out, but those are harder to find these days.

                                      Seriously, the bad guys figure this out all the time.

                                  • cyphar 2 hours ago

                                    This has been the case for more than a decade, Heartbleed was probably the one which really created the trend.

                                    • cubefox 15 hours ago

                                      I'm certainly not complaining about some selfless guy making a helpful website without expecting anything in return!

                                      • nicce 13 hours ago

                                        They excpect fame and may make things look worse than they are

                                        • mynameisvlad 13 hours ago

                                          How, exactly, are they making "things look worse than they are"? By.... showing what the issue is?

                                          • nicce 12 hours ago

                                            Not particularly referencing to this link, but usually severity is made more severe than it actually is. One kind of sensationalism is usually used.

                                          • cubefox 12 hours ago

                                            No, they aren't. The website doesn't list an author, so fame is out of the question, and they say exactly how severe the bug is rated ("Rated 9.2 Critical (CVSS 4.0) by GitHub, High by Node.js.") right at the top.

                                            • nicce 11 hours ago

                                              There is named entity in the end, and "we" statement. But yeah, I was speaking in general, not so specifically about this page. It is better than most who do this.

                                        • TZubiri 16 hours ago

                                          Are you asking why do we name things? In a programming forum?

                                          • solyin 2 hours ago

                                            Listen. There are TWO problems, okay‽

                                          • o_m 14 hours ago

                                            It is annoying (and ironic) because larger companies, that will benefit from this information the most, blocks newly registered domains.

                                        • nayuki 3 hours ago

                                          I see some irony here. For a period of time, Google chose not to include JPEG XL in Chrome because vulnerabilities in the library could compromise the software - a legitimate concern. Yet, Google is the author of the Brotli data compression format a decade before the JPEG XL drama, and was happy to use it in Chrome and encourage others to use the library, despite the fact that it also increases the attack surface.

                                          • Rapzid 20 hours ago

                                            > reported it as unauthenticated remote code execution that works in both directions

                                            > but it wasn't recognized as a security issue at the time and no release shipped with the fix until now

                                            I'm always getting my dangerous RCE bugs mixed up with my harmless RCE bugs.

                                            I'm curious how this was reported and fixed back in Feb but nobody recognized the importance. A case of AI automation and nobody at the wheel?

                                            • wavemode 14 hours ago

                                              I'm not seeing any source for the claim that OpenAI discovered this in February. The source that the article links (a tweet by OpenAI) doesn't claim that.

                                            • bawolff 20 hours ago

                                              To me, the surprising part is how many of these implement brotli compression of request (not just response) bodies, given how obscure a feature that is.

                                              In any case all this sensationalism is starting to get annoying. Patch your stuff and move on.

                                              Edit: actually, between all the sensationalism, its hard to tell from the article how many of these actually support brotli compressed request bodies in common configs vs some other use of brotli (which is bad but nowhere near as critical)

                                              • ArcHound 20 hours ago

                                                I think the issue is that the servers "silently" support brotli. Then nobody uses it, but the attacker can still abuse the feature.

                                                So as a hotfix I block this on my reverse proxy.

                                                • bawolff 20 hours ago

                                                  But is that actually true?

                                                  It seems like node supports it with body parser enabled.

                                                  But im having trouble finding any docs suggesting anything else supports it on inbound requests.

                                                  Obviously there are other scenarios where it is exploitable, but it is a much less severe vuln if the attacker must first force the program to make an outbound request to a server of its chosing rather than just connect to a vulnerable server.

                                                  • ArcHound 16 hours ago

                                                    The idea is to identify brotli encoding in the content-encoding header and block that on nginx. This shouldn't reach vulnerable brotli parser in node.

                                                    I hope my assets are not connecting to malicious servers, otherwise yes, I have a problem.

                                                    • Rapzid 18 hours ago

                                                      Asp.Net adds Brotli support if you "UseRequestDecompression" or "UseResponseCompression".

                                                      DotNet, however, has it's own C# Brotli implementation.

                                                      • dboreham 14 hours ago

                                                        According to Claude when I asked it to audit one of our Python applications, there are scenarios where Brolti can be used only when some Python library detects that the C library is installed on the system. So your Brolti-ness can depend on which machine your code runs on. Ymmv, it didn't look to be a practical possibility in our code so I didn't probe further.

                                                        • mort96 14 hours ago

                                                          These chat bots always hedge like that. They will never give you a straight answer, it's always "depending on version and build configuration and system configuration".

                                                          Investigate yourself. Read the documentation. Grep for brotli in the source. Don't blindly trust a chat bot when it says it "might happen in certain configurations".

                                                          • dboreham 14 hours ago

                                                            Chat bot lol. It did all of those things including scanning the binary. I ran it after doing my own (albeit more limited, but maximal-human) investigation.

                                                            • mort96 14 hours ago

                                                              Is that meant to be a response to what I wrote or did you reply to the wrong comment

                                                      • AlienRobot 17 hours ago

                                                        I wonder if we'll see more of this thanks to AI. Extremely complex features that nobody uses and that were easy to add, which incidentally tremendously expand the attack surface. One would hope that maintainer would be wise to avoid that, but for how long?

                                                        • fock 14 hours ago

                                                          https://github.com/tmux/tmux/pull/5709/changes it is already happening. Nice 50 lines of C-code to add support for kernel-keyrings which no userland software uses and literally is a one-line config-option.

                                                          • ArcHound 16 hours ago

                                                            I think so, especially vibe coded software. I think hackers have the advantage now and defenders need to limit attack surface more rigorously.

                                                            Unfortunately that means understanding and limiting dependencies of developers... Yea, good luck.

                                                            My popcorn is ready. My servers are not.

                                                            • whoanoway 15 hours ago

                                                              I'm not saying that my experience translates 1:1. As a child of domestic violence, all I can say is that it never gets better. Sadly, my feeling is that the violence will only escalate from here. If you look at the bright side, you can earn your stripes as a legitimate infosec engineer and prove your worth to the industry and the world.

                                                              • ArcHound 15 hours ago

                                                                I'm sorry that happened to you. I tend to agree that the race to the bottom will continue.

                                                                And don't worry about my stripes, I'm mostly talking about my hobby self-hosted apps. If anything, should someone hack them I'll have a funny article to post on my blog. Professionally, I do things differently.

                                                          • bflesch 17 hours ago

                                                            Cloudflare has this amazing feature where it accepts compressed payloads and forwards them to unsuspecting backends. Can be weaponized in many ways.

                                                          • therein 13 hours ago

                                                            My experience with Brotli is from back when all the hype was mobile first and India etc was super mobile first so all these social networks lost their mind optimizing for request success and speed. So they were going crazy over micro-wins like that.

                                                          • nairboon 21 hours ago

                                                            Brotli2Shell seems to be a more appropriate name for this.

                                                            • mkl 19 hours ago

                                                              Not when you're prioritising sensationalism over accuracy. Everyone's heard of HTTP, but hardly anyone's heard of brotli.

                                                            • sli 2 hours ago

                                                              There's this other name for the same vuln: https://broccoli2shell.com/

                                                            • flyingjoe 21 hours ago

                                                              A few month ago, everyone was advising to use cool-downs in your package upgrades. Now we're constantly overriding those because security incidents will be exploited immediately. Guess that's just how it's gonna be from now on.

                                                              • acdha 9 hours ago

                                                                That's why it's important to practice your processes for both shipping quickly and overriding cooldowns. There's a baseline of things which are not easy to exploit where you want to patch on a regular cadence and the risk posed by a supply chain attack is greater than the risk of an attacker having enough of a footprint inside your systems to escalate. The fact that sometimes you have a specific situation like this where that's not true doesn't mean that 9 times out of 10 the cooldown was the better risk-reduction strategy.

                                                                • medler 21 hours ago

                                                                  It used to be a flex to say you deploy daily but it’s going to become a necessity just to keep up with the vulns

                                                                • mort96 14 hours ago

                                                                  Yeah, obviously? Deploy fixes to security issues which apply to you as soon as possible, deploy random feature additions and non-critical bug fixes after some cooldown.

                                                                  As always, the easiest way to manage this is to have as few dependencies as possible. If you have a lockfile with thousands of entries, you won't be able to go through them and decide which upgrades are legitimate urgent security updates and which can wait. If you have 10? You'll manage.

                                                                • cowsandmilk 21 hours ago

                                                                  Article claims OpenAI found this in February, but I don’t think that’s correct. I think Google made a change to the Brotli source code in February that fixes the issue, but hadn’t realized it was a security issue and therefore hadn’t cut a release.

                                                                  • Rapzid 20 hours ago

                                                                    Yeah that doesn't make a lot of sense that they reported it but also nobody knew it was a security issue..

                                                                    Maybe an LLM just happened to do one of those "while I'm here" fixes in Feb and because nobody reviews anything anymore..

                                                                    "Fixed reading too many bytes."

                                                                    LGTM!

                                                                    Edit: I was close! "Detect and report invalid stream earlier." Could have been a person.

                                                                  • tetha 22 hours ago

                                                                    Well at least we know about it while or before the giant patch effort for everything else goes on. Just put it onto the pile.

                                                                    Who turned on hard mode this week?

                                                                    • loloquwowndueo 21 hours ago

                                                                      Nah man. We were on casual mode all along. This is the new normal.

                                                                    • skeledrew 20 hours ago

                                                                      I've just been pointing a Claude Code at these things as they pop up. A great time to not have to worry about chasing all these things manually.

                                                                      • Rapzid 10 hours ago

                                                                        Ubuntu still has libbrotli1 patch under review as medium. This is holding up updates to libcurl and thus git and a whole bunch of other stuff.

                                                                        • misiek08 2 hours ago

                                                                          They’ll have it for few months and then make you pay to get the update.

                                                                        • semiquaver 17 hours ago

                                                                          Let’s say I have a node.js app behind an Amazon elastic load balancer which terminates TLS. My understanding is that in nearly all configurations, my app would be unaffected because the ELB would handle decompression. Is that generally correct?

                                                                          • chrismorgan 16 hours ago

                                                                            I don’t know about that specific software, but I would be surprised if it decoded message bodies, which is entirely unrelated to TLS termination and shouldd be entirely unrelated to routing. So I would expect you would still be vulnerable.

                                                                            • aleaph 17 hours ago

                                                                              Yep, I don't think too many people are exposing their python/node servers directly, it should be always behind a proxy or a fancy cloud LB.

                                                                              Apache and nginx don't handle brotli out of the box.

                                                                            • upofadown 21 hours ago

                                                                              An example of the cost of added complexity I suppose. Brotli is much more complicated than the gzip/deflate it replaces. ... and of course we still have to expose gzip to attack as well.

                                                                              Every time you add something you lose something...

                                                                              • est 22 hours ago

                                                                                wtf Python is also effected. https://pypi.org/project/brotli/ not sure about shell

                                                                                • Incipient 21 hours ago

                                                                                  Side point from going to pypi:

                                                                                  > Security notice: Upgrade certifi, pip, and uv in response to CA certificate incident

                                                                                  Blimey PIP is affected? That's bad. I feel like that should have been bigger news?

                                                                                  • skeledrew 20 hours ago

                                                                                    Because pip uses it's own certificate bundle, so even if you fix the system itself pip still needs its own upgrade to handle the eMudhra episode.

                                                                                    • zahlman 3 hours ago

                                                                                      ~~Recent versions of pip use `truststore` by default to access the system's certificates, only relying on the vendored `certifi` as a fallback or if explicitly directed.~~

                                                                                      The above is incorrect per the Python forum discussion (https://discuss.python.org/t/information-for-python-users-re...). Pip will trust certificates from both sources.

                                                                                      Users of uv who have already updated their system certificates can use:

                                                                                        UV_SYSTEM_CERTS=true uv self update
                                                                                      • tetha 19 hours ago

                                                                                        And strictly speaking you cannot trust the pip upgrade of pip with the vulnerable cert in the trust store due to certifi, which you also cannot upgrade safely with pip for the same reason. All of these are at one out of two compromises from being MITM'd during the upgrade.

                                                                                        So strictly we have to burn everything python to the ground and reinstall entirely.

                                                                                        • saltcured 16 hours ago

                                                                                          Heh. This is part of why I always preferred getting my python runtime and all these core libs from my linux distro packager. But python die-hards look at me like I'm insane when I suggest this.

                                                                                          Even in today's LLM-addled world, I still think it's a better tradeoff for smaller system/site operators. Get the distro-level testing and regular auto-patching, rather than telling yourself it is a good idea to "freeze" your python world at the pace of your slowest app/system integrator.

                                                                                          It's the same reason I think docker is an anti-pattern for these small groups. You really cannot safely use these strategies to bake an image and divorce yourself from the maintained distro layer unless you are going to adopt CI/CD that does the same thing. Keep tracking all these patches to the entire runtime with all the dependencies, rebuild, re-test, and redeploy.

                                                                                          It's total cargo culting to adopt the freeze/image techniques and just abandon apps in place as if that is robust!

                                                                                          But, it's also more than just automatically updating everything. There is an editorial aspect to distro management to help secure the supply chain to your app. Most smaller orgs cannot feasibly do this as well as the regular linux distro maintainers. Some large orgs can probably do it better, but that doesn't matter if you aren't doing it large org style with dedicated security folks tracking all this against well-developed policies and procedures...

                                                                                          • zahlman 3 hours ago

                                                                                            > But python die-hards look at me like I'm insane when I suggest this.

                                                                                            They have a point. The distro is only carrying a small fraction of what's available on PyPI, and will have out-of-date versions that may lack security patches (and for projects like yt-dlp, are highly unlikely to work at all). Realistically they aren't applying security backports; there would rarely be a reason not to just use the new version, and the resources just aren't there for that scale of patching anyway.

                                                                                            Further, pip will interfere with your system package manager's tracking of the system environment (PEP 668), and any attempt you make to install from .deb/.rpm/etc. to a virtual environment is a hack at best. Maybe you could symlink individual package folders to the system environment while installing a superset, but ugh. Oh, and if you're a developer (like most "Python die-hards" are) then this isn't very helpful, as you aren't testing the installation of your package the way that your users will do it.

                                                                                            • graemep 13 hours ago

                                                                                              I agree about getting libs (binaries especially) from my distro, and it generally seems to be regarded as the "wrong thing to do". Freezing anything that might mean you get security updates slower seems to be a mistake to me.

                                                                                            • aftbit 16 hours ago

                                                                                              Or - you can just upgrade pip with a SHA hash pin, or set the magic env vars to use the system bundle.

                                                                                              You do need to be careful about creating new venvs with the old version of pip bundled in ensurepip in older Python releases. `uv` kindly patches that to newest pip, but not every Python binary does.

                                                                                                python -m pip install "pip @ https://files.pythonhosted.org/packages/3f/06/3e4420302363fbb71be3c7f35ce042f54bfca330e3e66b3a2e3c4cca579f/pip-26.2.2-py3-none-any.whl#sha256=fd7f4dfa8190e014013b9f08f3e973f4e4c26ffd179a204895533a7254813a70"
                                                                                              
                                                                                              Or alternatively, on Debian with fixed system cert chain:

                                                                                                PIP_USE_DEPRECATED=legacy-certs PIP_CERT=/etc/ssl/certs/ca-certificates.crt python -m pip install --upgrade "pip>=26.2.2"
                                                                                              
                                                                                              
                                                                                              https://discuss.python.org/t/avoiding-compromised-certificat...
                                                                                              • zahlman 3 hours ago

                                                                                                I had a pretty fun time with it myself. Rather than a system package for pip, or the `ensurepip`-provided one, I've been using the copy managed by pipx. I had to:

                                                                                                * Update system certificates

                                                                                                * Locate that pip and directly invoke it to self-update with hash pinning, rather than going through pipx

                                                                                                * Fix a few stray venvs that contained their own pip

                                                                                                * Use the fixed pipx to update uv (although I guess the uv self-update should work even for a pipx-installed copy?)

                                                                                                The legacy-certs hint is neat. I did it the first way but would rather not have since I'm on Mint.

                                                                                                • tetha 13 hours ago

                                                                                                  Good to know. Does the first invocation recompute and check the hash of the wheel locally afterwards to ensure integrity?

                                                                                                  • aftbit 13 hours ago

                                                                                                    Yep! I tested it with my own vibe-coded MITM proxy that hijacks pypi installations, which I created for ~$0.30 spend on DeepSeek API.

                                                                                                        $ python -m pip --no-cache install "pip @ https://files.pythonhosted.org/packages/3f/06/3e4420302363fbb71be3c7f35ce042f54bfca330e3e66b3a2e3c4cca579f/pip-26.2.2-py3-none-any.whl#sha256=fd7f4dfa8190e014013b9f08f3e973f4e4c26ffd179a204895533a7254813a70"
                                                                                                        Collecting pip @ https://files.pythonhosted.org/packages/3f/06/3e4420302363fbb71be3c7f35ce042f54bfca330e3e66b3a2e3c4cca579f/pip-26.2.2-py3-none-any.whl#sha256=fd7f4dfa8190e014013b9f08f3e973f4e4c26ffd179a204895533a7254813a70
                                                                                                          Downloading pip-26.2.2-py3-none-any.whl (1.8 MB)
                                                                                                             ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.8/1.8 MB 570.0 MB/s  0:00:00
                                                                                                        ERROR: THESE PACKAGES DO NOT MATCH THE HASHES FROM THE REQUIREMENTS FILE. If you have updated the package versions, please update the hashes. Otherwise, examine the package contents carefully; someone may have tampered with them.
                                                                                                            pip @ https://files.pythonhosted.org/packages/3f/06/3e4420302363fbb71be3c7f35ce042f54bfca330e3e66b3a2e3c4cca579f/pip-26.2.2-py3-none-any.whl#sha256=fd7f4dfa8190e014013b9f08f3e973f4e4c26ffd179a204895533a7254813a70 from https://files.pythonhosted.org/packages/3f/06/3e4420302363fbb71be3c7f35ce042f54bfca330e3e66b3a2e3c4cca579f/pip-26.2.2-py3-none-any.whl#sha256=fd7f4dfa8190e014013b9f08f3e973f4e4c26ffd179a204895533a7254813a70:
                                                                                                                Expected sha256 fd7f4dfa8190e014013b9f08f3e973f4e4c26ffd179a204895533a7254813a70
                                                                                                                     Got        8c448177668e735cdde7d6178694b90c084ba18559348cc394c4b1546eeec89c
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    The second one works too:

                                                                                                        $ PIP_USE_DEPRECATED=legacy-certs PIP_CERT=/etc/ssl/certs/ca-certificates.crt python -m pip install --no-cache --upgrade "pip>=26.2.2"
                                                                                                        WARNING: Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by 'SSLError(SSLCertVerificationError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1082)'))': /simple/pip/
                                                                                                        WARNING: Retrying (Retry(total=3, connect=None, read=None, redirect=None, status=None)) after connection broken by 'SSLError(SSLCertVerificationError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1082)'))': /simple/pip/
                                                                                                        WARNING: Retrying (Retry(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'SSLError(SSLCertVerificationError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1082)'))': /simple/pip/
                                                                                                        WARNING: Retrying (Retry(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'SSLError(SSLCertVerificationError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1082)'))': /simple/pip/
                                                                                                        WARNING: Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'SSLError(SSLCertVerificationError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1082)'))': /simple/pip/
                                                                                                        Could not fetch URL https://pypi.org/simple/pip/: There was a problem confirming the ssl certificate: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1082) - skipping
                                                                                                        ERROR: Could not find a version that satisfies the requirement pip>=26.2.2 (from versions: none)
                                                                                                        ERROR: No matching distribution found for pip>=26.2.2
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    As compared with a naive installation through the proxy:

                                                                                                        $ python -m pip --no-cache install 'pip>=26.2.2'
                                                                                                        Collecting pip>=26.2.2
                                                                                                          Downloading pip-26.2.2-py3-none-any.whl.metadata (4.6 kB)
                                                                                                        Downloading pip-26.2.2-py3-none-any.whl (1.8 MB)
                                                                                                           ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.8/1.8 MB 775.3 MB/s  0:00:00
                                                                                                        Installing collected packages: pip
                                                                                                          Attempting uninstall: pip
                                                                                                            Found existing installation: pip 26.2.1
                                                                                                            Uninstalling pip-26.2.1:
                                                                                                              Successfully uninstalled pip-26.2.1
                                                                                                        Successfully installed pip-26.2.2
                                                                                                    
                                                                                                        $ cat venv/lib/python3.14/site-packages/sni_proxy_sentinel.txt
                                                                                                        SNI proxy lab sentinel. This file is inert.
                                                                                                    • tetha 12 hours ago

                                                                                                      Oh nice. Then I have to thank you for a possible non-horrible upgrade path. If you were close by, I'd invite you for some icecream or a round of pool :)

                                                                                                • zahlman 3 hours ago

                                                                                                  > All of these are at one out of two compromises from being MITM'd during the upgrade.

                                                                                                  This is not true; pip supports hash pinning, so an attacker would have to be able to defeat SHA256 as well (or compromise both the official Python discussion forum and PyPI itself, so as to forged the published hash). Other hashes can also be used. Instructions are provided on the Python discussion forum to self-upgrade pip with hash pinning: https://discuss.python.org/t/information-for-python-users-re...

                                                                                                • steve1977 17 hours ago

                                                                                                  Python certificate handling is a hot mess, even by Python standards.

                                                                                                  • zahlman 3 hours ago

                                                                                                    Commentary like this adds nothing to the discussion and is simply provocative. Please don't.

                                                                                                    • steve1977 29 minutes ago

                                                                                                      Provocative of what? Thinking about the issues that Python has? Why would that be a problem?

                                                                                                      It IS a mess and it's causing problems again and again in real life. And it is particularly bad with Python. I don't see why this should be pointed out.

                                                                                                • murderfs 21 hours ago

                                                                                                  Pretty sure that's the eMudhra "private key is 4" issue.

                                                                                              • anttihaapala 17 hours ago

                                                                                                I had to check all of our Python deployments and installation BOMs and was quite relieved - turns out that none actually installed brotli libraries. HTTP libraries like httpx, requests and frameworks consider them optional and autodetect their presence.

                                                                                                • RachelF 12 hours ago

                                                                                                  Pretty much everything that talks http has this Brotli library linked in. A quick file search on a Windows dev box showed:

                                                                                                  - git

                                                                                                  - Sublime text

                                                                                                  - VS studio

                                                                                                  - CUDA

                                                                                                  - .NET

                                                                                                  - inkscape

                                                                                                  - AzureTools

                                                                                                  • gok 11 hours ago

                                                                                                    This is yet another example of the incredible negative impact of Google’s pattern of crapping out open-source libraries without actually maintaining them, so that people just copy and paste them into their projects.

                                                                                                    • truelson 10 hours ago

                                                                                                      So, uh, isn’t the blast radius huge here? Like ticking time bomb for unpatched servers huge once someone figures out how to craft their br payload just right?

                                                                                                      Browsers were patched back in March, but if you can get anything else that is unpatched to decode br, and most HTTP clients do by default, and you’ve figured out the right payload (yes not easy, but still), isn’t this, well, really bad? Like Heartbleed big?

                                                                                                      • perching_aix 19 hours ago

                                                                                                        git for windows is vulnerable even in its latest release (2.56.0.windows.3), careful pulling repos over https from random ass servers (prolly uncommon but hey). they already merged the fix on the repo, it's just in a snapshot build only; should prolly arrive on Monday (2.56.0.windows.4).

                                                                                                        also affects codex (gui), which ships its own git, could be more of a problem there, when the LLMs get quirky at night. still unlikely to be a problem though.

                                                                                                        speaking of, update codex (and wipe its cache at ~/.cache/codex-runtimes), ships its own node. update python.

                                                                                                        stuff like wireshark and imhex remain vulnerable, even on their latest repo commits, which may or may not be spicy.

                                                                                                        also Microsoft 365 Copilot still has its own unpatched brotlidec.dll from Oct 7, if anyone uses that. no fix available for that one afaik, not sure about how it can be made to access the vulnerable decoder.

                                                                                                        • andersonpico 17 hours ago

                                                                                                          why is this downvoted? are any of those not accurate?

                                                                                                          • hiitsmyaccount 16 hours ago

                                                                                                            Because a local software vuln is much less scary, less exploitable, and more common than an exploit like PHP2Shell, which requires basically no effort to exploit a large chunk of publicly exposed webservers. Basically, local vulns have been a thing forever and GP is off topic.

                                                                                                            • perching_aix 15 hours ago

                                                                                                              the article above is about a defect in google's brotli compression library (CVE-2026-111497). compression libraries don't really do web serving, or communicate with networked resources at all, they're hermetic. so exposure depends on the context this library is deployed in as a dependency.

                                                                                                              put it in the network path, it can become an RCE.

                                                                                                              put it in a privileged context, it can become privilege escalation.

                                                                                                              put it in a hardened environment, it can become completely inert.

                                                                                                              in no sane perspective is me listing off the applications shipping with vulnerable versions of this codec off-topic. just because the article is hellbent on portraying this as some sort of second php2shell, the actual underlying issue here is still CVE-2026-111497.

                                                                                                        • ChrisArchitect 13 hours ago
                                                                                                          • 1vuio0pswjnm7 14 hours ago

                                                                                                            "In 2016, the Brotli algorithm shipped in Chrome, delivering overall better compression ratios for eligible resources."

                                                                                                            "By the end of 2017, all modern browsers supported Brotli, and server support for it started to become more widespread."

                                                                                                            For www users, all that data collection, surveillance and ad services traffic to enrich so-called "tech" companies acting as intermediaries, can make the www exceedingly slow

                                                                                                            The way to "make the web faster" (or less inefficient) is to get rid of that needless traffic, and the ads it supports

                                                                                                            SPDY,^1 HTTP/2 Server Push,^2 HTTP/3 QPACK,^3 brotli, .... make www users ("ad targets" to Google) uninformed, nonconsenting subjects in Google's failed experiments

                                                                                                            The www already works just fine for its intended purpose (_not_ data collection, surveillance and ad services)

                                                                                                            1. "As of 2021, no major browsers supported SPDY" https://en.wikipedia.org/wiki/SPDY

                                                                                                            2. https://en.wikipedia.org/wiki/HTTP/2_Server_Push

                                                                                                            3. https://foxio.io/blog/header-accordions-qpack-amplification-...

                                                                                                            • graemep 13 hours ago

                                                                                                              I agree with you, but the immediate problem here seems to be that all major browsers support Brotli, and i think they all use the Google library, so they are all vulnerable.

                                                                                                              Most of the discussion here is about vulnerabilities in servers, but it looks like its mostly a client problem.

                                                                                                              Is there a way to turn brotli off?

                                                                                                              Going back to your point, if we kept things simple we would be a lot more secure.

                                                                                                              • 1vuio0pswjnm7 12 hours ago

                                                                                                                "OpenAI found this in February reported it as unauthenticated remote code execution that works in both directions, so a malicious client can take over an unpatched server and a malicious server can take over an unpatched client that accepts compressed responses."

                                                                                                                Every user is different

                                                                                                                For me I'm a text-only user not interested in graphics

                                                                                                                I do not use a so-called "modern" browser to make HTTP requests

                                                                                                                I don't request brotli-compressed content/resources^1

                                                                                                                Normally I don't send an Accept-Encoding header

                                                                                                                Almost always servers to which I connect^2 will return uncompressed text, which is what I want. No Accept-Encoding header needed

                                                                                                                Occasionally servers will send gzip-compressed text by default and will ignore "Accept-Encoding: identity"

                                                                                                                However the popular so-called "modern" browsers will send an Accept-Encoding header whose value includes brotli (br) by default

                                                                                                                Unsuspecting www users are consequently opted in to Google's brotli experiment. Me, I opt out

                                                                                                                1. I use a text-only browser (1.3MB static binary) to read HTML. I compile it without brotli support

                                                                                                                2. Other users may connect to different servers. Preferences vary from user to user

                                                                                                              • jgalt212 20 hours ago

                                                                                                                How may web servers only serve brotli?

                                                                                                                How many clients only accept brotli?

                                                                                                                • michaelbuckbee 20 hours ago

                                                                                                                  Well it's negotiated, right?

                                                                                                                  So say you run a SaaS that allows for something like letting people set their Avatar from an image URL which gets downloaded.

                                                                                                                  As an attacker I setup a new server that serves only brotli and then submit that URL to the SaaS.

                                                                                                                  • cowlevel 18 hours ago

                                                                                                                    Just send a POST with Content-Encoding:br to any URL and hope it gets decided before the URL route is checked.

                                                                                                                    • jgalt212 19 hours ago

                                                                                                                      > So say you run a SaaS that allows for something like letting people set their Avatar from an image URL which gets downloaded.

                                                                                                                      That's a clever example, but why would you do that? The avatar should be a static resource. As such, I'd only provide an upload file dialog.

                                                                                                                      • thephyber 19 hours ago

                                                                                                                        Gravitar was super popular for a year or two.

                                                                                                                        Quit being overly pedantic about how contrived the example is and struggle with the underlying fact that the compression type is negotiated between the client and server. If the compression happens on the HTTP request (as some of the comments here suggest), then the server must use that compression method or it fails to read the body of the request.

                                                                                                                        • jgalt212 10 hours ago

                                                                                                                          > how contrived the example is

                                                                                                                          That's basically one of the core ingredients of security. Build a threat model.

                                                                                                                        • ceejayoz 18 hours ago

                                                                                                                          Lots of apps will, for example, bring in your Google avatar (i.e. they fetch its URL for ingestion) as a default avatar if you use them for SSO. Slack included, IIRC.

                                                                                                                          • CJefferson 15 hours ago

                                                                                                                            I can almost certainly make my browser submit its file upload POST with the compression of my choice and your server will accept it.

                                                                                                                            • jgalt212 10 hours ago

                                                                                                                              apache does not accept brotli by default. so while the first part is true, the second part is only true for some X% of websites.

                                                                                                                      • TacticalCoder 20 hours ago

                                                                                                                        I really don't understand how so many different things are affected by the same brotli bug/exploit.

                                                                                                                        I even read the patch for the C code (patch which, btw, seems a bit hacky to me with isSafe? methods added and whatnots but YMMV: now I understand things had to be patched in a hurry but this patch really looks like "lipstick on a buffer overflowing C pig" to me).

                                                                                                                        What's the link between Python / Node / C++ / libbrotli / Envoy / Bun: are those some all using the same C brotli encoder/decoder?

                                                                                                                        Can someone who knows more explain why all those are vulnerable?

                                                                                                                        > As for unaffected software, Apache’s standard mod_brotli does not decode Brotli

                                                                                                                        Because this one only encodes and doesn't decode and the bug is in the decoder? (for I take it mod_brotli, with such a name, still does something brotli related and isn't, say, a TOTP token generator nor a SAT solver?).

                                                                                                                        I mean overall, sheesh: could we get better explanation / better writeups when such big fuckups happen?

                                                                                                                        • Rapzid 20 hours ago

                                                                                                                          Yes. All these language runtimes compile against common libraries. Compression libs are one of the most common common libraries that platforms like node, ruby, dotnet, python, and etc need to compile.

                                                                                                                          Google provides the Brotli implementation. Package maintainers slurp that up and create ie libbrotli-dev. When you compile node it uses that for brotli support.

                                                                                                                          • thephyber 18 hours ago

                                                                                                                            Brotli was a library released by the Google team that developed it. There weren't lots of independent implementations; they were all from the same source code.

                                                                                                                            • rfgplk 18 hours ago

                                                                                                                              Or you can roll your own and not rely on the literal disaster that Google developed. Brotli is trivial to implement.

                                                                                                                          • rfgplk 18 hours ago

                                                                                                                            As I've mentioned numerous times at this point, relying on third party code is a massive liability (supply chain attacks/sloppy code). My hand rolled brotli implementation is not only faster than libbrotli but also immune to this vulnerability (yes, I checked). Roll your own code people.

                                                                                                                            • ethin 17 hours ago

                                                                                                                              Would you also apply this to cryptography or, well, really any security library? Because I hope the answer will be no...

                                                                                                                            • davedx 21 hours ago

                                                                                                                              Honestly it's time to get rid of C as a language used where security is a factor. Enough already. Why the hell is a lib like brotli that processes public general internet traffic, and maintained by google, not in rust?

                                                                                                                              • thephyber 18 hours ago

                                                                                                                                Security is a factor everywhere. And C is everywhere. There's not going to be a "rewrite everything in Rust" project until after there is some legit penalty for selling / offering software in C that could be more secure in another language.

                                                                                                                                I think Mozilla got it right when they abandoned the effort to rewrite the entire browser in Rust and instead focused on analysis of which modules needed priority rewrites. If a module has historically had zero memory-related bugs, then there are other higher priority things to spend time on.

                                                                                                                                That said, Google Project Zero should have had Brotli on their radar. Hopefully they still have people and resources.

                                                                                                                                • _flux 16 hours ago

                                                                                                                                  I can understand why people used a C library for these apps, as when HTTP2 was specified, the C lib was the only game in down.

                                                                                                                                  However, why not switch to the Rust lib when it was available? I suppose people at Dropbox are now pretty happy they did in 2016: https://dropbox.tech/infrastructure/lossless-compression-wit...

                                                                                                                                  It's slower, though. Too high a price to pay for safety it seems.

                                                                                                                                  • doublerabbit 21 hours ago

                                                                                                                                    Because these applications were created long before Rust existed.

                                                                                                                                    There is a cost to conversion.

                                                                                                                                    • _flux 16 hours ago

                                                                                                                                      Rust-Brotli (by Dropbox) is actually a drop-in replacement for the Brotli C lib: https://github.com/dropbox/rust-brotli#:~:text=rust-brotli%2...

                                                                                                                                      Dropbox switched to it a decade ago, so it's probably quite product-ready.

                                                                                                                                      • Gigachad 21 hours ago

                                                                                                                                        Brotil was actually created post rust, but before rust took off.

                                                                                                                                        • anthk 13 hours ago

                                                                                                                                          Check Librsvg, or php-rust. Or tons of gtk4-rs software doing it just fine.

                                                                                                                                          • davedx 21 hours ago

                                                                                                                                            It's not even an application it's a compression library

                                                                                                                                        • austin-cheney 18 hours ago

                                                                                                                                          Why are we still so reliant on HTTP? HTTP came out in 1990 (36 years ago) and the most common version of HTTP still in use, 1.1 (RFC2616), came out in 1999 (27 years ago)?

                                                                                                                                          Yes, I know HTTP 2 and 3 and SSE are attempts to make it faster and more parallel, but its still slow. Its slow because its unidirectional with a full round trip and by default its a new socket per each message. Yes, I know the real reason HTTP became and remains popular is because its sessionless... in theory. Still, there are better options available. You can do so much more with a full duplex channel.

                                                                                                                                          • singpolyma3 18 hours ago

                                                                                                                                            We don't need new versions of http or SMTP because they're already simple and great and they're dumb protocols so there's not much you could ever add

                                                                                                                                            If you want something else you can take your pick based on need from dozens of other options

                                                                                                                                            • cowlevel 18 hours ago

                                                                                                                                              HTTP 1 is full of parser differential vulnerabilities, which 2 fixes. That is probably its biggest flaw.

                                                                                                                                              SMTP is too chatty - it uses too many round trips for efficient transfer across the internet. It can take several seconds just to get to the point of sending the email data. It also duplicates information between the SMTP envelope and the email body which creates vulnerabilities when they don't match.

                                                                                                                                              For APIs that don't have to work in a browser I suggest JSON lines over TCP, or over TLS.

                                                                                                                                              • rfgplk 18 hours ago

                                                                                                                                                Most header parsing bugs that affect HTTP1.1 can also affect 2+3. Not in the same style but there are quite a few overlapping ones.

                                                                                                                                                • cowlevel 13 hours ago

                                                                                                                                                  Only when 2/3 translates to 1, as in request smuggling attacks at a reverse proxy.

                                                                                                                                            • cowlevel 18 hours ago

                                                                                                                                              "by default its a new socket for each message" is misinformation - keepalive is the default since HTTP 1.1 (1999).

                                                                                                                                              • austin-cheney 15 hours ago

                                                                                                                                                Keep alive is not default behavior, so my prior comment was still more correct.

                                                                                                                                                • tredre3 14 hours ago

                                                                                                                                                  All webservers (apache, nginx, litespeed, caddy) have keep-alive enabled by default. All browsers also support it. Whether it's actually used/negotiated on most connections, I don't know, and if you want to be pedantic you're right that it can't be default by definition since you need the header to use it. But I suspect it actually is used for most connections nowadays.

                                                                                                                                                  Multiplexing is the default in HTTP/2 and 3. So you're still wrong.

                                                                                                                                                  • austin-cheney 12 hours ago

                                                                                                                                                    https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/...

                                                                                                                                                    https://stackoverflow.com/questions/36517829/what-does-multi...

                                                                                                                                                    So, for the sake of argument let’s say I am completely wrong, MDN is wrong, all of Stack Overflow is also wrong. Even still HTTP is slow. Slow as shit. Imagine trying to do a MS Teams call with 50+ participants with cameras on. It would be slow as shit for just a one-on-one call. A call with 50+ people would be ridiculously slower and would likely result in a crash from memory exhaustion.

                                                                                                                                                    I was also not talking about HTTP2 or 3. I was very clear about that. Reading is hard. HTTP is used in many different contexts outside the browser where 1.1 continues to dominate.

                                                                                                                                                    The primary reason developers want to keep HTTP around is familiarity and comfort. HTTP is great when you don’t compare to anything else or do any kind of performance tuning.

                                                                                                                                                  • cowlevel 13 hours ago

                                                                                                                                                    Keepalive is literally the default. You have to send an additional header if you don't want to use keepalive.

                                                                                                                                                • rfgplk 18 hours ago

                                                                                                                                                  Agreed. The issue with all these archaic standards is that they were rolled decades ago back when certain practices were either outright not being employed OR that hardware wasn't fast enough. Ironically, HTTP itself is a literal nightmare to parse (performance wise) on top of having like... ten? distinct vulnerability classes. The world desperately needs new standards.

                                                                                                                                                  • cowlevel 18 hours ago

                                                                                                                                                    Just open a TCP socket and send JSON messages. Or if you want a bit more efficiency, fixed-format binary messages, but remember to include a version number.

                                                                                                                                                    • rfgplk 18 hours ago

                                                                                                                                                      For custom server implementations, agreed. But the web still depends on HTTP and we sadly need the major infra providers to agree on a new standard otherwise HTTP isn't going anywhere

                                                                                                                                                      • cowlevel 13 hours ago

                                                                                                                                                        Web uses web protocols, notweb uses notweb protocols. When I write an XMPP bot it has to speak XMPP, not HTTP. I could write my video game server to use XMPP but why the heck would I do that? If I choose a badly fitting protocol, it's on me.

                                                                                                                                                        • graemep 13 hours ago

                                                                                                                                                          I think one problem there is that a lot of places block other ports. Was that not why websockets runs on http ports?

                                                                                                                                                          • cowlevel 7 hours ago

                                                                                                                                                            Websockets have to be careful not to enable a client-side SSRF by accessing anything you couldn't already access with an <img> tag. They can use any port except the ones that are generally prohibited for browser HTTP requests, such as 25 and 6667.