Vulnerability di Node.js Brotli corretta in tutte le linee supportate
La vulnerability di Node.js Brotli è stata corretta nelle tre linee di release supportate della piattaforma nell'ambito degli aggiornamenti di sicurezza pubblicati il 21 ottobre. Le release risolvono 10 falle, la principale delle quali è CVE-2026-111497, un problema ad alta gravità che, secondo il progetto Node.js, potrebbe consentire remote code execution, permettendo quindi a un aggressore di far eseguire a un sistema interessato codice scelto dall'aggressore.
Le release corrette sono Node.js 22.23.4 e 24.22.1 nelle linee con supporto a lungo termine, oltre alla versione 26.12.1 nella linea corrente. Node.js 20.x e tutte le linee precedenti hanno raggiunto la fine del ciclo di vita e pertanto non ricevono più correzioni di sicurezza. Le applicazioni che utilizzano ancora tali release devono quindi passare a una linea supportata anziché attendere una patch.
CVE-2026-111497 interessa il decoder Brotli incluso in Node.js. Brotli è una libreria di compressione di Google che riduce le dimensioni dei dati trasferiti. Node.js può richiamare direttamente la copia inclusa tramite il modulo node:zlib oppure automaticamente quando fetch() riceve una risposta compressa con Brotli. L'esposizione si verifica quando un'applicazione decomprime dati Brotli controllati da un aggressore, compresi un request body inviato o una risposta recuperata da un altro server.
Il difetto sottostante è un out-of-bounds write, che si verifica quando un software scrive dati oltre lo spazio di memoria riservato. Un input compresso non valido può indurre il decoder a scrivere oltre il proprio buffer. Node.js ha integrato una correzione upstream del progetto Brotli che rileva l'input non valido e interrompe prima l'elaborazione. La stessa correzione è stata inclusa il 21 ottobre in Brotli 1.2.1, 1.1.1 e 1.0.10; pertanto, anche i software diversi da Node.js che includono una propria copia di Brotli potrebbero richiedere un aggiornamento. La modifica al codice era stata inizialmente apportata al codice sorgente di Brotli nel febbraio 2026, ma non era stata distribuita come release di sicurezza fino a ottobre.
Il progetto Node.js segnala la possibilità di remote code execution, ma i risultati dimostrati sono più limitati. Un proof of concept pubblico, pubblicato il 22 ottobre, ha ottenuto l'esecuzione di codice soltanto con una build di test intenzionalmente indebolita. Su una build standard di Node.js, il suo autore ha segnalato un crash e una lettura limitata della memoria del processo, senza produrre un attacco funzionante capace di eseguire codice. Le release aggiornate di Node.js rifiutano l'input non valido utilizzato nella dimostrazione. Al 22 ottobre non erano stati segnalati sfruttamenti attivi.
Altre tre vulnerability hanno una classificazione di gravità alta. CVE-2026-106069 e CVE-2026-105483 interessano i controlli dell'hostname di Transport Layer Security (TLS), che aiutano a confermare che una connessione cifrata abbia raggiunto il server previsto. Rappresentazioni insolite di un indirizzo Internet Protocol potrebbero far sì che un certificato corrisponda a un host al quale non dovrebbe corrispondere. CVE-2026-105483 riguarda specificamente indirizzi IP scritti con cifre fullwidth e interessa le versioni 24.x e 26.x; Node.js lo classifica ad alta gravità, anche se il commit correttivo lo descrive come di bassa gravità e difficile da sfruttare. CVE-2026-105482 fa sì che dns.resolve, una funzione che cerca nomi tramite il Domain Name System (DNS), tronchi un hostname in corrispondenza di un null byte incorporato. CVE-2026-106069, CVE-2026-105482 e la falla di Brotli interessano le versioni 22.x, 24.x e 26.x.
Il gruppo di problemi di media gravità include CVE-2026-105481, in cui una connessione keep-alive riutilizzata può elaborare una risposta scritta prima dell'invio della relativa richiesta, e CVE-2026-106072, che consente ai nomi DNS di autenticare endpoint IP quando viene utilizzata una formattazione IPv4 non standard. CVE-2026-106074 fa sì che crypto.randomUUID() e crypto.randomInt() restituiscano gli stessi valori in ogni processo quando un'applicazione è distribuita come startup snapshot o single-executable application. Uno startup snapshot conserva lo stato preparato di un'applicazione affinché possa essere riutilizzato. La ripetizione di valori che dovrebbero essere imprevedibili può compromettere le funzioni dell'applicazione che dipendono dalla loro casualità. Tutti e tre i problemi di media gravità interessano le versioni 22.x, 24.x e 26.x.
Il gruppo è completato da tre falle di bassa gravità. CVE-2026-106070 consente a ZipFile nella versione 26.x di restituire byte controllati da un aggressore dopo il fallimento di un controllo dell'header. CVE-2026-106071 può concedere un accesso ai file più ampio del previsto tramite una ricerca con wildcard nel Permission Model e interessa la versione 26.x. CVE-2026-106073 permette di aggirare il Permission Model tramite fs.realpathSync e interessa tutte e tre le linee supportate.
Le release modificano inoltre la gestione dei certificati dopo la segnalazione della compromissione di otto chiavi di certificate authority intermedie di eMudhra. Una certificate authority emette credenziali utilizzate per verificare l'identità di un servizio online. Node.js si affida all'elenco dei root certificate di Mozilla, ma non controlla la revoca per impostazione predefinita; di conseguenza, le chain basate su tali chiavi potevano continuare a superare la convalida. Gli aggiornamenti aggiungono un blocco integrato per tutte e otto le chiavi e rimuovono tre root emSign dall'elenco incluso. Go ha introdotto lo stesso blocco in un aggiornamento del 20 ottobre. Le connessioni ripristinate da sessioni stabilite prima dell'aggiornamento non vengono controllate nuovamente finché tali sessioni non scadono, mentre le linee di Node.js giunte alla fine del ciclo di vita non ricevono il blocco.
Anche le dipendenze incluse hanno ricevuto ulteriori aggiornamenti. Undici, l'HTTP client alla base di fetch(), è passato a una release che risolve tre advisory di gravità moderata: uno relativo al controllo Subresource Integrity e due riguardanti l'esaurimento della memoria, compreso uno nel client WebSocket incluso con Node.js. Il progetto ha inoltre aggiornato c-ares in ogni linea supportata, OpenSSL nelle versioni 22.x e 24.x e, nella versione 22.x, il database relazionale utilizzato da molte applicazioni web, per integrare correzioni relative a vulnerability note pubblicamente.
L'aggiornamento è la soluzione prescritta e l'advisory non indica alcun workaround temporaneo per Node.js relativo alla vulnerability di Brotli. Vercel ha dichiarato di aver implementato il 21 ottobre regole firewall per bloccare l'attacco tramite richieste in entrata, ma tali regole non coprono le risposte compresse con Brotli recuperate da server esterni da parte di un'applicazione e non sostituiscono gli aggiornamenti. Per le aziende che necessitano di assistenza in questo lavoro, AEU-I offre servizi IT, infrastrutturali e di consulenza con la sicurezza come priorità. I gestori di siti web dovrebbero verificare la versione di Node.js effettivamente utilizzata da ogni applicazione, incluse le distribuzioni gestite o containerizzate, anziché presumere che un aggiornamento del sistema operativo abbia modificato il runtime dell'applicazione.