Sicherheit & Datenschutz

Kritische Schwachstelle im Brotli-Decoder betrifft Node.js, Python und HTTP-Dienste

CVE-2026-111497 ermöglicht Remote Code Execution über manipulierte Brotli-Streams in wichtigen Laufzeitumgebungen. Patches sind für Node.js, Python, Bun und Envoy verfügbar.

Illustration einer Datenkompressions-Schwachstelle, die Speicher leckt
Für diesen Artikel generierte Illustration

Automatisch aus dem englischen Original übersetzt.

Eine kritische Sicherheitslücke in der Google-Brotli-Kompressionsbibliothek, die als CVE-2026-111497 verfolgt wird, setzt wichtige Software-Laufzeitumgebungen dem Risiko von Remote Code Execution aus. Die am 23. Oktober 2026 veröffentlichte Schwachstelle betrifft Node.js, Python, Bun sowie verschiedene Infrastrukturkomponenten wie Envoy und Istio. Entwickler müssen betroffene Bibliotheken sofort patchen oder die Brotli-Decodierung deaktivieren, um eine potenzielle Kompromittierung des Servers zu verhindern.

Was passiert ist

Die Sicherheitslücke, die bei ihrer Offenlegung durch Node.js am 22. Oktober zunächst als "Node2Shell" bezeichnet wurde, stellte sich als breiter wirksam im gesamten Software-Ökosystem heraus. Sie geht auf einen Fehler in der Speichersicherheit des Brotli-Decoders zurück, der es einem nicht authentifizierten Angreifer ermöglicht, den Prozessspeicher zu korrumpieren. Durch das Senden eines speziell präparierten komprimierten Datenstroms kann ein Angreifer einen Dienst zum Absturz bringen, sensible Informationen abfließen lassen oder beliebigen Code ausführen. Das Common Vulnerability Scoring System (CVSS) v4.0 bewertet dieses Problem mit 9,2 Punkten und stuft es somit als kritisch ein.

OpenAI gab bekannt, dass man die Ursache bereits im Februar 2026 entdeckt habe. Obwohl der zugrunde liegende Bug damals im Brotli-Quellcode behoben wurde, wurde er nicht als Sicherheitslücke erkannt, weshalb bis jetzt kein gepatchtes Release veröffentlicht wurde. Diese Verzögerung bedeutet, dass jedes Projekt, das seine eigene Kopie der Brotli-Bibliothek bündelt, monatelang exponiert blieb. Seit dem 23. Oktober wurden Patches für libbrotli, Python, C++, Node.js, Bun und Envoy veröffentlicht; weitere Updates für andere abhängige Anwendungen werden erwartet.

Wie sie funktioniert

Brotli ist ein verlustfreier Kompressionsalgorithmus, der häufig verwendet wird, um die Größe von Webinhalten wie HTML, CSS und JavaScript während der HTTP-Übertragung zu reduzieren. Die Schwachstelle befindet sich in der Funktion DecodeBlockTypeAndLength() innerhalb des Decoders. Diese Funktion verarbeitet Blockwechsel, die auftreten, wenn ein Datenstrom den Huffman-Baum ändert, den er zur Dekompression verwendet. In verwundbaren Versionen (1.0.3 bis 1.2.0) gibt diese Funktion einen einfachen booleschen Wert zurück, der nicht zwischen einem fehlerhaften Stream und einer Anfrage nach weiteren Eingabedaten unterscheidet.

Aufrufer auf dem schnellen Dekodierungspfad ignorieren diesen Rückgabewert, was zu einem Zustand führt, in dem der Decoder die Verarbeitung fortsetzt, obwohl er hätte stoppen sollen. Ein Angreifer kann dies ausnutzen, indem er einen Stream so konstruiert, dass die Länge eines Blocks erschöpft wird und ein ungültiger Wechsel erzwungen wird. Der Decoder führt dann einen Out-of-Bounds-Schreibvorgang durch, der einen kleinen Arbeitspuffer überläuft und angrenzenden Speicher beschädigt. Der Fix führt einen spezifischen Fehlercode BROTLI_DECODER_ERROR_FORMAT_BLOCK_SWITCH ein, der sicherstellt, dass der Decoder bei solchen Formatfehlern sofort anhält.

