HTTP2Shell (CVE-2026-111497): la falla critica nel decoder Brotli e come proteggersi
HTTP2Shell, la falla critica di Brotli: cosa colpisce (Node.js, Python, Bun, Envoy, .NET), quali versioni contengono la correzione e come proteggersi.

In breve: HTTP2Shell (CVE-2026-111497) è una falla critica nel decoder Brotli, usato da Node.js, Python, Bun, Envoy, .NET e molti altri programmi. Dati compressi preparati ad arte possono corrompere la memoria e, in certe condizioni, permettere l’esecuzione di codice da remoto. La correzione c’è: Node.js 22.23.4, 24.22.1 o 26.12.1 e Brotli 1.0.10, 1.1.1 o 1.2.1. Aggiornate e poi riavviate le applicazioni.
Che cos’è HTTP2Shell?
Il 21 ottobre 2026 il progetto Node.js ha pubblicato aggiornamenti di sicurezza per le versioni 22, 24 e 26. Uno dei problemi corretti, CVE-2026-111497, non si trova in Node.js stesso, ma in Brotli, l’algoritmo di compressione creato da Google e molto diffuso sul web come codifica br.
La falla ha diversi nomi: HTTP2Shell, Node2Shell e Broccoli2Shell. Indicano sempre lo stesso bug. Il nome «HTTP2Shell» è fuorviante: la falla non ha nulla a che fare con il protocollo HTTP/2. Qualsiasi programma che decomprime dati Brotli da fonti non affidabili può essere colpito.
La falla è stata scoperta da Khai Tran e Sylvie Mayer (OpenAI Codex Security). Il team di Imperva ha dimostrato che permette di eseguire codice su una versione vulnerabile di Node.js.
Come funziona la falla
I dati Brotli sono suddivisi in blocchi e il decoder passa da un blocco all’altro seguendo istruzioni contenute nel flusso compresso. Quando un’istruzione di questo tipo non è valida, il decoder vulnerabile non la tratta come un errore. La interpreta come una richiesta di altri dati e continua a scrivere byte in un buffer di soli 8 byte, oltre il suo limite.
Questo tipo di errore si chiama scrittura fuori dai limiti (out-of-bounds write). Conseguenze possibili, in ordine di gravità:
- arresto del processo: l’applicazione si blocca e il sito o il servizio diventa irraggiungibile;
- fughe di memoria: un aggressore può leggere dati dalla memoria del processo;
- esecuzione di codice da remoto: un aggressore esegue comandi propri con i diritti dell’applicazione.
All’aggressore non servono account né password. Basta che l’applicazione decomprima i suoi dati.
Quanto è grave?
Le valutazioni variano a seconda della fonte. L’ente che ha assegnato il CVE la valuta 9,2 su 10 (critica) secondo CVSS 4.0. Node.js la considera di gravità alta e Red Hat importante. Ciò che è certo al 26 ottobre 2026:
- esiste codice dimostrativo pubblico;
- l’esecuzione di codice è stata dimostrata su Node.js non aggiornato, ma i risultati variano da sistema a sistema;
- non sono ancora stati segnalati attacchi reali e la falla non è nel catalogo CISA delle vulnerabilità sfruttate attivamente.
Con codice pubblico disponibile, gli attacchi reali arrivano di solito in fretta. Trattate l’aggiornamento come urgente.
Chi è colpito?
La libreria Brotli
Sono vulnerabili le versioni dalla 1.0.3 alla 1.2.0. La correzione è nelle versioni 1.0.10, 1.1.1 e 1.2.1. Le distribuzioni Linux applicano spesso le correzioni senza cambiare il numero di versione: controllate quindi l’avviso di sicurezza della vostra distribuzione, non solo il numero.
Programmi e linguaggi colpiti
| Programma | Versioni corrette |
|---|---|
| Node.js | 22.23.4, 24.22.1, 26.12.1 (18, 20, 23 e 25 non ricevono più correzioni) |
| Bun | 1.4.4 |
| Python: Brotli, brotlicffi | Brotli 1.2.1, brotlicffi 1.2.1.0 |
| Envoy Proxy | 1.36.12, 1.37.8, 1.38.6, 1.39.3, 1.40.0 |
| Istio | 1.29.9, 1.30.6, 1.31.2 |
| Go: andybalholm/brotli | v1.2.7 |
| Ruby: brotli gem | 0.9.1 |
| PHP: brotli extension | 0.21.1 |
| .NET | aggiornamenti Microsoft del 25 ottobre 2026 |
PHP ha inoltre ricostruito i pacchetti Windows ufficiali delle versioni dalla 8.2 alla 8.5, perché includono la libreria Brotli.
Programmi con una propria copia di Brotli
Molti programmi includono una propria copia del decoder. Questa non viene corretta quando aggiornate la libreria di sistema, ma solo con una nuova versione del programma. Tra quelli segnalati: ClickHouse, DuckDB, Apache Arrow (pyarrow), 7-Zip-zstd, p7zip, FFmpeg tramite libjxl (immagini JPEG XL) e gli strumenti per i font WOFF2. Per alcuni, il 25 ottobre non esisteva ancora una versione ufficiale corretta.
Come può arrivare un attacco
- Richieste ricevute dal server: un aggressore invia una richiesta con
Content-Encoding: bre l’applicazione decomprime automaticamente il contenuto, per esempio tramite middleware in Express o ASP.NET Core. - Risposte scaricate dall’applicazione: la vostra applicazione richiede una pagina o un’API a un altro server, che risponde con dati Brotli manipolati.
fetch()in Node.js e i client Python requests, HTTPX, aiohttp e urllib3 decomprimono automaticamente le risposte Brotli quando il supporto è installato. - File caricati: immagini JPEG XL, file Parquet, archivi o font WOFF2 che contengono dati Brotli.
Il secondo scenario è il più facile da trascurare: anche se il vostro server non riceve mai dati Brotli, un’applicazione che scarica risorse esterne è esposta.
Verificate se siete colpiti
Versione di Node.js (sul server, in ogni container e in ogni applicazione sotto «Setup Node.js App», se usate cPanel):
node -vPacchetti Python (in ogni ambiente virtuale):
pip show brotli brotlicffiLibreria di sistema:
# Debian / Ubuntu
dpkg -l | grep -i brotli
# AlmaLinux / Rocky / CloudLinux / RHEL
rpm -qa | grep -i brotliProcessi che hanno caricato la libreria di sistema e vanno riavviati dopo l’aggiornamento:
sudo grep -l brotlidec /proc/*/maps 2>/dev/nullBun:
bun --versionLe immagini Docker contengono una propria versione di Node.js. Controllate ogni immagine, per esempio così (sostituite IMAGE con il nome della vostra immagine):
docker run --rm IMAGE node -vCome proteggersi
1. Aggiornate
- Node.js: passate alla 22.23.4, 24.22.1 o 26.12.1 o successive. Se usate Node.js 18 o 20, spostate l’applicazione sulla 22 o 24, perché quelle versioni non ricevono più correzioni.
- Python: eseguite
pip install -U brotli brotlicffiin ogni ambiente che contiene questi pacchetti. - Sistema operativo: installate gli aggiornamenti di sicurezza (
apt upgradeodnf upgrade) appena la vostra distribuzione pubblica il pacchetto corretto. - Bun, Envoy, Istio, .NET: le versioni della tabella qui sopra.
pip install -U brotli brotlicffi2. Riavviate e ricostruite
Un processo avviato prima dell’aggiornamento continua a eseguire il codice vecchio. Riavviate le applicazioni Node.js (per esempio con pm2 reload all o da cPanel), i servizi Python e ogni processo trovato con il comando qui sopra. Ricostruite le immagini Docker su un’immagine di base corretta e verificate dopo l’avvio che giri la nuova versione.
3. Misure temporanee
Se non potete aggiornare subito, bloccate le richieste in arrivo compresse con Brotli. I browser non inviano richieste compresse con Brotli, quindi i visitatori abituali non se ne accorgono. Verificate però se integrazioni (API, app) inviano richieste di questo tipo.
In nginx, nel blocco server:
if ($http_content_encoding ~* "br") {
return 415;
}In Apache (.htaccess):
RewriteEngine On
RewriteCond %{HTTP:Content-Encoding} br [NC]
RewriteRule ^ - [R=415,L]Il 25 ottobre Cloudflare ha pubblicato una regola WAF d’emergenza per questa falla, e Azure, Imperva e Vercel hanno regole simili. In Python potete disinstallare temporaneamente i pacchetti brotli e brotlicffi; senza di essi i client HTTP non decomprimono più dati Brotli.
Consiglio: Queste misure proteggono solo i dati che arrivano al server. Non proteggono le applicazioni che scaricano risorse da altri siti. Solo l’aggiornamento protegge del tutto.
4. Tenete d’occhio i segnali di un attacco
- arresti imprevisti di applicazioni Node.js o Python (errori come
segmentation fault); - richieste con
Content-Encoding: brnei log del server web; - nuovi processi o connessioni insolite avviati dall’utente dell’applicazione.
Raccomandazioni per tipo di utilizzo
- Sito WordPress o sito aziendale su hosting web: non dovete fare nulla. Le librerie di sistema le aggiorna il provider di hosting. Continuate ad aggiornare WordPress, il tema e i plugin.
- Applicazioni Node.js in cPanel: in «Setup Node.js App» scegliete Node.js 22 o successivo e riavviate l’applicazione.
- VPS o server proprio: gestite voi il sistema. Eseguite le verifiche qui sopra, aggiornate, riavviate e ricostruite i container.
- Sviluppatori: aggiornate Node.js in locale e nella CI, ricostruite le immagini e controllate le dipendenze con una propria copia di Brotli.
- Tutti gli altri: aggiornate browser e app. Chrome e Firefox includono già la correzione.
Cosa abbiamo fatto da HostOn
Sui nostri server di hosting web Node.js gira già nella versione corretta 22.23.4, anche in «Setup Node.js App» di cPanel (dal pacchetto Pilatus). Le versioni 18 e 20 non ricevono più correzioni: spostate quindi le vostre applicazioni sulla 22. Aggiorniamo i pacchetti di sistema non appena le distribuzioni pubblicano la correzione. Con un VPS gestite voi il sistema e dovete applicare i passi qui sopra. Serve aiuto? Aprite un ticket nell’area clienti o scriveteci dalla pagina Contatti.
Cronologia
- 21 ottobre 2026: escono Brotli 1.0.10, 1.1.1 e 1.2.1 e Node.js 22.23.4, 24.22.1 e 26.12.1.
- 22–23 ottobre: vengono corretti i pacchetti Python Brotli e brotlicffi; compare codice dimostrativo pubblico.
- 24 ottobre: correzioni per la gem Ruby e l’estensione PHP brotli.
- 25 ottobre: aggiornamenti Microsoft per .NET e regola WAF d’emergenza di Cloudflare.
- 26 ottobre: PHP ha ricostruito i pacchetti Windows; nessun attacco reale segnalato.
Fonti: BleepingComputer, Wiz, JFrog Security Research, Phoenix Security, Ubuntu Security, The Hacker News.
Domande frequenti sul tema
HTTP2Shell (CVE-2026-111497), chiamata anche Node2Shell o Broccoli2Shell, è una scrittura fuori dai limiti nel decoder Brotli di Google. Dati compressi manipolati fanno scrivere il decoder oltre un buffer. Questo può bloccare il processo, esporre dati in memoria o, in certe condizioni, permettere l’esecuzione di codice da remoto.
No. Il nome è fuorviante: il bug è nel decoder Brotli, non nel protocollo HTTP/2. Qualsiasi applicazione che decomprime dati Brotli da fonti non affidabili può essere colpita, indipendentemente dal protocollo.
Node.js 22.23.4, 24.22.1 o 26.12.1 o successive sulla stessa linea. Le versioni 18, 20, 23 e 25 non ricevono più aggiornamenti e non avranno la correzione; spostatele su una linea supportata.
WordPress non usa direttamente il decoder Brotli. Le librerie di sistema che decomprimono Brotli vengono aggiornate tramite i pacchetti della distribuzione. Sull’hosting web HostOn ci occupiamo noi di questi aggiornamenti: per un normale sito WordPress non dovete fare nulla.
Al 26 ottobre 2026 non sono stati segnalati attacchi reali e la falla non è nel catalogo CISA delle vulnerabilità sfruttate attivamente. Esiste però codice dimostrativo pubblico e Imperva ha dimostrato l’esecuzione di codice su una versione vulnerabile di Node.js: aggiornate subito.
No. Bloccare le richieste con Content-Encoding: br protegge solo i dati che arrivano al server. Se la vostra applicazione scarica risorse da altri siti, un server malevolo può inviarle una risposta Brotli. Solo l’aggiornamento protegge del tutto.
Sì. Un processo avviato prima dell’aggiornamento continua a usare il codice vecchio in memoria. Riavviate le applicazioni Node.js e Python e i servizi che usano la libreria Brotli, e ricostruite le immagini Docker.



