TL;DR
⚠️ Brotli ist eine weit verbreitete Komprimierungsbibliothek von Google. Am Mittwoch, dem 21. Oktober, gab NodeJS die Sicherheitslücke CVE-2026-111497 bekannt, die als „node2shell“ bezeichnet wird. Dabei kann ein Node.js-Prozess, der von Angreifern kontrollierte Brotli-Daten dekomprimiert, dazu gebracht werden, Speicherinhalte preiszugeben oder beliebigen Code auszuführen. Am Donnerstag gab Python bekannt, dass auch Python-Pakete für CVE-2026-111497 anfällig sind.
Am Freitag, dem 23. Oktober, wurde bekannt, dass diese Sicherheitslücke auch andere wichtige Programmiersprachen und Serviceanwendungen betrifft, die HTTP nutzen, für die jedoch noch keine vollständigen Patches verfügbar sind.
Überprüfen Sie, ob Sie Brotli als Abhängigkeit in Ihren Bibliotheken dekodieren. Bleiben Sie auf dem Laufenden und seien Sie bereit, so bald wie möglich ein Upgrade durchzuführen. Falls für eine möglicherweise betroffene Bibliothek oder Anwendung noch kein Patch verfügbar ist, empfehlen wir, die Brotli-Dekodierung zu deaktivieren, bis Patches verfügbar sind.
Update 16:12 Uhr PT:Patches sind für libbrotli, Python, C++, NodeJS, bun und Envoy verfügbar, weitere folgen. Apache und Nginx dekodieren Brotli standardmäßig nicht.
Update, 16:15 Uhr PT: OpenAIteilt mit, dass das Unternehmen diese Sicherheitslücke bereits im Februar entdeckt hat. Zwar wurde das zugrunde liegende Problem damals im Brotli-Quellcode behoben, doch war zu diesem Zeitpunkt nicht bekannt, dass es zu einer Sicherheitslücke führte. Die Sicherheitshinweise von OpenAI finden Sie hier:

