Brotli-tiedonpakkausdekooderin referenssitoteutuksen sisältävästä kirjastosta on tunnistettu haavoittuvuus (CVE-2026-111497, koodinimet Broccoli2Shell ja HTTP2Shell). Tämä haavoittuvuus johtaa puskurin ylivuotoon käsiteltäessä erityisesti muodostettua pakattua dataa. Googlen mukaan tätä haavoittuvuutta voidaan käyttää koodin etäsuorittamiseen hyökättäessä projekteihin, jotka käyttävät virallista Brotli-dekooderin toteutusta. Haavoittuvuuden kohteena olevia projekteja ovat Node.js, Bun, Envoy, Istio, verkkoselaimet, välityspalvelimet, HTTP-asiakasohjelmat, arkistoijat, UEFI-laiteohjelmistot, JPEG XL -katseluohjelmat, sisällöndekoodauskirjastot Pythonin, Rubyn, Java-, PHP- ja .NET-kielille sekä niihin liittyvät riippuvuudet.
OpenAI löysi ongelman tämän vuoden helmikuussa ja esti sen Brotli-koodikannassa hylkäämällä virheelliset striimit dekoodauksen aikana. Lokakuun 22. päivänä julkaistiin Brotli 1.0.10:n, 1.1.1:n ja 1.2.1:n korjauspäivitykset, joissa nimenomaisesti ilmoitettiin korjauksesta ja käsiteltiin taustalla olevaa ongelmaa. Samana päivänä luotiin prototyypin hyödyntämistyökalu, joka mahdollisti koodin etäsuorittamisen laboratorio-olosuhteissa käyttämällä epästandardeja koontiversioita (standardikoontiversiot kaatuisivat). Imperva havaitsi myöhemmin hyökkäyksen Node.js 24.22.0 -standardikoontiversioita vastaan. Linux- ympäristö ARM64-järjestelmässä.
Haavoittuvuus aiheuttaa rajojen ulkopuolisen puskurikirjoituksen pakatun datavirran lohkojäsennyksen aikana tapahtuneen virheellisen virheenkäsittelyn vuoksi. DecodeBlockTypeAndLength()-funktio palautti vain true- ja false-arvoja virhekoodin sijaan, mikä esti kutsujaa erottamasta datavirran vioittumista ehdosta, joka vaati lisätietojen välittämistä funktiolle. Jos datavirrassa oli määritetty virheellinen pakatun datalohkon tyyppi, dekooderi ei tulkinnut sitä virheeksi, vaan datan puuttumiseksi, joka vaati lisätietojen lukemista datavirrasta. Koska varattua puskuria ei kuitenkaan ollut suunniteltu majoittamaan lisätietojen lukemista, tiedot kirjoitettiin puskurin ulkopuolelle, joka tallensi dekooderin sisäisen tilan.
Vaikuttavat projektit:
- Brotli-viitekirjasto, ongelma, joka on ollut olemassa julkaisusta 1.0.3 lähtien ja joka korjattiin päivityksissä 1.0.10, 1.1.1 ja 1.2.1, vaikuttaa libbrotlidec-kirjastoa käyttäviin sovelluksiin ja kirjastoihin.
- Node.js JavaScript -alustalle tehtiin korjaukset päivityksissä 26.12.1, 24.22.1 ja 22.23.4. Sovellukset, jotka käyttävät fetch()-metodia kolmannen osapuolen sisällön pyytämiseen, joka automaattisesti dekoodaa HTTP-vastaukset "Content-Encoding: br" -otsikolla, voivat olla haavoittuvia. Haavoittuvuus ilmenee myös silloin, kun zlib.brotliDecompress*()-, createBrotliDecompress()- ja brotli.decompress()-metodeja kutsutaan suoraan kolmannen osapuolen sisällön purkamiseen tai kun vastaanotetaan HTTP-pyyntöjä, jotka on jäsennetty Express 5- ja body-parser 2.x -kirjastojen kautta.
- Python-paketit brotli ja brotlicffi (korjaus ehdotettu versiossa 1.2.1) ja niitä käyttävät projektit, mukaan lukien suositut kirjastot urllib3, aiohttp, httpx ja Scrapy, jotka dekoodaavat vastaukset "Content-Encoding: br" -otsikolla ulkoisia verkkoresursseja käytettäessä.
- HTTP-palvelimet, HTTP-välityspalvelimet, HTTP-asiakaspalvelimet ja verkkoselaimet, jotka tukevat Brotli-pakkausta ("Accept-Encoding: br"). Apache httpd:ssä on mod_brotli (oletusarvoisesti poissa käytöstä). Nginxille on saatavilla kolmannen osapuolen moduuli, ngx_brotli (riippuvuuksissa oleva brotli-versio on päivitetty uusimpaan versioon). Chromessa/Chromiumissa ja Firefoxissa ongelma on jo korjattu edellisessä päivityksessä. Välityspalvelimessa-palvelin Envoy-haavoittuvuus on korjattu julkaisuissa 1.40.0, 1.39.3, 1.38.6, 1.37.8 ja 1.36.12.
- .NET-ajonaikaista haavoittuvuutta käytettäessä BrotliDecoder-, BrotliStream- ja HttpClient-metodeja sovelluksessa. Haavoittuvuutta ei ole vielä korjattu.
- PHP brotli -laajennus käytettäessä brotli_uncompress()-funktiota. Korjaus kesken.
- Ruby-paketti Brotli oli altis Brotli.inflate-metodia käyttäville hyökkäyksille. Haavoittuvuutta ei ole vielä korjattu.
- DuckDB tuotaessa pakattuja Parquet-tiedostoja. Korjaus kesken.
- ClickHouse-tietokannan hallintajärjestelmä. Korjaus kesken.
- YDB-tietokannan hallintajärjestelmä. Haavoittuvuutta ei ole vielä korjattu.
- Apache Arrow pakattuja Parquet-tiedostoja tuotaessa. Korjaus kesken.
- libjxl (käyttää Brotlia JPEG XL -metatietojen pakkaamiseen).
Korjaus valmisteilla. - NanaZip-, 7-Zip-zstd- ja p7zip-arkistointiohjelmat ovat haavoittuvaisia .br-tiedostoja purettaessa. Haavoittuvuus on edelleen olemassa.
- MuPDF. Haavoittuvuutta ei ole korjattu.
- EDK II:een ja UEFITooliin perustuva UEFI-laiteohjelmisto, pakattu Brotlilla. EDK II:lle ja UEFIToolille on tekeillä korjaus.
- Bun JavaScript -kehys. Haavoittuvuus korjattiin versiossa 1.4.4.
- Istio, mikropalveluiden hallinta-alusta. Haavoittuvuus korjattiin versioissa 1.29.9, 1.30.6 ja 1.31.2.
- curl- ja libcurl-käyttöjärjestelmien haavoittuvuus ilmenee, kun riippuvuuksissa on haavoittuvainen versio libbrotlidec-käyttöjärjestelmästä.
- Jäsentimet Web Open Font (WOFF) -fonttiformaatille, joka käyttää
Brotli. - Brotli4j, SumatraPDF, Ghostscript, CatBoost ja YTsaurus. Haavoittuvuus korjattiin päivityksessä.
Lähde: opennet.ru
