Brotli andmete kokkusurumise dekoodija standardraamatukogus on avastatud haavatavus (CVE-2026-111497, koodnimed Broccoli2Shell ja HTTP2Shell), mis viib puhverülekande ülevooluni spetsiaalselt vormindatud surutud andmete töötlemisel. Google'i andmetel võib haavatavust kasutada kaugtäidevõtmise ründega projektides, mis kasutavad Brotli dekoodija ametlikku teostust. Haavatavusega seotud projektide hulka kuuluvad: Node.js, Bun, Envoy, Istio, veebibrauserid, vahe serverid, HTTP-kliendid, HTTP-serverid, arhivaarid, UEFI-firmavärskendused, JPEG XL vaatlejate, Python, Ruby, Java, PHP ja .NET sisuga dekooderite raamatukogud ja nendega seotud sõltuvused.
Probleem avastati OpenAI poolt käesoleva aasta veebruaris ja blokeeriti Brotli koodibaasis vigaste voogude kõrvaldamisega dekoodimise käigus. 22. oktoobril avaldati korrigeerimisväljaanded Brotli 1.0.10, 1.1.1 ja 1.2.1, kus oli selgelt märgitud haavatavuse kõrvaldamine ja probleemi olemus parandatud. Sel samal päeval luoti prototüüp, mis võimaldas laboritingimustes kaugelt koodi täide viia, kasutades mitte-standardseid kogusid (standardsetes kogudes toimus süsteemihäire). Hiljem tuvastas Imperva rünnaku Node.js 24.22.0 standardkogude vastu Linux’i keskkonnas ARM64 süsteemil.
Haavatavus viib puhverpiiridest väljapoole kirjutamiseni vigase vigade käsitlemise tõttu surutud voogude plokkide analüüsi käigus. Funktsioon DecodeBlockTypeAndLength() tagastas vea koodi asemel ainult true ja false väärtused, mis ei võimaldanud kutse koodil voogude rikkumist eristada seisundist, mis nõudis täiendavate andmete ülekandmist funktsiooni. Kui surutud andmeploki voos oli näidatud vale tüüp, ei käsitlenud dekoodija seda kui viga, vaid andis mõista, et voos on andmeid liiga vähe, mis nõudis täiendavat lugemist. Kuna eraldatud puhver ei olnud ette nähtud lisalugemise andmete jaoks, kirjutati need välja puhvri piiridest, kuhu salvestati dekoodija siseserver.
Haavatavuse all olevad projektid:
- Brotli standardraamatukogu, probleem ilmneb alates versioonist 1.0.3 ja parandatakse versioonides 1.0.10, 1.1.1 ja 1.2.1. Haavatavus mõjutab rakendusi ja raamatukogusid, mis kasutavad libbrotlidec raamatukogu.
- Node.js, JavaScript platvorm, probleem on lahendatud versioonides 26.12.1, 24.22.1 ja 22.23.4. Rünnaku all võivad olla rakendused, mis kasutavad välist sisu pärimise meetodit fetch(), mis dekodeerib automaatselt HTTP vastuseid pealkirjaga "Content-Encoding: br". Haavatavus ilmneb ka siis, kui kutsuda otse üles funktsioone zlib.brotliDecompress*(), createBrotliDecompress() ja brotli.decompress() välise sisu dekomprimeerimiseks või HTTP-päringute vastuvõtmisel, kasutades Express 5 ja body-parser 2.x teeke.
- Python pakid brotli ja brotlicffi (parandus on ettepanekus versioonis 1.2.1) ja neid kasutavad projektid, sealhulgas populaarsed raamatukogud urllib3, aiohttp, httpx ja Scrapy, mis dekodeerivad vastuseid pealkirjaga "Content-Encoding: br" väliste veebiallikate suhtes.
- HTTP-serverid, HTTP-proksid, HTTP-klientide ja veebibrauserid, mis toetavad Brotli kokkusurumist ("Accept-Encoding: br"). Apache httpd tarnitakse koos mod_brotli (vaikimisi keelatud). Nginx'i jaoks on saadaval kolmanda osapoole moodul ngx_brotli (brotli versioon sõltuvustes on tõstetud актуалsetele). Chrome'i/Chromium'i ja Firefoxi probleem on juba lahendatud ühes viimastes versioonides. Proksis,serveris Envoy, haavatavus on lahendatud väljaannetes 1.40.0, 1.39.3, 1.38.6, 1.37.8, 1.36.12.
- .NET käitusaeg, kui kasutatakse rakenduses meetodeid BrotliDecoder, BrotliStream ja HttpClient. Haavatavus pole veel lahendatud.
- PHP laiendus brotli funktsiooni brotli_uncompress() kasutamisel. Parandus on ettepanekus.
- Ruby pakett brotli meetodi Brotli.inflate kasutamisel. Haavatavus pole veel lahendatud.
- DuckDB andmebaas, kui imporditakse kokkusurutud Parquet-faile. Parandus on ettepanekus.
- ClickHouse andmebaas. Parandus on ettepanekus.
- YDB andmebaas. Haavatavus pole veel lahendatud.
- Apache Arrow, kui imporditakse kokkusurutud Parquet-faile. Parandus on ettepanekus.
- libjxl (Brotli kasutatakse JPEG XL metadatade kokkusurumiseks).
Parandus on ettepanekus. - Arhiväärid NanaZip, 7-Zip-zstd ja p7zip br-failide dekomprimeerimisel. Haavatavus pole lahendatud.
- MuPDF. Haavatavus pole lahendatud.
- EDK II ja UEFITool põhinevad UEFI-firmware'id, mis on kokkusurutud Brotli abil. Parandus on ettepanekus — EDK II ja UEFITool.
- Bun, JavaScript platvorm. Haavatavus on lahendatud versioonis 1.4.4.
- Mikroteenuste haldamise platvorm Istio. Haavatavus on lahendatud versioonides 1.29.9, 1.30.6 ja 1.31.2.
- curl ja libcurl, haavatavus ilmneb, kui sõltuvustes on haavatav versioon libbrotlidec.
- Web Open Font (WOFF) fondi formaadi parserid, milles kasutatakse
Brotli. - Brotli4j, SumatraPDF, Ghostscript, CatBoost ja YTsaurus. Haavatavus on kõrvaldatud ühe värskenduse käigus.
Allikas: opennet.ru
