Kritická zranitelnost v dekompresoru Brotli, která se dotýká Node.JS, Bun, prohlížečů, HTTP klientů a dalších projektů

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

Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery 🔥 Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery | ProHoster