Node2Shell: Imperva porta il bug Brotli di Node.js fino all’esecuzione di codice, e il fix è già disponibile
Una vulnerabilità che il progetto Node.js aveva classificato high il 21 ottobre ha ora una dimostrazione pubblica di esecuzione di codice. Il team Red Team di Imperva ha battezzato Node2Shell la loro analisi di CVE-2026-111497, una scrittura fuori dai limiti nel decoder Brotli incluso in Node.js, e ha mostrato che dati Brotli costruiti ad arte, contenuti in una risposta o nel corpo di una richiesta, portano ad eseguire codice su un’immagine ufficiale.
Che cosa è stato dimostrato
Una prima proof of concept pubblica, uscita il 22 ottobre, otteneva esecuzione di codice solo su una build di test deliberatamente indebolita; su una build standard il suo autore riferiva un crash e una lettura limitata della memoria del processo, senza esecuzione di codice (così la ripresa THN del 22/10). Node2Shell sposta il quadro: l’esecuzione avviene su un’immagine ufficiale.
Il post di Imperva descrive l’esecuzione di codice sull’immagine ufficiale Node.js 24.22.0 per Linux arm64, senza debugger né binari strumentati. Il difetto sta nella gestione delle transizioni tra tipi di blocco: l’input di test raggiunge una transizione che la struttura stessa del flusso rende impossibile; il decoder vulnerabile la tratta come richiesta di ulteriori dati e prosegue in uno stato non valido. Un’esecuzione con sanitizer ha mostrato la scrittura oltre il buffer previsto. La correzione a monte (commit nel repository Google Brotli) fa restituire al decoder un errore di formato, e la 24.22.1 rifiuta gli stessi input.
Imperva precisa che l’esecuzione ha richiesto più tentativi nel suo ambiente. Non pubblica dati su affidabilità dell’exploit, né sull’ASLR; l’architettura testata è una sola (arm64), e le linee 22.x e 26.x non sono state provate. Un limite da tenere presente per chi deve stimare il rischio reale.
Dove arrivano dati Brotli non attendibili
I punti di ingresso verificati dai ricercatori sono due: la funzione
fetch()
integrata, quando consuma una risposta compressa con Brotli, e i body parser di Express 5 (intervalli 5.0.0 a 5.3.0 e body-parser 2.0.0 a 2.3.0, provati con
express.json()
e
express.raw()
), che decodificano il corpo delle richieste. Un semplice server
http
di Node non decodifica da solo; il decoder è raggiungibile anche direttamente dal modulo
node:zlib
. Ne discende che l’esposizione riguarda soprattutto API che accettano corpi compressi e servizi che interrogano endpoint esterni, dunque anche i backend di piattaforme agentiche che fanno molte chiamate in uscita.
Versioni, gravità, mitigazioni
Secondo l’advisory Node.js sono interessate le linee 26.x, 24.x e 22.x; i rilasci correttivi sono 22.23.4, 24.22.1 e 26.12.1. La gravità è indicata come high; né Node.js né Imperva riportano un punteggio CVSS, e conviene non attribuirne uno finché NVD non lo pubblica. Le versioni a fine vita (20.x e precedenti) non ricevono correzioni.
Non esiste un workaround interno a Node.js: Imperva suggerisce di limitare il traffico Brotli non attendibile sui percorsi esposti e ha aggiunto regole WAF; per le immagini container serve la ricostruzione con la versione corretta. Al 22 ottobre non risultavano sfruttamenti in the wild, secondo The Hacker News. Vercel ha attivato regole WAF il 21 ottobre per le richieste in ingresso, ma dichiara che non coprono le risposte Brotli scaricate dall’applicazione da altri server (il percorso
fetch()
) e non sostituiscono la patch; per queste serve il runtime aggiornato.
La correzione è un commit a monte del progetto Brotli, apparso nei sorgenti a febbraio 2026 e rilasciato come correzione di sicurezza solo il 21 ottobre nelle versioni Brotli 1.2.1, 1.1.1 e 1.0.10 (dato THN): altri software che incorporano Brotli potrebbero richiedere lo stesso aggiornamento. Lo stesso rilascio Node.js blocca anche otto chiavi di CA intermedie di eMudhra segnalate come compromesse.
Due incongruenze tra le fonti: Imperva attribuisce la segnalazione a Matteo Collina e la correzione ad Antoine du Hamel, mentre l’advisory Node.js indica come segnalatori Khai Tran e Sylvie Mayer di OpenAI Codex Security e come autori del fix gli utenti mcollina e aduh95; qui si segue l’advisory del progetto. Lo stesso rilascio corregge altre CVE high (resolver DNS, due bypass nella verifica dei nomi host TLS), e l’aggiornamento va quindi pianificato per l’insieme, non solo per Brotli.
Esposizione italiana
Nessun atto italiano (ACN, CSIRT Italia, CERT-AGID) risulta pubblicato sul tema nella finestra; i portali ACN e CSIRT non erano consultabili. L’esposizione attesa è comunque ampia: Node.js è diffuso nei backend di servizi digitali, PA e fintech, e molte organizzazioni soggette a NIS2 hanno già in agenda il patching dello stesso periodo, in cui sono arrivate anche le correzioni PHP (vedi la nostra analisi su PHP2Shell). Priorità operative: inventario dei servizi Node.js e delle immagini container, aggiornamento alle versioni corrette, verifica di quali endpoint accettano Brotli.

