Offengelegt wurde die Lücke erstmals am 21. Oktober, als Node.js und Google Korrekturen veröffentlichten; weitere Produkte zogen seither nach. Weil der Fehler in Googles Decoder steckt und jedes Programm eine eigene Kopie dieses Codes mitliefert, muss jedes Projekt seine Kopie einzeln aktualisieren.
Brotli ist ein von Google entwickeltes Kompressionsformat, das im Web breit eingesetzt wird, um Seiten und anderen Datenverkehr zu verkleinern. Der Fehler sitzt im C-Code, der einen Brotli-Datenstrom entpackt, und wandert damit in alles, was diesen Code wiederverwendet — von Sprachlaufzeiten über Proxys bis zu Python-Paketen.
Verwundbar ist eine Anwendung nur, wenn sie Brotli-Daten dekodiert, die jemand anders kontrolliert. Bei Node.js und Bun ist das der Fall, wenn das eingebaute fetch() eine Antwort mit Content-Encoding: br liest, oder wenn Code zur Verarbeitung von Request-Bodies wie Express 5 und body-parser 2 einen Brotli-Upload entpackt. Ein einfacher Node.js-HTTP-Server dekodiert Request-Bodies von sich aus nicht.
Envoy und Istio sind nur betroffen, wenn die Brotli-Dekomprimierung eingeschaltet ist, etwa über einen Envoy-Filter. Ist sie aus, lässt sich der Fehler nicht erreichen.
In Python entsteht das Risiko bereits dadurch, dass das Paket Brotli oder brotlicffi überhaupt installiert ist. Sobald eines davon vorhanden ist, dekodieren HTTP-Clients wie requests, urllib3, httpx und aiohttp Brotli-Antworten selbstständig — eine Anwendung kann also exponiert sein, ohne Brotli jemals im eigenen Code zu importieren.
Eine Web Application Firewall hilft nur begrenzt. Vercel, das am Tag der Offenlegung Firewall-Regeln ergänzte, erklärte, diese Regeln deckten „Antworten, die Ihre Functions von anderen Servern abrufen" nicht ab. Für diesen Weg schließt nur ein Update der Laufzeitumgebung oder Bibliothek die Lücke.
Wie weit sich der Fehler ausreizen lässt, hängt von der jeweiligen Software ab. Das Red Team von Imperva, das seine Arbeit Node2Shell nennt, führte von Angreifern bereitgestellten Code auf einem unveränderten Build von Node.js 24.22.0 für Linux auf ARM64 aus — sowohl über eine abgerufene Antwort als auch über einen Express-Request-Body. Der Exploit benötigte mehrere Anläufe, wurde nicht veröffentlicht und nicht auf anderen Builds getestet. Für die übrige betroffene Software ist Codeausführung bislang nicht demonstriert worden.
OpenAI, dessen Codex-Security-Team die Lücke meldete, beschreibt sie als unauthentifizierte Remote-Code-Ausführung in Brotli und nennt Node.js, Bun und Envoy als betroffene Software; nach dieser Darstellung wirkt der Fehler in beide Richtungen.
Angriffe in freier Wildbahn sind nicht bekannt. Die Bewertung der CISA vom 23. Oktober verzeichnete die Ausnutzung als „keine" und die Automatisierbarkeit mit „nein"; Red Hat erklärte, es gebe keinen verlässlichen öffentlichen Proof-of-Concept für Codeausführung.
Die Einstufungen gehen auseinander: Google, das die CVE vergeben hat, bewertet die Lücke mit 9,2 und damit als kritisch nach CVSS 4.0. Node.js stuft sie als hoch ein, Red Hat mit 8,1 als wichtig.
Die Korrektur hat eine ungewöhnliche Vorgeschichte: Die Änderung, die den Fehler behebt, wurde bereits am 27. Februar in den Brotli-Quellcode aufgenommen, doch bis zum 21. Oktober enthielt kein neues Brotli-Release sie. OpenAI erklärte, die Ursache sei „tatsächlich im Februar im Brotli-Quellcode behoben worden, aber damals war nicht bekannt, dass daraus eine Sicherheitslücke entsteht, und es gab kein neueres Brotli-Release".
Node.js nennt Khai Tran und Sylvie Mayer von OpenAIs Codex Security als Melder sowie die Maintainer Matteo Collina und Antoine du Hamel für den Fix.
Nach dem Update auf eine korrigierte Version muss der Dienst neu gestartet und jedes Container-Image neu gebaut werden, da ein laufender Prozess den alten Decoder behält, bis er neu startet.
Wo noch nicht aktualisiert werden kann, empfehlen die Offenlegungsseite von OpenAI und die Sicherheitsfirma Aikido, nicht vertrauenswürdige Brotli-Daten gar nicht erst zu dekodieren:
- Eingehende Anfragen mit Content-Encoding: br ablehnen, bevor ein Proxy oder Parser den Body dekodiert.
- Automatische Brotli-Dekodierung in HTTP-Clients abschalten und Brotli-Antworten vor dem Dekodieren zurückweisen.
- In Python die Pakete Brotli und brotlicffi deinstallieren, damit Clients auf gzip und deflate zurückfallen.
Das Entfernen von „br" aus dem Accept-Encoding-Header hilft für sich genommen nicht, weil ein Server Brotli unabhängig von der Anfrage des Clients senden kann. Für Node.js wurde kein Workaround veröffentlicht; dort bleibt nur das Update der Laufzeitumgebung.
Systempakete werden unterschiedlich schnell korrigiert: Debian hat sein brotli-Paket für Debian 13 (trixie) am 23. Oktober in Version 1.1.0-2+deb13u1 gefixt. Amazon Linux 2023 führte seine Pakete brotli und Node.js 24 am 22. Oktober noch als ausstehend.
Abhängigkeits-Scanner erfassen die Python-Pakete möglicherweise noch nicht: Der CVE-Eintrag nennt Googles Brotli-Repository, nicht die PyPI-Pakete, und GitHubs Advisory führt bislang kein betroffenes Paket auf — genau das liest Dependabot aus. Die Advisory-Einträge für die beiden Python-Pakete, PYSEC-2026-4322 und PYSEC-2026-4323, kamen am 23. Oktober hinzu, weshalb die installierten Versionen zusätzlich manuell geprüft werden sollten.
