Vai al contenuto
Entra su Telegram

Home / Allarme

Allarme

Brotli in Node.js e Bun: una risposta HTTP può corrompere la memoria

Danilo Giudice · 23 ottobre 2026

NON È UN PAESE PER VECCHI NODE (CIT.)

Se sulla tua macchina gira un Node.js precedente al 21 ottobre, una risposta HTTP compressa in Brotli e costruita apposta può corrompere la memoria del processo ed eseguire codice: è la CVE-2026-111497, severità alta. Lo stesso vale per Bun prima della 1.4.4.

Il meccanismo è semplice: fetch() di Node e di Bun decomprime da solo ogni risposta con Content-Encoding: br. Il decoder della libreria Brotli di Google, che entrambi includono, non rifiuta un block switch non valido e scrive oltre il buffer (out-of-bounds write). Lo stesso percorso esiste per Express 5 e body-parser 2, che decomprimono i body in ingresso, e per l’input non fidato passato a node:zlib. Un agente che fa fetch di URL arbitrari passa ogni risposta al decoder, dentro un processo che ha già shell, file e token.

Il runtime però non è uno solo. Claude Code, nella versione nativa, contiene un suo Bun; altri agenti si installano un loro Node. Aggiornare il Node di sistema non tocca quelli incorporati negli strumenti, e aggiornare Claude Code non tocca il Node di sistema. Nemmeno npm audit aiuta: controlla le dipendenze, non il binario del runtime.

L’obiezione migliore che si possa fare è che l’esecuzione di codice non è dimostrata: la scheda del CVE scrive «potentially», i PoC su GitHub si contraddicono e non risultano exploit in the wild. Vero, ma crash e lettura della memoria del processo sono già nella scheda, Google assegna 9,2 (CVSS 4.0) e la correzione nel repository di Brotli è pubblica dal 27 febbraio: 236 giorni prima del rilascio di Node.js.

  • Versioni corrette
    Node.js 22.23.4, 24.22.1 e 26.12.1 (21 ottobre, 10 CVE, 4 alte); Bun 1.4.4 (22 ottobre). Le linee 25, 23, 21, 20 e precedenti non ricevono la correzione.
  • Claude Code
    Il changelog non cita Brotli. Nei binari il nuovo errore BROTLI_DECODER_ERROR_FORMAT_BLOCK_SWITCH compare dalla 2.1.308; la stringa «Bun v1.4.4» c’è anche nella 2.1.304, quindi non prova nulla.
  • PoC
    «Node2Shell»: Ron Masas (Imperva) dichiara esecuzione di codice con un server Express 5 e app.use(express.json()); altri PoC arrivano solo al crash. Al 22 ottobre nessuno sfruttamento in the wild.
  • Chi l’ha trovato
    OpenAI Codex Security (Khai Tran, Sylvie Mayer), secondo l’avviso di Node.js.

La mia tesi: un agente con accesso shell va trattato come un server esposto, perché scarica contenuti da URL che non controlli dentro un processo con le tue credenziali. Inventario di tutti i runtime, aggiornamento subito, fetch non fidati solo in sandbox.

Stamattina ho fatto l’inventario sulla mia macchina. Claude Code 2.1.309 si era già aggiornato da solo e include la correzione. Il resto no: which -a node ha trovato tre Node, tutti vulnerabili (il 22.22.3 di Hermes Agent, primo nel PATH, il 24.12.0 dell’installer ufficiale e il 26.4.0 di Homebrew), più Bun 1.3.14. Il prompt per fare lo stesso controllo è nei commenti, e chiede conferma prima di ogni aggiornamento.

Brotli in Node.js e Bun: una risposta HTTP può corrompere la memoria

Se sei arrivato fin qui, il prossimo non perderlo

Su Telegram ti scrivo quando esce un pezzo nuovo o c’è una falla da correggere subito.

Entra su Telegram
Il personaggio indica l’invito, con il pappagallo sulla spalla destra
CondividiLinkedInTelegram
Fonti

Avviso di sicurezza di Node.js del 21 ottobre 2026 (nodejs.org/en/blog/vulnerability/october-2026-security-releases); analisi di Aikido, 22 ottobre; Bun v1.4.4, 22 ottobre (bun.com/blog/bun-v1.4.4) e issue oven-sh/bun #46352; commit google/brotli 0ed4268a del 27 febbraio 2026; changelog di Claude Code; post di Ryan Shea e Ron Masas su X, 22 ottobre.

Leggi anche