È stata identificata una vulnerabilità nella libreria di riferimento per il decodificatore del formato di compressione dati Brotli (CVE-2026-111497, i nomi in codice Broccoli2Shell e HTTP2Shell), che porta a un overflow del buffer quando vengono elaborati dati compressi appositamente formati. Secondo Google, la vulnerabilità può essere sfruttata per l'esecuzione remota di codice in attacchi a progetti che utilizzano l'implementazione ufficiale del decodificatore Brotli. Tra i progetti interessati dalla vulnerabilità ci sono: Node.js, Bun, Envoy, Istio, browser web, server proxy, client HTTP, server HTTP, archiviatori, firmware UEFI, visualizzatori JPEG XL, librerie di contenuti per Python, Ruby, Java, PHP e .NET e relative dipendenze.
Il problema è stato identificato da OpenAI nel febbraio di quest'anno ed è stato bloccato nel codice sorgente di Brotli attraverso l'ignoring di flussi non validi durante la decodifica. Il 22 ottobre sono stati pubblicati aggiornamenti correttivi di Brotli 1.0.10, 1.1.1 e 1.2.1 in cui è stata esplicitamente dichiarata la risoluzione della vulnerabilità e risolto il problema di fondo. Nello stesso giorno è stato creato un prototipo di exploit che ha permesso l'esecuzione remota di codice in condizioni di laboratorio, utilizzando build non standard (nelle build standard si verificava un crash). In seguito, Imperva ha registrato un attacco a build standard di Node.js 24.22.0 nell'ambiente Linux su sistema ARM64.
La vulnerabilità porta a una scrittura oltre il buffer a causa di una gestione errata degli errori durante l'analisi dei blocchi nel flusso compresso. La funzione DecodeBlockTypeAndLength() restituiva solo i valori true e false invece di un codice di errore, impedendo al codice chiamante di distinguere un danneggiamento del flusso da uno stato che richiede l'invio di ulteriori dati alla funzione. Nel caso venisse specificato un tipo di blocco di dati compressi non valido nel flusso, il decodificatore non lo interpretava come errore, ma come uno stato di carenza di dati che richiedeva una lettura aggiuntiva dal flusso. Poiché il buffer allocato non era calcolato per i dati letti aggiuntivi, questi venivano scritti in un'area oltre il suo limite, dove era memorizzato lo stato interno del decodificatore.
Progetti affetti dalla vulnerabilità:
- La libreria di riferimento per Brotli presenta il problema a partire dalla version 1.0.3 ed è stato risolto negli aggiornamenti 1.0.10, 1.1.1 e 1.2.1. La vulnerabilità influisce su applicazioni e librerie che utilizzano la libreria libbrotlidec.
- La piattaforma JavaScript Node.js ha risolto il problema negli aggiornamenti 26.12.1, 24.22.1 e 22.23.4. Le applicazioni che utilizzano il metodo fetch() per richiedere contenuti di terze parti sono vulnerabili, in quanto decodificano automaticamente le risposte HTTP con l'intestazione «Content-Encoding: br». La vulnerabilità si manifesta anche quando si chiamano direttamente i metodi zlib.brotliDecompress*(), createBrotliDecompress() e brotli.decompress() per decomprimere contenuti di terze parti o quando si ricevono richieste HTTP analizzate tramite le librerie Express 5 e body-parser 2.x.
- I pacchetti Python brotli e brotlicffi (la correzione è proposta nella versione 1.2.1) e i progetti che li utilizzano, tra cui le popolari librerie urllib3, aiohttp, httpx e Scrapy, decodificano le risposte con l'intestazione «Content-Encoding: br» quando accedono a risorse web esterne.
- Server HTTP, proxy HTTP, client HTTP e browser web che supportano la compressione Brotli («Accept-Encoding: br»). In Apache httpd è fornito mod_brotli (disattivato per impostazione predefinita). Per nginx è disponibile un modulo di terze parti ngx_brotli (la versione di brotli nelle dipendenze è stata aggiornata all'ultima). In Chrome/Chromium e Firefox il problema è già stato risolto in uno degli aggiornamenti precedenti. In proxy-server La vulnerabilità di Envoy è stata risolta nelle versioni 1.40.0, 1.39.3, 1.38.6, 1.37.8, 1.36.12.
- .NET runtime quando si utilizzano i metodi BrotliDecoder, BrotliStream e HttpClient. La vulnerabilità non è ancora stata risolta.
- L'estensione PHP brotli quando si utilizza la funzione brotli_uncompress(). La correzione è in fase di preparazione.
- Il pacchetto Ruby brotli quando si utilizza il metodo Brotli.inflate. La vulnerabilità non è ancora stata risolta.
- Il DBMS DuckDB durante l'importazione di file Parquet compressi. La correzione è in fase di preparazione.
- Il DBMS ClickHouse. La correzione è in fase di preparazione.
- Il DBMS YDB. La vulnerabilità non è ancora stata risolta.
- Apache Arrow durante l'importazione di file Parquet compressi. La correzione è in fase di preparazione.
- libjxl (quando si comprimono i metadati in JPEG XL, viene utilizzato Brotli).
La correzione è in fase di preparazione. - Gli archivi NanaZip, 7-Zip-zstd e p7zip durante la decompressione di file br. La vulnerabilità non è stata risolta.
- MuPDF. La vulnerabilità non è stata risolta.
- Firmware UEFI basati su EDK II e UEFITool, compressi utilizzando Brotli. La correzione è in fase di preparazione — EDK II e UEFITool.
- La piattaforma JavaScript Bun. La vulnerabilità è stata risolta nella versione 1.4.4.
- La piattaforma per la gestione dei microservizi Istio. La vulnerabilità è stata risolta nelle versioni 1.29.9, 1.30.6 e 1.31.2.
- curl e libcurl, la vulnerabilità si manifesta quando è presente una versione vulnerabile di libbrotlidec tra le dipendenze.
- Parser per il formato dei font Web Open Font (WOFF), in cui viene utilizzato
Brotli. - Brotli4j, SumatraPDF, Ghostscript, CatBoost e YTsaurus. La vulnerabilità è stata risolta in uno degli aggiornamenti.
Fonte: opennet.ru
