În biblioteca cu implementarea de referință a decodorului formatului de comprimare a datelor Brotli a fost identificată o vulnerabilitate (CVE-2026-111497, nume de cod Broccoli2Shell și HTTP2Shell), care duce la un overflow de buffer în timpul procesării datelor comprimate special formate. Conform celor de la Google, vulnerabilitatea poate fi exploatată pentru a permite execuția de cod de la distanță în atacurile asupra proiectelor care utilizează implementarea oficială a decodorului Brotli. Printre proiectele afectate de această vulnerabilitate se numără: Node.js, Bun, Envoy, Istio, browsere web, servere proxy, clienți HTTP, servere HTTP, arhivatoare, servere proxy, firmware UEFI, vizualizatoare JPEG XL, biblioteci de decodare a conținutului pentru Python, Ruby, Java, PHP și .NET și dependențele acestora.
Problema a fost identificată de compania OpenAI în februarie a acestui an și a fost blocată în baza de cod Brotli prin eliminarea fluxurilor incorecte în timpul decodării. Pe 22 octombrie, au fost publicate versiunile corective Brotli 1.0.10, 1.1.1 și 1.2.1 în care a fost declarat explicit că vulnerabilitatea a fost remediată și esența problemei a fost corectată. În aceeași zi, a fost creat un prototip de exploit care a permis execuția de cod de la distanță în condiții de laborator, folosind build-uri non-standard (în build-urile standard a apărut o întrerupere bruscă). Ulterior, compania Imperva a înregistrat un atac asupra build-urilor standard Node.js 24.22.0 într-un mediu Linux pe sistemul ARM64.
Vulnerabilitatea duce la o scriere dincolo de buffer din cauza unei manipulări incorecte a erorilor în procesul de analiză a blocurilor din fluxul comprimat. Funcția DecodeBlockTypeAndLength() returna, în loc de un cod de eroare, doar valorile true și false, ceea ce nu permitea codului apelant să diferențieze între o corupție a fluxului și o stare care necesita transmiterea de date suplimentare către funcție. În cazul specificării unui tip de bloc de date comprimate incorecte în flux, decodorul îl percepea nu ca pe o eroare, ci ca pe o stare de lipsă de date, care necesita citire suplimentară din flux. Dar, deoarece bufferul alocat nu era calculat pentru datele citite suplimentar, acestea erau scrise în zona dincolo de limita sa, în care era starea internă a decodorului.
Proiectele afectate de vulnerabilitate:
- Biblioteca de referință Brotli, problema se manifestă începând cu versiunea 1.0.3 și a fost remediată în versiunile 1.0.10, 1.1.1 și 1.2.1. Vulnerabilitatea afectează aplicațiile și bibliotecile care utilizează biblioteca libbrotlidec.
- Platforma JavaScript Node.js, problema a fost remediată în actualizările 26.12.1, 24.22.1 și 22.23.4. Aplicațiile care utilizează metoda fetch() pentru a solicita conținut extern, care decodează automat răspunsurile HTTP cu antetul „Content-Encoding: br”, pot fi atacate. De asemenea, vulnerabilitatea se manifestă la apelul direct al metodelor zlib.brotliDecompress*(), createBrotliDecompress() și brotli.decompress() pentru decomprimarea conținutului extern sau la primirea cererilor HTTP cu analiza prin bibliotecile Express 5 și body-parser 2.x.
- Pachetele Python brotli și brotlicffi (corectura a fost propusă în versiunea 1.2.1) și proiectele care le utilizează, printre care se numără biblioteci populare precum urllib3, aiohttp, httpx și Scrapy, care decodează răspunsurile cu antetul „Content-Encoding: br” la accesarea resurselor web externe.
- Serverele HTTP, proxy-urile HTTP, clienții HTTP și browserele web care suportă compresia Brotli („Accept-Encoding: br”). În Apache httpd se livrează mod_brotli (dezactivat în mod implicit). Pentru nginx există un modul terț ngx_brotli (versiunea brotli din dependențe a fost actualizată la cea recentă). În Chrome/Chromium și Firefox problema a fost deja remediată în unele dintre actualizările anterioare. În proxy-server Envoy vulnerabilitatea a fost remediată în versiunile 1.40.0, 1.39.3, 1.38.6, 1.37.8, 1.36.12.
- .NET runtime la utilizarea metodelor BrotliDecoder, BrotliStream și HttpClient în aplicație. Vulnerabilitatea nu a fost încă remediată.
- Extensia PHP brotli la utilizarea funcției brotli_uncompress(). Corectura este în curs de pregătire.
- Pachetul Ruby brotli la utilizarea metodei Brotli.inflate. Vulnerabilitatea nu a fost încă remediată.
- DBMS DuckDB la importul fișierelor Parquet comprimate. Corectura este în curs de pregătire.
- DBMS ClickHouse. Corectura este în curs de pregătire.
- DBMS YDB. Vulnerabilitatea nu a fost încă remediată.
- Apache Arrow la importul fișierelor Parquet comprimate. Corectura este în curs de pregătire.
- libjxl (la comprimarea metadatelor în JPEG XL se utilizează Brotli).
Corectura este în curs de pregătire. - Arhivatoarele NanaZip, 7-Zip-zstd și p7zip la decomprimarea fișierelor br. Vulnerabilitatea nu a fost remediată.
- MuPDF. Vulnerabilitatea nu a fost remediată.
- Firmware UEFI bazate pe EDK II și UEFITool, comprimate cu ajutorul Brotli. Corectura este în curs de pregătire – EDK II și UEFITool.
- Platforma JavaScript Bun. Vulnerabilitatea a fost remediată în versiunea 1.4.4.
- Platforma pentru gestionarea microserviciilor Istio. Vulnerabilitatea a fost remediată în versiunile 1.29.9, 1.30.6 și 1.31.2.
- curl și libcurl, vulnerabilitatea se manifestă în prezența unei versiuni vulnerabile libbrotlidec în dependențe.
- Parserii formatului de fonturi Web Open Font (WOFF), în care se utilizează
Brotli. - Brotli4j, SumatraPDF, Ghostscript, CatBoost și YTsaurus. Vulnerabilitatea a fost remediată într-una dintre actualizări.
Sursa: opennet.ro
