CISA ha aggiunto CVE-2026-111497 al catalogo Known Exploited Vulnerabilities (KEV) il 27 ottobre 2026, citando evidenze di sfruttamento attivo. Per chi gestisce Node.js, la priorità è individuare dove dati Brotli non attendibili possono raggiungere un decoder vulnerabile e distribuire una build corretta.
Che cosa fa la vulnerabilità
CVE-2026-111497 è una scrittura fuori dai limiti della memoria nel decoder Brotli incluso in Node.js. Il decoder interpreta in modo errato un cambio di blocco malformato come una richiesta di altri dati; durante la decodifica in streaming continua così ad aggiungere input a un buffer interno di otto byte. Node.js indica come possibili conseguenze un arresto anomalo, la divulgazione di memoria del processo o, potenzialmente, l’esecuzione di codice da remoto.
Il rischio dipende dal percorso dei dati: un input Brotli controllato da un attaccante deve raggiungere il decoder vulnerabile. Comprimere dati con Brotli, da solo, non comporta questa condizione. In Node.js la decodifica può avvenire tramite node:zlib, ma anche indirettamente: fetch() decodifica le risposte Brotli e Express 5 con body-parser può decomprimere i corpi delle richieste se configurato per farlo. Un server HTTP Node.js, invece, non decodifica automaticamente un corpo Brotli solo perché lo riceve.
Le versioni corrette di Node.js
Il progetto Node.js ha corretto i rami supportati 22.x, 24.x e 26.x nelle versioni indicate qui:
| Ramo Node.js | Versione corretta |
| 22.x | 22.23.4 |
| 24.x | 24.22.1 |
| 26.x | 26.12.1 |
Node.js considera interessate anche le versioni fuori supporto quando pubblica un aggiornamento di sicurezza. I numeri in tabella si riferiscono ai tre rami supportati elencati dal progetto.
Che cosa ha mostrato il test di Imperva
Imperva ha riferito di aver ottenuto esecuzione di codice nei test con l’immagine ufficiale Node.js 24.22.0 per Linux arm64. Ha provato sia le risposte decodificate dal fetch() integrato sia la decompressione delle richieste tramite Express 5 e body-parser configurati per questo percorso. Nel suo ambiente sono serviti più tentativi; gli stessi input sono stati rifiutati da Node.js 24.22.1.
Come individuare i percorsi esposti e distribuire la correzione
Controlla sia le chiamate dirette a node:zlib sia i percorsi indiretti: codice che usa fetch(), middleware configurati per decomprimere richieste e impostazioni di proxy o applicazione. Verifica anche i container e gli artefatti autonomi, che possono includere un runtime proprio.
Aggiorna il runtime o la libreria interessata, ricostruisci gli artefatti e le immagini che incorporano il runtime, quindi ridistribuiscili e riavvia i servizi. Controlla infine la versione effettivamente in esecuzione: aggiornare un’installazione condivisa non sostituisce automaticamente il runtime incluso in un’immagine o in un’applicazione autonoma.
Bloccare le richieste Brotli in ingresso o disattivare la decompressione può ridurre l’esposizione su quei percorsi, ma non protegge un client vulnerabile che decodifica una risposta controllata da un attaccante. Anche rimuovere br dall’header Accept-Encoding non basta a impedire a un server di inviare una risposta Brotli.