Node.js corregge vulnerabilità critiche per DoS e crash del processo

Node.js corregge vulnerabilità critiche per DoS e crash del processo

Node.js ha appena patched vulnerabilità gravi che mettono a rischio i tuoi server. Se usi Node.js per applicazioni web, aggiorna subito alla versione 20.20.2 ‘Iron’ LTS o alle equivalenti per le altre branch. Questo update del 24 marzo 2026 risolve problemi che permettono attacchi Denial of Service (DoS) remoti e crash improvvisi del processo, senza bisogno di autenticazione. In pochi minuti puoi scaricare i binari per Windows, macOS, Linux e altri sistemi dal canale ufficiale.

Queste correzioni sono cruciali per chiunque gestisca server TLS, HTTP/2 o utilizzi funzionalità crittografiche. Un attaccante remoto potrebbe sfruttare queste falle per esaurire risorse o fermare i tuoi servizi. La soluzione rapida: verifica la tua versione e aggiorna oggi stesso.

Perché è importante per te

Node.js è alla base di milioni di applicazioni web. Le vulnerabilità corrette includono errori nel gestione TLS, perdite di memoria in HTTP/2, attacchi HashDoS tramite V8 e altro. Senza update, i tuoi server sono esposti a exploit che causano crash remoti o esaurimento risorse. Gli sviluppatori raccomandano l’upgrade prioritario, specialmente per server pubblici.

Impatto pratico

  • Server TLS pubblici: Alto rischio di crash.
  • Applicazioni HTTP/2: Possibili memory leak.
  • Parsing JSON: Degrado performance.
  • Modello di permessi: Bypass di restrizioni filesystem.

Passi immediati:

  • Controlla la versione con node -v.
  • Scarica l’update appropriato.
  • Riavvia i processi.

Ora entriamo nei dettagli tecnici per chi vuole approfondire.

Approfondimento tecnico

Questo rilascio security copre sette CVE, con enfasi su fix per branch LTS e current. Ecco una panoramica completa.

CVE-2026-21637 (Alta): Crash remoto via TLS SNICallback

La falla più critica è una correzione incompleta di una precedente vulnerabilità TLS. Il meccanismo di gestione errori TLS non protegge le invocazioni SNICallback da eccezioni sincrone. Un client TLS malizioso invia un valore servername inaspettato, causando un’eccezione non gestita che crash il processo Node.js.

Impatto: Colpisce versioni 20.x, 22.x, 24.x, 25.x su server TLS con SNICallback personalizzato. Non richiede autenticazione.

Fix: Wrapping in try/catch per SNICallback, simile a quanto già fatto per ALPN e PSK callback. Contributo di Matteo Collina.

CVE-2026-21714 (Media): Memory leak in HTTP/2 flow control

Server HTTP/2 vulnerabili a frame WINDOW_UPDATE malformati su stream 0, che attivano NGHTTP2_ERR_FLOW_CONTROL. Questo causa una perdita di memoria cumulativa su connessioni ripetute, portando a DoS per esaurimento risorse.

Fix: Gestione esplicita del codice errore nghttp2 nel layer source di Node.js. Autore: RafaelGSS.

CVE-2026-21717 (Media): HashDoS su V8 tramite collisioni array index

Il meccanismo di hashing stringhe in V8 converte stringhe integer-like nei loro valori numerici, rendendo prevedibili le collisioni hash. Un payload craftato, spesso via JSON.parse() su input non fidato, causa degrado performance estremo (HashDoS).

Fix: Applicato su deps, build e test. Contributo di Joyee Cheung.

CVE-2026-21713 (Media): Timing oracle in verifica HMAC

Nel Web Cryptography API, la verifica HMAC usa memcmp() non constant-time, leakando informazioni temporali proporzionali ai byte matching. Sotto misurazioni ad alta risoluzione, diventa un timing oracle per inferire chiavi HMAC.

Fix: Sostituzione con primitive timing-safe già nel codebase. Autore: Filip Skokan.

Bypass del modello di permessi

  • CVE-2026-21715 (Bassa): Con --permission e --allow-fs-read ristretto, fs.realpathSync.native() rivela esistenza file e risolve symlink fuori directory permesse.
  • CVE-2026-21716 (Bassa): Estensione a lib/fs/promises senza enforcement permessi.

Fix: Controlli permessi aggiunti. Autore: RafaelGSS.

CVE-2026-21710 (Media): Prototype pollution in header HTTP

Vettore di inquinamento prototipo nei header HTTP tramite oggetti non null-prototype per headersDistinct e trailersDistinct.

Fix: Uso di oggetti null-prototype.

CVESeveritàComponenteImpatto
CVE-2026-21637AltaTLS / SNICallbackCrash remoto processo
CVE-2026-21717MediaV8 / JSONHashDoS / CPU exhaustion
CVE-2026-21713MediaWeb Crypto / HMACTiming oracle
CVE-2026-21714MediaHTTP/2Memory leak / DoS
CVE-2026-21710MediaHTTP headersPrototype pollution
CVE-2026-21716Bassafs/promisesDisclosure path FS
CVE-2026-21715BassarealpathDisclosure path FS

Versioni patched

  • 20.20.2 (Iron LTS)
  • 22.22.2
  • 24.14.1
  • 25.8.2

Disponibili per x64, ARM, PPC, s390x, AIX, Windows, macOS, Linux.

Raccomandazioni per sviluppatori

  • Priorità alta per server TLS esposti.
  • Testa in staging prima del deploy.
  • Monitora log per eccezioni non gestite.
  • Usa tool come npm audit per dipendenze.

Questo update rafforza la sicurezza di Node.js contro minacce moderne. Mantieniti aggiornato per evitare interruzioni.

Approfondimento tecnico per esperti

Per un’analisi più profonda:

  • SNICallback exploit: Simula con un client OpenSSL: openssl s_client -servername 'malicious\x00' -connect host:443. L’eccezione bypassa handler TLS.

  • HTTP/2 DoS: Frame WINDOW_UPDATE su stream 0 con delta invalido attiva loop nghttp2 non gestito.

  • V8 HashDoS: Array di stringhe come ['1','1','1'...] causa collisioni in hash table, O(n^2) worst-case.

  • HMAC timing: Misura con process.hrtime(); differenza >10ns indica match parziale.

  • Permessi: fs.realpathSync.native('/symlink/outside') ignora --allow-fs-read.

Codice fix esemplificativo per SNICallback:

const tls = require('tls');
server.on('tlsClientError', (err, tlsSocket) => { /* handle */ });
// Pre-fix: sync throw crash
// Post-fix:
function safeSNICallback(servername, cb) {
  try {
    originalSNICallback(servername, cb);
  } catch (e) {
    cb(null, null); // graceful
  }
}

Simile per altri fix. Contribuisci su GitHub per future security.

(Conta parole: circa 1050)

Fonte: https://cybersecuritynews.com/node-js-patches-multiple-vulnerabilities/

Torna in alto