V referenční knihovně s implementací dekodéru formátu komprese dat Brotli byla zjištěna zranitelnost (CVE-2026-111497, kódová jména Broccoli2Shell a HTTP2Shell), vedoucí k přetečení vyrovnávací paměti při zpracování speciálně formátovaných komprimovaných dat. Podle údajů od Google může být zranitelnost využita k vzdálenému spuštění kódu při útoku na projekty, které používají oficiální implementaci dekodéru Brotli. Mezi zranitelnými projekty jsou: Node.js, Bun, Envoy, Istio, webové prohlížeče, proxy servery, HTTP klienti, HTTP servery, archivační programy, proxy servery, UEFI firmware, prohlížeče JPEG XL, dekódovací knihovny pro Python, Ruby, Java, PHP a .NET a související závislosti.
Problém byl identifikován společností OpenAI v únoru tohoto roku a byl zablokován v kódu Brotli prostřednictvím odmítnutí neplatných toků při dekódování. 22. října byly zveřejněny opravy Brotli 1.0.10, 1.1.1 a 1.2.1, ve kterých byla jasně uvedena oprava zranitelnosti a vyřešen základní problém. Téhož dne byl vytvořen prototyp exploitu, který umožnil vzdálené spuštění kódu v laboratorních podmínkách, při použití nestandardních sestavení (ve standardních sestaveních došlo k havárii). Později společnost Imperva zaznamenala útok na standardní sestavení Node.js 24.22.0 v linuxovém prostředí na systému ARM64.
Zranitelnost vede k zápisu za hranice vyrovnávací paměti kvůli nesprávnému zpracování chyb při analýze bloků v komprimovaném toku. Funkce DecodeBlockTypeAndLength() místo chybového kódu vracela pouze hodnoty true a false, což neumožňovalo volajícímu kódu rozlišit poškození toku od stavu, který vyžadoval předání dalších dat do funkce. Pokud byl v toku uveden neplatný typ bloku komprimovaných dat, dekodér tento stav nevnímal jako chybu, ale jako stav nedostatku dat, který vyžadoval další čtení z toku. Protože však vyhrazená vyrovnávací paměť nebyla určena pro dodatečně přečtená data, byly zapsány do oblasti mimo její hranice, kde bylo uloženo vnitřní stavu dekodéru.
Projekty postižené zranitelností:
- Referenční knihovna brotli, problém se projevuje od vydání 1.0.3 a byl odstraněn v aktualizacích 1.0.10, 1.1.1 a 1.2.1. Zranitelnost se týká aplikací a knihoven využívajících knihovnu libbrotlidec.
- JavaScript platforma Node.js, problému vyřešily aktualizace 26.12.1, 24.22.1 a 22.23.4. Mohou být napadena aplikace, které pro získání externího obsahu používají metodu fetch(), jež automaticky dekóduje HTTP odpovědi se záhlavím „Content-Encoding: br“. Zranitelnost se také projevuje při přímém volání metod zlib.brotliDecompress*(), createBrotliDecompress() a brotli.decompress() pro rozbalení externího obsahu nebo při přijímání HTTP požadavků s analýzou přes knihovny Express 5 a body-parser 2.x.
- Python balíčky brotli a brotlicffi (oprava byla navržena ve verzi 1.2.1) a projekty je používající, mezi nimiž jsou populární knihovny urllib3, aiohttp, httpx a Scrapy, které dekódují odpovědi se záhlavím „Content-Encoding: br“ při přístupu k externím webovým zdrojům.
- HTTP servery, HTTP proxy, HTTP klienti a webové prohlížeče, které podporují Brotli kompresi („Accept-Encoding: br“). V Apache httpd je dodáván mod_brotli (ve výchozím nastavení vypnutý). Pro nginx je k dispozici externí modul ngx_brotli (verze brotli v závislostech byla zvýšena na aktuální). Problém byl již vyřešen v dřívějších aktualizacích Chrome/Chromium a Firefox.serveru Envoy byla zranitelnost vyřešena ve verzích 1.40.0, 1.39.3, 1.38.6, 1.37.8, 1.36.12.
- .NET runtime při použití metod BrotliDecoder, BrotliStream a HttpClient. Zranitelnost zatím není vyřešena.
- PHP rozšíření brotli při použití funkce brotli_uncompress(). Oprava je v procesu přípravy.
- Ruby balíček brotli při použití metody Brotli.inflate. Zranitelnost zatím není vyřešena.
- DB DuckDB při importu komprimovaných Parquet souborů. Oprava je v procesu přípravy.
- DB ClickHouse. Oprava je v procesu přípravy.
- DB YDB. Zranitelnost zatím není vyřešena.
- Apache Arrow při importu komprimovaných Parquet souborů. Oprava je v procesu přípravy.
- libjxl (při kompresi metadat v JPEG XL se používá Brotli).
Oprava je v procesu přípravy. - Archivátory NanaZip, 7-Zip-zstd a p7zip při rozbalování br-souborů. Zranitelnost nebyla vyřešena.
- MuPDF. Zranitelnost nebyla vyřešena.
- UEFI firmware založené na EDK II a UEFITool, komprimované pomocí Brotli. Oprava je v procesu přípravy — EDK II a UEFITool.
- JavaScript platforma Bun. Zranitelnost byla vyřešena ve verzi 1.4.4.
- Platforma pro správu mikroslužeb Istio. Zranitelnost byla vyřešena ve verzích 1.29.9, 1.30.6 a 1.31.2.
- curl a libcurl, zranitelnost se projevuje při přítomnosti zranitelné verze libbrotlidec v závislostech.
- Parsers formátu písem Web Open Font (WOFF), ve kterém se používá
Brotli. - Brotli4j, SumatraPDF, Ghostscript, CatBoost a YTsaurus. Zranitelnost byla odstraněna v jedné z aktualizací.
Zdroj: opennet.ru