Wichtige Details

  • Betroffene Versionen: Brotli 1.0.3 bis 1.2.0 auf allen Plattformen.
  • Behobene Versionen: Brotli 1.2.1, 1.1.1 und 1.0.10; brotlicffi 1.2.1.0.
  • Laufzeit-Patches: Node.js 22.23.4, 24.22.1, 26.12.1; Bun 1.4.4; Envoy 1.40.0, 1.39.3, 1.38.6, 1.37.8.
  • Auswirkung auf Python: Die Pakete Brotli und brotlicffi sind verwundbar, wenn Version 1.2.0 oder älter installiert ist.
  • Erkennungslücke: Advisory-Datenbanken ordnen die CVE derzeit noch nicht PyPI-Paketen zu, sodass Tools wie Dependabot sie möglicherweise nicht automatisch kennzeichnen.
  • Angriffsvektor: Fernzugriff ohne Authentifizierung über präparierte HTTP-Anfragen oder -Antworten, die böswillige Brotli-Daten enthalten.

Warum das wichtig ist

Diese Schwachstelle verdeutlicht die Risiken, die mit transitiven Abhängigkeiten in modernen Software-Lieferketten verbunden sind. Viele Entwickler importieren Brotli nicht explizit in ihren Code, doch gängige HTTP-Clients wie requests, httpx und urllib3 in Python oder das eingebaute fetch in Node.js laden es automatisch, wenn es vorhanden ist. Dies bedeutet, dass eine Anwendung verwundbar sein kann, ohne dass im Quellcode direkt auf die Bibliothek verwiesen wird. Die automatische Natur dieser Abhängigkeiten macht es schwierig, das Expositionsrisiko ohne tiefgehende Inspektion des Abhängigkeitsbaums einzuschätzen.

Für Teams, die vernetzte Dienste entwickeln, ist die Auswirkung schwerwiegend, da die Angriffsfläche sowohl eingehenden als auch ausgehenden Traffic umfasst. Ein böswilliger Client kann einen Server angreifen, indem er komprimierte Request-Bodies sendet, während ein böswilliger Server einen Client angreifen kann, indem er komprimierte Antworten zurückgibt. Dieses bidirektionale Bedrohungsmodell erfordert ein umfassendes Patching aller Dienste, die HTTP-Traffic verarbeiten, einschließlich interner Microservices und externer APIs. Die Verzögerung bei der Erkennung der sicherheitsrelevanten Implikationen des Februar-Fixes unterstreicht zudem die Notwendigkeit einer strengen Überwachung von Änderungen an Upstream-Bibliotheken.

Was Sie tun können

  • Laufzeiten aktualisieren: Aktualisieren Sie Node.js auf 22.23.4, 24.22.1 oder 26.12.1 und Bun auf 1.4.4 oder höher.
  • Python-Pakete aktualisieren: Führen Sie pip install -U "Brotli>=1.2.1" und pip install -U "brotlicffi>=1.2.1.0" in allen Umgebungen aus.
  • Container neu bauen: Generieren Sie Lockfiles neu und bauen Sie Container-Images neu, um sicherzustellen, dass gepatchte Versionen in den bereitgestellten Artefakten enthalten sind.
  • Decodierung deaktivieren: Wenn ein sofortiges Patching nicht möglich ist, deaktivieren Sie die Brotli-Decodierung, indem Sie br aus den Accept-Encoding-Headern entfernen und eingehende Content-Encoding: br-Anfragen auf Proxy-Ebene ablehnen.
  • Abhängigkeiten überprüfen: Verwenden Sie pipdeptree oder ähnliche Tools, um zu identifizieren, welche Bibliotheken Brotli als transitive Abhängigkeit ziehen.
  • Advisories überwachen: Prüfen Sie herstellerspezifische Sicherheitshinweise für Betriebssystempakete, da diese Fixes möglicherweise backportieren, ohne die Upstream-Versionsnummer zu ändern.
  • #security
  • #vulnerability
  • #nodejs
  • #python
  • #brotli

Tools aus dem Bytechap-Shop

Weiterlesen

Alle Artikel