I biblioteket med den referenceimplementering af Brotli data komprimeringsafkoderen er der opdaget en sårbarhed (CVE-2026-111497, kodenavne Broccoli2Shell og HTTP2Shell), der fører til buffer overflow ved behandling af specielt formaterede komprimerede data. Ifølge Google kan sårbarheden udnyttes til fjernudførelse af kode ved angreb på projekter, der bruger den officielle implementering af Brotli-afkoderen. Blandt de berørte projekter er: Node.js, Bun, Envoy, Istio, web-browsere, proxyservere, HTTP-klienter, HTTP-servere, arkivprogrammer, UEFI-firmware, JPEG XL-visningsprogrammer, indhold dekodningsbiblioteker for Python, Ruby, Java, PHP og .NET samt tilknyttede afhængigheder.
Problemet blev opdaget af OpenAI i februar i år og blev blokeret i kodebasen for Brotli ved at forkaste ugyldige stream ved dekodning. Den 22. oktober blev der offentliggjort korrektioner i Brotli 1.0.10, 1.1.1 og 1.2.1, hvori det klart blev angivet, at sårbarheden var udbedret, og selve problemet var blevet løst. Samme dag blev der udviklet en prototype af et exploit, der tillod fjernudførelse af kode under laboratoriebetingelser ved brug af ikke-standardiserede builds (i standard builds opstod der en crashe). Senere dokumenterede Imperva et angreb på den officielle build af Node.js 24.22.0 i Linux-miljøet på ARM64-systemet.
Sårbarheden fører til skriving uden for bufferen på grund af forkert fejlbehandling under parsing af blokke i den komprimerede stream. Funktionen DecodeBlockTypeAndLength() returnerede i stedet for en fejlkode kun værdierne true og false, hvilket forhindrede den kaldende kode i at skelne mellem streamkorruption og en tilstand, der krævede overførsel af yderligere data til funktionen. Hvis der blev angivet en ugyldig type blokke af komprimerede data i strømmen, opfattede afkoderen det ikke som en fejl, men som en tilstand med utilstrækkelige data, der krævede yderligere læsning fra strømmene. Men da den tildelte buffer ikke var udregnet til de ekstra læste data, blev de skrevet ind i området uden for dens grænser, hvor den interne tilstand af afkoderen blev opbevaret.
Projekter, der er sårbare:
- Referencebiblioteket for Brotli, problemet optræder fra version 1.0.3 og er blevet løst i opdateringerne 1.0.10, 1.1.1 og 1.2.1. Sårbarheden påvirker applikationer og biblioteker, der bruger bibliotekerne libbrotlidec.
- JavaScript-platformen Node.js, problemet er løst i opdateringerne 26.12.1, 24.22.1 og 22.23.4. Applikationer, der bruger fetch()-metoden til at anmode om eksternt indhold, kan blive angrebet, da denne metode automatisk dekoder HTTP-svar med headeren "Content-Encoding: br". Sårbarheden udviser sig også ved direkte kald af metoderne zlib.brotliDecompress*(), createBrotliDecompress() og brotli.decompress() for at dekomprimere eksternt indhold eller ved modtagelse af HTTP-forespørgsler, der parses af bibliotekerne Express 5 og body-parser 2.x.
- Python-pakkerne brotli og brotlicffi (rettelse foreslået i version 1.2.1) samt de projekter, der bruger dem, herunder de populære biblioteker urllib3, aiohttp, httpx og Scrapy, som dekoder svar med headeren "Content-Encoding: br", når der henvendes til eksterne webressourcer.
- HTTP-servere, HTTP-proxys, HTTP-klienter og webbrowsere, der understøtter Brotli-komprimering ("Accept-Encoding: br"). I Apache httpd leveres mod_brotli (deaktiveret som standard). For nginx er der et tredjepartsmodul ngx_brotli (versionen af brotli i afhængighederne er opdateret til den nyeste). Problemet er allerede løst i tidligere opdateringer i Chrome/Chromium og Firefox.serveren Envoy sårbarhed er løst i udgivelserne 1.40.0, 1.39.3, 1.38.6, 1.37.8, 1.36.12.
- .NET runtime ved brug af metoderne BrotliDecoder, BrotliStream og HttpClient i applikationen. Sårbarheden er endnu ikke løst.
- PHP-udvidelsen brotli ved brug af funktionen brotli_uncompress(). Rettelsen er under forberedelse.
- Ruby-pakken brotli ved brug af metoden Brotli.inflate. Sårbarheden er endnu ikke løst.
- DB DuckDB ved import af komprimerede Parquet-filer. Rettelsen er under forberedelse.
- DB ClickHouse. Rettelsen er under forberedelse.
- DB YDB. Sårbarheden er endnu ikke løst.
- Apache Arrow ved import af komprimerede Parquet-filer. Rettelsen er under forberedelse.
- libjxl (Brotli bruges til komprimering af metadata i JPEG XL).
Rettelsen er under forberedelse. - Arkiveringsprogrammerne NanaZip, 7-Zip-zstd og p7zip ved udpakkebræ-filer. Sårbarheden er ikke løst.
- MuPDF. Sårbarheden er ikke løst.
- UEFI-firmware baseret på EDK II og UEFITool, komprimeret ved hjælp af Brotli. Rettelsen er under forberedelse — EDK II og UEFITool.
- JavaScript-platformen Bun. Sårbarheden er løst i version 1.4.4.
- Platforme til mikrotjenestehåndtering Istio. Sårbarheden er løst i versionerne 1.29.9, 1.30.6 og 1.31.2.
- curl og libcurl, sårbarheden optræder, hvis der er en sårbar version af libbrotlidec i afhængighederne.
- Parserne af Web Open Font (WOFF)-fontformatet, i hvilket der anvendes
Brotli. - Brotli4j, SumatraPDF, Ghostscript, CatBoost og YTsaurus. Sårbarheden er blevet rettet i en af opdateringerne.
Kilde: opennet.ru
