Una falla nel decoder Brotli permette a un server malevolo di prendere Node.js e Python

24.10.2026 4 min 5

Un bug nel decoder Brotli di Google permette a un flusso compresso costruito ad arte di scrivere oltre la fine di un buffer in memoria. Catalogata come CVE-2026-111497 e valutata 9,2 su 10 nell'avviso di GitHub, la falla riguarda le versioni di Brotli dalla 1.0.3 alla 1.2.0. Brotli comprime gran parte del traffico web di oggi, quindi il problema va ben oltre una singola libreria: Node.js, Bun, Envoy, Istio e i pacchetti Python che requests e aiohttp usano da soli includono o caricano il codice vulnerabile. Le correzioni sono uscite tra il 21 e il 23 ottobre.

Che cosa non va

Un flusso Brotli è diviso in blocchi, e il decoder passa da un tipo di blocco all'altro mentre legge. Secondo l'avviso di Node.js, un cambio di blocco non valido veniva trattato come una temporanea richiesta di altri dati anziché come un errore di formato. Il decoder continuava così ad aggiungere byte dell'attaccante a un buffer interno di otto byte e ne superava la fine. A seconda di ciò che viene sovrascritto, il risultato è un crash, una fuga di memoria del processo o l'esecuzione di codice da remoto.

La falla è stata segnalata a Node.js da Khai Tran e Sylvie Mayer di OpenAI Codex Security. Google ha pubblicato le versioni corrette 1.0.10, 1.1.1 e 1.2.1 di Brotli, e Node.js il 21 ottobre ha rilasciato 22.23.4, 24.22.1 e 26.12.1. Node.js 20 e le altre linee fuori supporto non riceveranno correzioni.

L'attacco funziona in entrambe le direzioni

Il decoder entra in gioco ovunque arrivino dati compressi, quindi entrambe le parti di una connessione possono essere il bersaglio. Un server malevolo può attaccare un client: il fetch() integrato in Node decomprime automaticamente le risposte Brotli, e lo stesso fanno le librerie Python requests, urllib3 e aiohttp quando è installato un pacchetto Brotli. L'applicazione non deve nemmeno importarlo. Webhook, anteprime dei link, crawler e funzioni di «importazione da URL» scaricano di continuo contenuti da server altrui.

Nella direzione opposta, un client può attaccare un server che decomprime il corpo delle richieste. Express dalla 5.0.0 alla 5.3.0 e body-parser dalla 2.0.0 alla 2.3.0 decomprimono Brotli nei parser raw() e json(). L'Imperva Red Team ha eseguito codice proprio sull'immagine ufficiale di Node.js 24.22.0 per entrambe le vie: una risposta scaricata e il corpo di una richiesta a Express. Sono serviti diversi tentativi, e Imperva non ha pubblicato l'exploit.

Fin dove arriva

Il bug è nel decoder di riferimento in C di Google, e molti progetti ne distribuiscono una copia propria. Un censimento su broccoli2shell.com riporta correzioni per Bun 1.4.4, Envoy, Istio, Chromium, Firefox, ngx_brotli e i pacchetti Python Brotli 1.2.1 e brotlicffi 1.2.1.0. Al 24 ottobre elencava ancora copie non corrette in .NET, nelle estensioni brotli per PHP e Ruby, DuckDB, ClickHouse, Apache Arrow, nella libreria JPEG XL, nei fork di 7-Zip e in MuPDF.

Le distribuzioni Linux correggono separatamente la libreria condivisa libbrotli. Debian, per esempio, lo ha fatto con gli aggiornamenti di sicurezza per bookworm e trixie. Il 22 ottobre su GitHub è comparso un proof of concept pubblico, che però stando ai resoconti esegue codice solo su una build volutamente indebolita. Fino ad allora non erano stati segnalati attacchi reali.

Che cosa controllare

  • Browser: Chrome, Edge e Firefox decomprimono Brotli su quasi ogni pagina. Installa l'ultimo aggiornamento e riavvia il browser.
  • Node.js e Bun: esegui node --version. Tutto ciò che è sotto 22.23.4, 24.22.1 o 26.12.1, o su una linea fuori supporto come la 20, va aggiornato. Bun deve essere almeno alla 1.4.4.
  • Python: esegui pip show Brotli brotlicffi. Se uno dei due è precedente alla 1.2.1, aggiornalo o disinstallalo: requests tornerà a gzip.
  • Server: applica l'aggiornamento di libbrotli della distribuzione e riavvia ogni servizio che la carica. Un processo in esecuzione conserva il vecchio decoder in memoria finché non viene riavviato.

Quest'ultimo punto sfugge facilmente. Il gestore di pacchetti può installare la correzione di notte, mentre PHP, Python e altri processi di lunga durata continuano per settimane con la vecchia copia. Per chi gestisce un proprio server è il secondo «aggiorna e riavvia» del mese, dopo le falle di NGINX.

brotlinode.jspythongooglevulnerabilitàbunopenaiimpervalinuxserverbrowseropen source

Leggi anche