V knižnici s referenčnou implementáciou dekodéra pre formát kompresie dát Brotli bola zistená zraniteľnosť (CVE-2026-111497, kódové mená Broccoli2Shell a HTTP2Shell), ktorá vedie k pretečeniu zásobníka pri spracovaní špeciálne upravených komprimovaných dát. Podľa Google môže byť zraniteľnosť využitá na vzdialené vykonávanie kódu pri útoku na projekty, ktoré používajú oficiálnu implementáciu dekodéra Brotli. Medzi ovplyvnené projekty patrí: Node.js, Bun, Envoy, Istio, webové prehliadače, proxy servery, HTTP klienti, HTTP servery, archívovacie nástroje, proxy servery, UEFI firmvéry, prehliadače JPEG XL, dekodujúce knižnice pre Python, Ruby, Java, PHP a .NET a súvisiace závislosti.
Problém bol identifikovaný spoločnosťou OpenAI vo februári tohto roku a bol blokovaný v kódovej báze Brotli prostredníctvom odmietania nesprávnych toku pri dekódovaní. 22. októbra boli uverejnené opravné verzie Brotli 1.0.10, 1.1.1 a 1.2.1, v ktorých bolo explicitne uvedené o odstránení zraniteľnosti a vyriešení podstaty problému. V ten istý deň bol vytvorený prototyp exploit, ktorý umožnil vzdialene vykonať kód v laboratórnych podmienkach pri použití neštandardných zostáv (v štandardných zostavách došlo k havárii). Následne spoločnosť Imperva zaznamenala útok na štandardné zostavy Node.js 24.22.0 v prostredí Linux na systéme ARM64.
Zraniteľnosť vedie k zápisu mimo zásobník v dôsledku nesprávneho spracovania chýb počas rozlúštenia blokov v komprimovanom prúde. Funkcia DecodeBlockTypeAndLength() namiesto kódu chyby vracala iba hodnoty true a false, čo neumožňovalo volajúcemu kódu odlíšiť poškodenie prúdu od stavu, ktorý vyžaduje prenos ďalších údajov do funkcie. V prípade, že prúd obsahuje nesprávny typ bloku komprimovaných dát, dekodér ho vnímal nielen ako chybu, ale aj ako stav nedostatku údajov, ktorý vyžaduje ďalšie čítanie z prúdu. Keďže vyhradený zásobník však nebol vypočítaný na dodatočne prečítané údaje, boli zapísané do oblasti za jeho hranicami, kde sa uchovával vnútorný stav dekodéra.
Projekty postihnuté zraniteľnosťou:
- Referenčná knižnica brotli, problém sa prejavuje od vydania 1.0.3 a bol odstránený v aktualizáciách 1.0.10, 1.1.1 a 1.2.1. Zraniteľnosť sa týka aplikácií a knižníc používajúcich knižnicu libbrotlidec.
- Problematika platformy Node.js v jazyku JavaScript bola odstránená vo verziách 26.12.1, 24.22.1 a 22.23.4. Napadnuté môžu byť aplikácie, ktoré používajú metódu fetch() na dopytovanie externého obsahu, ktorá automaticky dekóduje HTTP odpovede s hlavičkou „Content-Encoding: br“. Zraniteľnosť sa môže prejaviť aj pri priamom volaní metód zlib.brotliDecompress*(), createBrotliDecompress() a brotli.decompress() na rozbalenie externého obsahu alebo pri príjme HTTP dopytov pomocou knižníc Express 5 a body-parser 2.x.
- Python balíky brotli a brotlicffi (oprava navrhnutá vo verzii 1.2.1) a projekty, ktoré ich používajú, medzi ktorými sú populárne knižnice urllib3, aiohttp, httpx a Scrapy, ktoré dekódujú odpovede s hlavičkou „Content-Encoding: br“ pri prístupe k externým webovým zdrojom.
- HTTP servery, HTTP proxys, HTTP klienti a webové prehliadače, ktoré podporujú kompresiu Brotli („Accept-Encoding: br“). V Apache httpd je dodávaný mod_brotli (predvolene vypnutý). Pre nginx je k dispozícii externý modul ngx_brotli (verzia brotli v závislostiach bola aktualizovaná na aktuálnu verziu). Problém bol už vyriešený v predchádzajúcich aktualizáciách pre Chrome/Chromium a Firefox. Proxys-serveri Zraniteľnosť Envoy bola odstránená v verziách 1.40.0, 1.39.3, 1.38.6, 1.37.8, 1.36.12.
- .NET runtime pri používaní metód BrotliDecoder, BrotliStream a HttpClient. Zraniteľnosť zatiaľ nebola odstránená.
- PHP rozšírenie brotli pri použití funkcie brotli_uncompress(). Oprava je v procese prípravy.
- Ruby balík brotli pri použití metódy Brotli.inflate. Zraniteľnosť zatiaľ nebola odstránená.
- Systémy DB DuckDB pri importovaní komprimovaných Parquet súborov. Oprava je v procese prípravy.
- Systémy DB ClickHouse. Oprava je v procese prípravy.
- Systémy DB YDB. Zraniteľnosť zatiaľ nebola odstránená.
- Apache Arrow pri importovaní komprimovaných Parquet súborov. Oprava je v procese prípravy.
- libjxl (pri kompresii metadát v JPEG XL sa používa Brotli).
Oprava je v procese prípravy. - Archivátory NanaZip, 7-Zip-zstd a p7zip pri rozbaľovaní br súborov. Zraniteľnosť nebola odstránená.
- MuPDF. Zraniteľnosť nebola odstránená.
- UEFI firmware založené na EDK II a UEFITool, komprimované pomocou Brotli. Oprava je v procese prípravy — EDK II a UEFITool.
- Platforma JavaScript Bun. Zraniteľnosť bola odstránená vo verzii 1.4.4.
- Platforma na spravovanie mikroservisov Istio. Zraniteľnosť bola odstránená vo verziách 1.29.9, 1.30.6 a 1.31.2.
- curl a libcurl, zraniteľnosť sa prejavuje v prípade, že v závislostiach je zraniteľná verzia libbrotlidec.
- Parsers formátu písma Web Open Font (WOFF), v ktorom sa používa
Brotli. - Brotli4j, SumatraPDF, Ghostscript, CatBoost a YTsaurus. Zraniteľnosť bola odstránená v jednom z aktualizácií.
Zdroj: opennet.ru
