In der Referenzbibliothek für den Decoder des Datenkompressionsformats Brotli wurde eine Schwachstelle (CVE-2026-111497, Codenamen Broccoli2Shell und HTTP2Shell) entdeckt, die zu einem Pufferüberlauf bei der Verarbeitung eigens gestalteter komprimierter Daten führen kann. Laut Google kann diese Schwachstelle zum Remote-Codeausführung bei Angriffen auf Projekte verwendet werden, die die offizielle Implementierung des Brotli-Decoders nutzen. Betroffene Projekte sind unter anderem: Node.js, Bun, Envoy, Istio, Webbrowser, Proxys, HTTP-Clients, HTTP-Server, Archivierungssoftware, UEFI-Firmware, JPEG XL-Viewer, Content-Decodierbibliotheken für Python, Ruby, Java, PHP und .NET sowie deren Abhängigkeiten.
Das Problem wurde von OpenAI im Februar dieses Jahres entdeckt und im Quellcode von Brotli durch das Verwerfen ungültiger Streams beim Dekodieren behoben. Am 22. Oktober wurden die Korrekturausgaben von Brotli 1.0.10, 1.1.1 und 1.2.1 veröffentlicht, in denen die Behebung der Schwachstelle explizit angegeben wurde und die eigentliche Problematik behoben wurde. An diesem Tag wurde auch ein Exploit-Prototyp erstellt, der es ermöglichen sollte, unter Laborbedingungen Remote-Code auszuführen, wenn nicht standardmäßige Builds verwendet wurden (bei standardmäßigen Builds kam es zu einem Absturz). Später erfasste das Unternehmen Imperva einen Angriff auf die Standardbuilds von Node.js 24.22.0 in einer Linux-Umgebung auf einem ARM64-System.
Die Schwachstelle führt zu einer Pufferüberlauf durch fehlerhafte Fehlerbehandlung beim Parsen von Blöcken im komprimierten Stream. Die Funktion DecodeBlockTypeAndLength() gab anstelle eines Fehlercodes nur die Werte true und false zurück, was es dem aufrufenden Code unmöglich machte, einen beschädigten Stream von einem Zustand zu unterscheiden, der zusätzliche Daten an die Funktion übergeben erforderten. Wenn im Stream ein ungültiger Typ für einen komprimierten Datenblock angegeben wurde, interpretierte der Decoder dies nicht als Fehler, sondern als Datenmangel, der zusätzliches Lesen aus dem Stream erforderte. Da der reservierte Puffer jedoch nicht für die zusätzlich gelesenen Daten ausgelegt war, wurden diese außerhalb seines Bereichs gespeichert, wo sich der interne Zustand des Decoders befand.
Von der Schwachstelle betroffene Projekte:
- Die Referenzbibliothek Brotli, das Problem trat seit Version 1.0.3 auf und wurde in den Updates 1.0.10, 1.1.1 und 1.2.1 behoben. Die Schwachstelle betrifft Anwendungen und Bibliotheken, die die libbrotlidec-Bibliothek verwenden.
- Die JavaScript-Plattform Node.js hat die Probleme mit den Updates 26.12.1, 24.22.1 und 22.23.4 behoben. Angreifbar sind Anwendungen, die die fetch()-Methode zum Abrufen von externen Inhalten verwenden, die automatisch HTTP-Antworten mit dem Header „Content-Encoding: br“ decodiert. Die Schwachstelle tritt auch beim direkten Aufruf von zlib.brotliDecompress*(), createBrotliDecompress() und brotli.decompress() zum Entpacken von externen Inhalten oder beim Empfangen von HTTP-Anfragen, die über die Bibliotheken Express 5 und body-parser 2.x analysiert werden, auf.
- Die Python-Pakete brotli und brotlicffi (eine Korrektur wurde in Version 1.2.1 vorgeschlagen) sowie die Projekte, die diese verwenden, darunter beliebte Bibliotheken wie urllib3, aiohttp, httpx und Scrapy, die Antworten mit dem Header „Content-Encoding: br“ beim Zugriff auf externe Webressourcen decodieren.
- HTTP-Server, HTTP-Proxy, HTTP-Clients und Webbrowser, die Brotli-Kompression („Accept-Encoding: br“) unterstützen. In Apache httpd wird mod_brotli mitgeliefert (standardmäßig deaktiviert). Für nginx ist ein drittes Modul, ngx_brotli, verfügbar (die Version von brotli in den Abhängigkeiten wurde auf die aktuelle Version angehoben). In Chrome/Chromium und Firefox wurde das Problem bereits in einem der vorherigen Updates behoben.Server Die Schwachstelle in Envoy wurde in den Versionen 1.40.0, 1.39.3, 1.38.6, 1.37.8, 1.36.12 behoben.
- .NET Runtime bei der Verwendung der Methoden BrotliDecoder, BrotliStream und HttpClient im Anwendungscode. Die Schwachstelle wurde jedoch bisher nicht behoben.
- PHP-Erweiterung brotli bei der Verwendung der Funktion brotli_uncompress(). Der Fix ist in Vorbereitung.
- Ruby-Paket brotli bei der Verwendung der Methode Brotli.inflate. Die Schwachstelle wurde bisher nicht behoben.
- Datenbank DuckDB beim Import von komprimierten Parquet-Dateien. Der Fix ist in Vorbereitung.
- Datenbank ClickHouse. Der Fix ist in Vorbereitung.
- Datenbank YDB. Die Schwachstelle wurde bisher nicht behoben.
- Apache Arrow beim Import von komprimierten Parquet-Dateien. Der Fix ist in Vorbereitung.
- libjxl (bei der Komprimierung von Metadaten in JPEG XL wird Brotli verwendet).
Der Fix ist in Vorbereitung. - Die Archivierungsprogramme NanaZip, 7-Zip-zstd und p7zip beim Entpacken von br-Dateien. Die Schwachstelle ist nicht behoben.
- MuPDF. Die Schwachstelle ist nicht behoben.
- UEFI-Firmware auf Basis von EDK II und UEFITool, die mit Brotli komprimiert sind. Der Fix ist in Vorbereitung — EDK II und UEFITool.
- Die JavaScript-Plattform Bun. Die Schwachstelle wurde in Version 1.4.4 behoben.
- Plattform zur Verwaltung von Mikrodiensten Istio. Die Schwachstelle wurde in den Versionen 1.29.9, 1.30.6 und 1.31.2 behoben.
- curl und libcurl, die Schwachstelle tritt auf, wenn eine verwundbare Version von libbrotlidec in den Abhängigkeiten vorhanden ist.
- Parser für das Schriftartenformat Web Open Font (WOFF), in dem
Brotli verwendet wird. - Brotli4j, SumatraPDF, Ghostscript, CatBoost und YTsaurus. Die Schwachstelle wurde in einem der Updates behoben.
Quelle: opennet.ru