Was ist Brotli?
Brotli ist ein von Google entwickelter verlustfreier Komprimierungsalgorithmus und ein Datenformat. Damit lassen sich Daten verkleinern, um sie zu speichern oder über das Internet zu übertragen. Die Software entpackt die Daten anschließend wieder, um die Originaldaten wiederherzustellen. Brotli wird häufig für die HTTP-Komprimierung verwendet, um Webinhalte wie HTML, CSS und JavaScript zu komprimieren.
Was ist CVE-2026-111497?
CVE-2026-111497 ist ein Schreibzugriff außerhalb des zulässigen Bereichs im Google-Brotli-Decoder, der die Versionen 1.0.3 bis 1.2.0 auf allen Plattformen betrifft. Es handelt sich um dieselbe Schwachstelle im Brotli-Decoder, die auch hinter dem vor einigen Tagen bekannt gegebenen Node2Shell steckt. Ein nicht authentifizierter Angreifer kann aus der Ferne einen speziell gestalteten, Brotli-komprimierten Datenstrom senden, um den Speicher zu beschädigen, sensible Daten offenzulegen, den Prozess zum Absturz zu bringen oder möglicherweise beliebigen Code auszuführen. Die Schwachstelle hat einen CVSS v4.0-Wert von 9,2 (kritisch), und Node.js ist über die mitgelieferte Brotli-Bibliothek betroffen.
Aufgrund eines Fehlers akzeptiert der Brotli-Decoder weiterhin Bytes, obwohl er die Daten eigentlich ablehnen sollte. Diese Bytes können einen kleinen Arbeitspuffer überlaufen lassen und den Speicher des Programms beschädigen. Ein Angreifer kann diesen Schaden ausnutzen, um zu steuern, was ausgeführt wird – beispielsweise seinen eigenen Code.
OpenAI hat diese Schwachstelle im Februar entdeckt und als nicht authentifizierte Remote-Code-Ausführung gemeldet, die in beide Richtungen funktioniert: So kann ein böswilliger Client die Kontrolle über einen nicht gepatchten Server übernehmen, und ein böswilliger Server kann die Kontrolle über einen nicht gepatchten Client übernehmen, der komprimierte Antworten akzeptiert.
Die Ursache des Problems wurde bereits im Februar im Brotli-Quellcode behoben, wurde damals jedoch nicht als Sicherheitsproblem erkannt, sodass bis heute keine Version mit der Korrektur veröffentlicht wurde. Das bedeutet, dass jedes Projekt, das Brotli bündelt, ein eigenes Update veröffentlichen muss.
Sie sindgefährdet, wenn in einer Umgebung Brotli 1.2.0 oder früher oder brotlicffi 1.2.0.x installiert ist, da HTTP-Clients wie requests, httpx und aiohttp diese Pakete automatisch laden, sobald sie vorhanden sind. Führen Sie ein Upgrade auf Brotli 1.2.1 oder brotlicffi 1.2.1.0 durch und erstellen Sie alle container -Images, die diese Pakete enthalten, neu. Stand 23. Oktober ordnen die Sicherheitsdatenbanken die CVE-Nummer keinem der beiden PyPI-Pakete zu, sodass „pip-audit“, „ Dependabot “ und „Safety“ betroffene Versionen derzeit noch nicht kennzeichnen.
Was wir hier verfolgt haben, können Sieunter „ Aikido -Intel“ nachlesen.
Was nicht betroffene Software angeht, so gilt für Apache der Standard mod_brotli dekodiert Brotli nicht
So beheben Sie die HTTP2Shell-Sicherheitslücke CVE-2026-111497
Um die Sicherheitslücke CVE-2026-111497 zu beheben, aktualisieren Sie die betroffene Laufzeitumgebung oder die Brotli-Bibliothek:
- Node.js: Führen Sie ein Upgrade auf 22.23.4, 24.22.1 oder 26.12.1 oder eine neuere, unterstützte Version der entsprechenden Release-Reihe durch.
- Native Brotli / libbrotli: Aktualisieren Sie auf Version 1.2.1 oder höher. Für ältere Versionsreihen verwenden Sie die gepatchten Versionen 1.0.10 oder 1.1.1.
- Python-Pakete: Aktualisieren Sie Brotli auf Version 1.2.1 oder höher und brotlicffi auf Version 1.2.1.0 oder höher, unabhängig davon, wo sie installiert sind.
- curl / libcurl: Aktualisieren Sie die Brotli-Abhängigkeit auf Version 1.2.1, eine gepatchte ältere Version oder das vom Hersteller bereitgestellte Paket mit Sicherheitskorrekturen. Bei mitgelieferten oder statisch eingebundenen Kopien ist ein aktualisierter Anwendungsbuild erforderlich.
- Bun: Aktualisieren Sie auf Version 1.4.4 oder höher. Erstellen Sie die kompilierten ausführbaren Dateien, die Bun enthalten, neu.
- Envoy: Führen Sie ein Upgrade auf 1.40.0, 1.39.3, 1.38.6 oder 1.37.8 bzw. auf eine neuere Version in einem unterstützten Zweig durch. Die Korrektur ist auch in 1.36.12 enthalten, der Zweig 1.36 wird jedoch nicht unterstützt.
- Istio: Die Korrektur ist in den Versionen 1.29.9, 1.30.6 und 1.31.2 enthalten. Verwenden Sie in der entsprechenden Zeile eine neuere, unterstützte Version; der 1.29-Zweig ist nicht mehr unterstützt.
- Betriebssystem-Pakete: Installieren Sie das Sicherheitsupdate des Anbieters. Anbieter können den Fix möglicherweise zurückportieren, ohne die Versionsnummer des Upstream-Projekts zu ändern.
- Andere HTTP-Server, Reverse-Proxys, API-Gateways und HTTP-Clients: Aktualisieren Sie die betroffene Laufzeitumgebung oder die von ihnen verwendete Brotli-Bibliothek. Wenn Brotli im Produkt enthalten ist, installieren Sie die Version des Produktherstellers, die diese CVE ausdrücklich behebt. Bei Managed Services klären Sie die Behebung des Problems mit dem Anbieter ab.
Aktualisieren Sie die Abhängigkeitssperren, erstellen Sie die betroffenen Anwendungen und „ container “-Images neu, führen Sie eine erneute Bereitstellung durch und starten Sie die Dienste neu. Stellen Sie sicher, dass die laufenden Workloads die gepatchten Komponenten verwenden.
Was tun, wenn Sie noch kein Upgrade durchführen können?
Diese Umgehungslösungen verringern das Risiko, während Sie das Upgrade vorbereiten:
- Python-Anwendungen: Wenn die Brotli-Unterstützung optional ist, deinstallieren Sie sowohl Brotli als auch brotlicffi aus den betroffenen Umgebungen. Entfernen Sie zusätzliche Abhängigkeiten wie httpx[brotli] und alle anderen Anforderungen, die zu einer erneuten Installation führen würden, und generieren Sie anschließend die Abhängigkeitssperren neu und erstellen Sie die Workloads neu bzw. starten Sie sie neu. HTTPX, Requests und urllib3 behalten auch ohne diese optionalen Pakete die Unterstützung für gzip und deflate bei. Ein Server, der dennoch Brotli sendet, kann jedoch eine unlesbare Antwort oder einen Anwendungsfehler erzeugen; ein automatischer Fallback ist nicht garantiert.
- Durch die Deinstallation beider Python-Pakete und den Neustart der Workloads werden die von diesen Paketen bereitgestellten Dekodierungspfade für eingehende und ausgehende Daten entfernt. Separate Brotli-Dekodierer, die in anderen Laufzeiten, Bibliotheken oder Produkten enthalten sind, werden dadurch nicht entfernt.
- Eingehende HTTP-Anfragen: Lehnen Sie Anfragen ab, deren „Content-Encoding“-Header „br“ enthält – und zwar am Reverse-Proxy, am Load Balancer oder in der Anwendungs-Middleware, bevor ein anfälliger Decoder den Body verarbeitet. Der Abgleich mit „br“ erfolgt unabhängig von der Groß-/Kleinschreibung, auch innerhalb von Codierungslisten.
- Ausgehende HTTP-Anfragen: Entfernen Sie „br“ aus dem Feld „Accept-Encoding“. Deaktivieren Sie außerdem die Brotli-Entschlüsselung von Antworten oder lehnen Sie Antworten ab, deren „Content-Encoding“-Feld „br“ enthält, bevor die Entschlüsselung beginnt. Stellen Sie sicher, dass diese Überprüfung vor der automatischen Verarbeitung des Antworttextes erfolgt; eine Überprüfung, nachdem der Client die Antwort bereits heruntergeladen und entschlüsselt hat, erfolgt zu spät.
Eine Änderung von „Accept-Encoding“ allein reicht nicht aus: Ein böswilliger Server kann eine Brotli-Antwort senden, unabhängig davon, was der Client angibt, und urllib3 wählt seinen Decoder anhand des „Content-Encoding“-Headers der Antwort aus.
Behalten Sie diese Kontrollmaßnahmen bei, bis die betroffenen Komponenten gepatcht und überprüft wurden. Überprüfen Sie den Umfang der Maßnahmen, sobald Anbieter weitere betroffene Komponenten oder Angriffspfade bestätigen.
Wie „ Aikido “ bei CVE-2026-111497 hilft
Aikido Markieren Sie anfällige Versionen von Brotli und brotlicffi in Ihren Repositorys, „container “-Images und Abhängigkeiten – auch dann, wenn diese als transitive Abhängigkeiten vorhanden sind. Ihr Dashboard zeigt an, welche Dienste noch eine anfällige Version ausführen, sodass Sie diejenigen, die externe Server aufrufen oder komprimierte Request-Bodies akzeptieren, zuerst aktualisieren können.
Nach dem Upgrade prüft „ Aikido “, ob der Fehler behoben ist.
Die Zeitachse
Brotli ist eine weit verbreitete Komprimierungsbibliothek von Google. Am Mittwoch, dem 22. Oktober, gab NodeJS die Sicherheitslücke CVE-2026-111497 bekannt, die den Namen „node2shell“ trägt. Dabei kann ein Node.js-Prozess, der von Angreifern kontrollierte Brotli-Daten dekomprimiert, dazu gebracht werden, Speicherinhalte preiszugeben oder beliebigen Code auszuführen. Benutzer waren gefährdet, wenn ihre App oder eine Bibliothek fehlerhafte Brotli-Daten dekomprimiert (z. B. die integrierte Funktion `fetch()` oder `body-parser`).
Am nächsten Tag veröffentlichte Python ein Sicherheitsupdate, das diese Schwachstelle behebt; auch Python-Pakete waren für CVE-2026-111497 anfällig. Die Brotli-Schwachstelle könnte noch mehr Sprachen und Dienstanwendungen betreffen, da die Bibliothek in nachgelagerten Systemen sehr weit verbreitet ist. Wie sich herausstellte, hatte OpenAI diese Schwachstelle bereits im Februar entdeckt.
Technische Details zu CVE-2026-111497
Die Schwachstelle liegt in DecodeBlockTypeAndLength(), die Blockwechsel verarbeitet, also die Stellen, an denen ein Brotli-Stream den verwendeten Huffman-Baum wechselt. In anfälligen Versionen gibt die Funktion einen einfachen booleschen Wert zurück, und BROTLI_FALSE kann entweder „Dieser Stream ist fehlerhaft“ oder „Ich benötige weitere Eingaben“ bedeuten. Aufrufer können diese beiden Fälle nicht voneinander unterscheiden, und auf dem Fast-Path verwirft der Decoder den Rückgabewert vollständig.
Ein künstlich erzeugter Stream kann einen einzigen Blocktyp deklarieren und dann die Länge dieses Blocks vollständig ausschöpfen, was einen Wechsel erzwingt, der nicht gelingen kann. Der Decoder meldet dann entweder, dass er für einen bereits vollständigen Stream weitere Eingaben benötigt, oder er setzt die Dekodierung mit dem bereits vorhandenen Blockzustand fort. Der zweite Fall führt zu einem Schreibvorgang außerhalb des zulässigen Bereichs.
Der Upstream-Fix, Google/Brotli-Commit 0ed4268, sorgt dafür, dass die Funktion einen Fehlercode zurückgibt, und fügt einen neuen Fehler hinzu: BROTLI_DECODER_ERROR_FORMAT_BLOCK_SWITCH (-17). Die Dekodierung wird nun sowohl auf dem sicheren als auch auf dem schnellen Pfad bei einem Formatfehler abgebrochen. OSM hat die Quelldistributionen von Brotli 1.2.0 und 1.2.1 verglichen und festgestellt, dass sich 1.2.1 lediglich durch die Versionserhöhung und die Änderungen am Decoder aus diesem Commit unterscheidet.
Brotli-Sicherheitslücken in Python-Bibliotheken (CVE-2026-111497)
Die Brotli-Sicherheitslücke hinter Node2Shell (CVE-2026-111497) betrifft Python. Zwei PyPI-Pakete, „Brotli“ und „brotlicffi“, enthalten denselben anfälligen Brotli-Decoder, den auch Node.js bündelt. Auf GitHub wurde ein offizieller Hinweis veröffentlicht. Brotli verzeichnet monatlich 82,8 Millionen Downloads.
Sie sind betroffen, wenn in einer von Ihnen ausgeführten Python-Umgebung Brotli 1.2.0 oder früher oder brotlicffi 1.2.0.x installiert ist. Gängige HTTP-Clients wie „requests“ und „httpx“ laden diese Pakete automatisch, sobald sie vorhanden sind. Einige Pakete installieren Brotli automatisch als Abhängigkeit, beispielsweise Scrapy, während andere eine explizite Angabe erfordern. Ein Angreifer kann den anfälligen Decoder erreichen, indem er eine bösartige Brotli-Antwort auf eine Anfrage Ihrer App sendet oder Ihrer App einen mit Brotli komprimierten Anfrage-Body übermittelt. Das bedeutet, dass eine App gefährdet sein kann, ohne dass Brotli irgendwo in ihrem eigenen Code importiert wurde. Da es sich um eine weit verbreitete transitive Abhängigkeit handelt, sollten Sie Ihre Systeme überprüfen.
Um das Problem zu beheben, führen Sie ein Upgrade auf die gepatchten Versionen durch:
- Brotli -> 1.2.1
- brotlicffi -> 1.2.1.0
In den Versionshinweisen zu beiden korrigierten Versionen wird die CVE nicht erwähnt. Stand 23. Oktober wird sie in den Sicherheitsdatenbanken noch keinem der beiden PyPI-Pakete zugeordnet, sodass pip-audit, Dependabot und Safety diese Versionen nicht als problematisch kennzeichnen.
Wer ist von der Sicherheitslücke CVE-2026-111497 in Python betroffen?
Sie sind betroffen, wenn in einer Ihrer Python-Umgebungen eines dieser Pakete installiert ist:
Ihr Code muss keines der beiden Pakete importieren. Diese HTTP-Clients geben „Accept-Encoding: br“ an und dekodieren Brotli-Antworten automatisch:
- urllib3 (und damit auch requests), wenn Brotli oder brotlicffi installiert ist
- httpx mit dem Brotli-Zusatzmodul
- aiohttp, wenn Brotli installiert ist
- Scrapy und alles, was auf den oben genannten Clients aufbaut
Die Angreiferdaten können auf zwei Wegen zum Decoder gelangen:
- Ausgehende Anfragen. Ihre App ruft eine Brotli-Antwort von einem Server ab, der von einem Angreifer kontrolliert wird, beispielsweise über einen Webhook, eine URL-Vorschau, einen Crawler oder die Funktion „Diese URL abrufen“.
- Eingehende Anfragen. Ihr Framework oder Ihre Middleware dekodiert einen Anfragetext, der mit „Content-Encoding: br“ gesendet wurde – dies entspricht in Python dem Fall „Express 5“ in Node.js.
So beheben Sie CVE-2026-111497 in Python
Die Lösung besteht in einer Paketaktualisierung und umfasst vier Schritte:
- Aktualisieren Sie das von Ihnen installierte Paket mit dem Befehl „pip install -U ‚Brotli>=1.2.1‘“ oder „pip install -U ‚brotlicffi>=1.2.1.0‘“. Wenn Sie mit Poetry, uv oder pip-tools eine Lockdatei verwenden, aktualisieren Sie die Einschränkung und generieren Sie die Lockdatei neu.
- Erstellen Sie Ihre „ container “-Images sowie alle Wheels, die eines dieser Pakete enthalten, neu. Ein Image, das auf einer anfälligen Version basiert, bleibt so lange anfällig, bis Sie es neu erstellen.
- Überprüfen Sie jede Umgebung, in der Sie Ihre Anwendungen ausführen, einschließlich Laptops, CI-Runner, Server und Container. Viele Projekte beziehen Brotli über einen zusätzlichen HTTP-Client ein; sehen Sie sich daher Ihren vollständig aufgelösten Abhängigkeitsbaum an.
- Verlassen Sie sich vorerst auf eine manuelle Überprüfung. pip-audit, Dependabot und Safety werden dies erst melden, wenn die Sicherheitsdatenbanken die CVE den PyPI-Paketen zugeordnet haben.
Falls Ihre Python-Brotli-Bindings nicht von PyPI, sondern aus einem Linux-Distributionspaket stammen, wird der Fix über Ihre Distribution bereitgestellt; überprüfen Sie daher bitte auch deren Sicherheitshinweis.
Was ist die Python-Brotli-Sicherheitslücke (CVE-2026-111497)?
Die Python-Brotli-Sicherheitslücke bezieht sich auf CVE-2026-111497, den als „Node2Shell“ bekannten Fehler im Brotli-Decoder, da sie Python-Pakete auf PyPI betrifft. Der CVE-Eintrag kombiniert CWE-252 (ungeprüfter Rückgabewert) mit CWE-787 (Schreiben außerhalb des zulässigen Bereichs).
Wie schwerwiegend ist die Sicherheitslücke CVE-2026-111497 für Python, und wird sie bereits ausgenutzt?
Der CVE-Eintrag weist der Schwachstelle einen CVSS 4.0-Wert von 9,2 zu, und Node.js stuft sie als „hochgradig schwerwiegend“ ein. OSM hat Brotli 1.2.0 und 1.2.1 mit AddressSanitizer kompiliert und einen manipulierten Datenstrom durch beide Versionen geleitet. Version 1.2.0 verarbeitete den gesamten, etwa 23 MB großen Datenstrom und meldete immer wieder, dass mehr Eingabe erforderlich sei – unabhängig davon, ob der Datenstrom in einem Stück oder in so kleinen Blöcken wie einem Byte eintraf. Version 1.2.1 lehnte den Datenstrom jedes Mal mit dem Fehler -17 ab.
OSM hat keine Speicherbeschädigungen oder Codeausführung in der Python-Erweiterung untersucht. Der Decoder-Code ist derselbe, den Forscher gegen einen unveränderten Node.js-Build 24.22.0 ausgenutzt haben, wie Imperva und andere berichteten. Für Node.js meldete The Hacker News, dass es bis zum 22. Oktober keine Exploits in freier Wildbahn gab.
Behandeln Sie es auf jeden Fall als dringlich. Bei dem Fehler handelt es sich um eine Schwachstelle in der Speichersicherheit einer Komponente, die nicht vertrauenswürdige Netzwerkeingaben verarbeitet, und die Behebung erfolgt durch eine routinemäßige Versionserhöhung. Dienste, die externe Server aufrufen oder komprimierte Anfragetexte akzeptieren, sollten vorrangig behandelt werden.
So überprüfen Sie, ob Ihre Python-Anwendung angreifbar ist
- Check installed versions with pip show Brotli brotlicffi in each environment, and with docker run --rm <image> pip show Brotli brotlicffi for each container image.
- Finden Sie heraus, wodurch die Pakete eingespielt werden. Führen Sie „pipdeptree -r -p Brotli“ aus, um zu sehen, welche Abhängigkeiten es benötigen, und durchsuchen Sie Ihre Lock-Dateien mit „grep -i brotli poetry.lock uv.lock requirements*.txt“.
- Listen Sie die ausgehenden HTTP-Aufrufe auf, die an Server gesendet werden, die nicht Ihrer Kontrolle unterliegen, sowie alle Endpunkte, die Content-Encoding: br-Anfragetexte dekodieren.
- Aktualisieren Sie zuerst die Dienste, die zu Schritt 3 passen, und anschließend die übrigen.
Wenn Sie den Fehler in Python reproduzieren, löst `brotli.decompress()` bei jedem Fehler einen generischen `brotli.error: decoder failed` aus, sodass Sie nicht erkennen können, welcher Fehlercode ausgelöst wurde. Ein `Decompressor()`, der schrittweise mit dem manipulierten Datenstrom gefüttert wird, wird in Version 1.2.0 niemals den Vorgang abschließen.
FAQ
In welchen Versionen von Python wurde die Sicherheitslücke CVE-2026-111497 behoben?
Brotli 1.2.1 und brotlicffi 1.2.1.0 sowie alle neueren Versionen.
Muss ich Brotli in meinen Code einbinden, damit dies Auswirkungen hat?
Ein installiertes Paket reicht aus. urllib3, requests, httpx und aiohttp verwenden automatisch Brotli oder brotlicffi, sofern eines davon vorhanden ist, und dekodieren Brotli-Antworten von jedem Server, den Ihre App aufruft.
Wird dies von „pip-audit“ oder „ Dependabot “ gemeldet?
Noch nicht. Stand 23. Oktober sind weder das CVE-Eintrag noch OSV noch die GitHub-Advisory-Datenbank für eines der beiden PyPI-Pakete aufgeführt. OSM reicht derzeit PYSEC-Einträge und eine PyPI-Paketzuordnung für den GitHub-Advisory ein, damit die entsprechenden Tools diese Informationen erfassen können.
Gibt es eine Umgehungslösung?
Durch die Deinstallation von Brotli und brotlicffi wird der anfällige Decoder entfernt, und HTTP-Clients greifen dann auf gzip und deflate zurück. Das Zurückweisen von mit Brotli verschlüsselten Anfragen am Edge verringert die Sicherheitsrisiken bei eingehenden Daten, schützt jedoch nicht vor Brotli-Antworten, die Ihre App abruft.