Sicurezza
Usi agenti AI? Sei a rischio: il prompt per metterti al sicuro
Molti agenti AI, Claude Code compreso, girano su Node.js o Bun, e una pagina compressa costruita apposta può mandarli in crash e forse far eseguire comandi sul tuo computer: ti spiego come trovare ogni copia e aggiornarla
Danilo Giudice · 30 ottobre 2026

- Tipo
- Sicurezza: che cosa succede e che cosa fare subito
- Durata
- 9 min di lettura
- Livello
- Base
- Ti porti a casa
- Sapere se il tuo computer è esposto
- Le versioni da installare subito
- Un prompt che fa il controllo al posto tuo
Indice · 5 sezioni
Antefatto
Negli ultimi giorni è successo di tutto: il 21 ottobre PHP e Node.js hanno corretto insieme 12 vulnerabilità, 6 gravi. E PHP fa girare il 69 % dei siti di cui si conosce il linguaggio (W3Techs). Il 23 ottobre ho controllato il mio Mac: Claude Code si era già aggiornato da solo, ma c’erano tre copie di Node, tutte vulnerabili, più una di Bun. Ho creato un prompt per mettere al sicuro il mio computer (è in fondo).
Cosa fare subito
Se usi agenti AI, sei a rischio.
In sostanza: se usi agenti AI o uno strumento come Claude Code che naviga sul web, sei esposto a un difetto che può mandare in crash i tuoi programmi e forse permettere a qualcuno di eseguire comandi sul tuo PC.
I siti comprimono le pagine per farle viaggiare più leggere, un po’ come uno ZIP, e uno dei formati più usati è Brotli, creato da Google. La libreria che lo decomprime aveva un difetto: un file compresso malformato la faceva scrivere fuori dallo spazio di memoria previsto. Il difetto c’è in tutte le versioni uscite dal 2018 fino alla correzione del 21 ottobre, e Google gli ha dato 9,2 su 10 di gravità.
Quella libreria sta dentro Node.js e Bun, i programmi su cui girano molti agenti AI e strumenti per sviluppatori. Quando un agente scarica una pagina compressa in Brotli, la decomprime da solo, ma intanto ha accesso ai tuoi file, al terminale e alle chiavi dei servizi che usi.
Secondo la scheda ufficiale, chi attacca può mandare in crash il programma, leggerne la memoria e forse eseguire codice: su quest’ultimo punto, al 22 ottobre, i ricercatori non erano d’accordo. Il 27 ottobre però la CISA, l’agenzia americana per la sicurezza informatica, ha messo il difetto nel suo catalogo delle vulnerabilità già sfruttate.
Cosa fare
- Aggiorna gli agenti e gli strumenti AI che usi. Claude Code nella versione nativa si aggiorna da solo: con
claude --versioncontrolla di avere almeno la 2.1.308, la prima che sul mio Mac contiene la correzione. - Conta le copie di Node: nel Terminale,
which -a nodele elenca tutte (su Windows:where node). Ognuna deve essere almeno 22.23.4, 24.22.1 o 26.12.1, e Bun almeno 1.4.4. - Aggiorna quelle vecchie con lo strumento con cui le hai installate: Homebrew (
brew upgrade node bun), nvm oppure l’installer di nodejs.org. Le versioni 25, 23, 21, 20 e precedenti non hanno correzione: passa a una delle tre. - Se non vuoi farlo a mano, fallo fare all’agente: il prompt che trovi in fondo controlla tutto e chiede il tuo ok prima di ogni aggiornamento.
- Non scaricare da GitHub i codici che promettono di dimostrare l’attacco: non sai che cos’altro fanno sul tuo computer.
Se non hai mai installato strumenti per programmatori né agenti AI, probabilmente Node non ce l’hai: tieni comunque aggiornati sistema e app.
Dove sta il difetto e chi colpisce
Veniamo al dunque. La falla si chiama CVE-2026-111497: il CVE è il codice che identifica una vulnerabilità nel registro pubblico, e questo l’ha assegnato Google. Sulla scala di gravità CVSS 4.0 vale 9,2 su 10; Node.js, sulla sua scala, la classifica alta.
Node.js e Bun sono runtime, cioè i programmi che eseguono codice JavaScript fuori dal browser. Quando un agente che gira lì sopra deve leggere una pagina web, usa fetch(), la funzione che scarica un indirizzo.
Se il server risponde con l’intestazione Content-Encoding: br, che vuol dire «questa risposta è compressa in Brotli», fetch() la decomprime da sola. Lo fa con il decoder, la parte della libreria Brotli che decomprime, e Node.js e Bun ne includono una copia.
Il difetto sta lì.
Secondo l’avviso di Node.js, un block switch non valido (un comando del flusso compresso che cambia tipo di blocco) veniva trattato come un dato che doveva ancora arrivare, invece che come un errore di formato. Così il decoder continuava ad aggiungere byte in un buffer interno di otto byte, cioè uno spazio di memoria di misura fissa, e ci scriveva oltre la fine. È una scrittura fuori dai limiti, in inglese out-of-bounds write.
Lo stesso percorso esiste per i server. Express 5 e body-parser 2, due librerie molto usate per scrivere server in Node.js, decomprimono da sole i dati in arrivo compressi in Brotli (Aikido). Vale lo stesso per i dati non fidati passati a node:zlib, il modulo di compressione di Node.js, e in Bun anche per DecompressionStream("brotli") (issue #46352). E la libreria non sta solo lì: secondo Tenable, citata da Help Net Security, tra i progetti forse colpiti ci sono anche .NET, Envoy e i client HTTP di Python.
Per un agente il conto è semplice: fa fetch() di indirizzi che non controlli e passa ogni risposta al decoder, dentro un processo che ha già la shell (il terminale), i tuoi file e le chiavi dei servizi.
Il percorso
Da una pagina web alla memoria dell’agente
In Node.js e Bun, fetch() decomprime da sola ogni risposta Brotli.
Pagina web
Content-Encoding: br
fetch()
decomprime da sola
Decoder Brotli
block switch non valido
Memoria corrotta
processo con shell e file
Fonti: avviso Node.js e scheda CVE, ottobre 2026
Da una pagina web alla memoria dell’agente. In Node.js e Bun, fetch() decomprime da sola ogni risposta Brotli. 1. Pagina web (Content-Encoding: br), poi «risposta HTTP»; 2. fetch() (decomprime da sola), poi «dati compressi»; 3. Decoder Brotli (block switch non valido), poi «scrive fuori»; 4. Memoria corrotta (processo con shell e file). Fonti: avviso Node.js e scheda CVE, ottobre 2026.
Il runtime non è uno solo
Il guaio è che sullo stesso computer di runtime spesso ce n’è più d’uno. 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 i pacchetti di un progetto, non il binario del runtime.
Sul mio Mac 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. Il PATH è l’elenco delle cartelle in cui il sistema cerca i programmi: il primo che trova è quello che parte. Più Bun 1.3.14, giusto per non farsi mancare niente. Il 27 ottobre erano tutti aggiornati: Node 22.23.4, 24.22.1 e 26.12.1, e Bun 1.4.4.
Su Linux c’è un passo in più: su Debian e Ubuntu il Node dei pacchetti usa la libreria brotli di sistema, quindi va aggiornato anche il pacchetto brotli. Al 23 ottobre Debian lo dava ancora senza correzione. Le versioni corrette della libreria, secondo la scheda, sono la 1.0.10, la 1.1.1 e la 1.2.1, uscite il 21 ottobre.
Le versioni che servono
- Node.js 22.23.4, 24.22.1 o 26.12.1, del 21 ottobre. Lo stesso avviso corregge altre 9 vulnerabilità, 3 delle quali alte come questa. Le linee 25, 23, 21, 20 e precedenti non ricevono la correzione.
- Bun 1.4.4, del 22 ottobre.
- Claude Code 2.1.308, nella versione nativa. Chi l’ha installato con Homebrew, WinGet, apt, dnf o apk lo deve aggiornare a mano, perché lì l’aggiornamento automatico non è attivo di serie.
La soglia di Claude Code non viene da Anthropic: il changelog non cita Brotli, e per la 2.1.308 scrive solo «Bug fixes and reliability improvements». L’ho ricavata dai binari del mio Mac. Il nome del nuovo errore, BROTLI_DECODER_ERROR_FORMAT_BLOCK_SWITCH, manca nella 2.1.304 e nella 2.1.306 e c’è dalla 2.1.308. La stringa «Bun v1.4.4» invece c’è anche nella 2.1.304, quindi non prova niente.
Esecuzione di codice: da contestata a sfruttata
Sull’esecuzione di codice, la parte più grave, per qualche giorno le fonti non sono state d’accordo. La scheda del CVE scrive «potentially execute arbitrary code», cioè «potenzialmente eseguire codice arbitrario». L’avviso di Node.js la mette invece nel titolo: «permits remote code execution».
Al 22 ottobre i codici dimostrativi su GitHub (proof of concept, o PoC) non chiudevano la questione: il primo, secondo Aikido, eseguiva codice solo su una versione di prova indebolita apposta. Lo stesso giorno Ron Masas di Imperva ha dichiarato su X l’esecuzione di codice con un server Express 5. Il test di Imperva girava sull’immagine ufficiale di Node.js 24.22.0 per Linux arm64, e non riusciva a ogni tentativo. Attacchi reali segnalati, a quella data, nessuno.
Poi le cose sono cambiate. Secondo Help Net Security, ELLIO, una società che sorveglia il traffico degli attacchi, ha registrato traffico d’attacco reale con il PoC pubblico, che secondo ELLIO apre una shell sulle versioni vulnerabili. Il 27 ottobre la CISA ha aggiunto la falla al suo catalogo. La scheda del CVE, intanto, scrive ancora «potentially».
E chi l’ha trovata? Secondo l’avviso di Node.js, OpenAI Codex Security, con Khai Tran e Sylvie Mayer. C’è poi un dato che non dipende da nessuna dimostrazione: la correzione nel codice di Brotli è pubblica dal 27 febbraio, 236 giorni prima del rilascio di Node.js.
Le date
Corretta a febbraio, in Node.js 236 giorni dopo
2018 2 marzo: Brotli 1.0.3, la prima versione colpita
2026 27 febbraio: la correzione nel codice di Brotli
2026 21 ottobre: Node.js 22.23.4, 24.22.1 e 26.12.1
2026 22 ottobre: Bun 1.4.4
2026 27 ottobre: la CISA la segnala già sfruttata
Fonti: Brotli, Node.js, Bun, CISA
Corretta a febbraio, in Node.js 236 giorni dopo. 2018, 2 marzo: Brotli 1.0.3, la prima versione colpita; 2026, 27 febbraio: la correzione nel codice di Brotli; 2026, 21 ottobre: Node.js 22.23.4, 24.22.1 e 26.12.1; 2026, 22 ottobre: Bun 1.4.4; 2026, 27 ottobre: la CISA la segnala già sfruttata. Fonti: Brotli, Node.js, Bun, CISA.
Il prompt
Incollalo in una sessione nuova del tuo agente, per esempio Claude Code. Fa l’inventario di tutti i runtime, poi propone gli aggiornamenti e aspetta il tuo ok prima di ognuno; non disinstalla e non cancella niente.
Queste regole però sono testo, e un testo sposta una probabilità, non garantisce un esito: leggi ogni comando prima di dire sì. Per Docker, poi, il prompt indica i comandi per ricostruire le immagini, ma ricostruirle tocca a te, perché riavviare il container vecchio non basta.
Sei un assistente tecnico incaricato di verificare e mettere in sicurezza questa macchina rispetto a CVE-2026-111497 (scrittura fuori dai limiti nel decoder Brotli di Google, incluso in Node.js e Bun) e alle altre 9 vulnerabilità della security release Node.js del 21 ottobre 2026.
Esegui i passaggi in ordine, documenta ogni output e riassumi lo stato finale. Prima di ogni aggiornamento mostra il comando e aspetta il mio ok.
1. Inventario completo
• Mostra: node -v, which -a node (su Windows: where node) e la versione di ogni node trovato; bun -v e which -a bun; claude --version e claude doctor
• Cerca altri runtime: installazioni Node/Bun gestite da nvm, fnm, asdf, Volta o simili
• Identifica i tool AI e gli agenti presenti (Claude Code, Cursor, Codex, Aider, Open Interpreter, Continue, Hermes Agent ecc.) e verifica se usano un runtime incorporato: cerca le cartelle con un node o un bun propri
• Cerca gli eseguibili single-file (Node SEA, bun build --compile): incorporano il runtime e vanno ricompilati
• Controlla le immagini Docker: docker images | grep -E 'node|bun'
• Su Linux controlla la versione del pacchetto brotli di sistema: su Debian e Ubuntu Node usa quella
2. Aggiornamento Node.js
• Porta il Node di sistema e tutte le installazioni gestite alle versioni corrette: ≥ 22.23.4 / 24.22.1 / 26.12.1
• Le linee 25, 23, 21, 20 e precedenti non ricevono la correzione: proponi la migrazione a una linea supportata
• Usa il metodo adatto a come è installato (nvm, Homebrew, NodeSource, winget, installer ufficiale)
• Riavvia i processi Node attivi
3. Aggiornamento Bun e Claude Code
• Aggiorna Bun a ≥ 1.4.4 (bun upgrade, o brew upgrade bun se viene da Homebrew)
• Claude Code deve essere ≥ 2.1.308. Installazione nativa: claude update. npm: npm install -g @anthropic-ai/claude-code@latest. Homebrew: brew upgrade claude-code (o claude-code@latest). WinGet: winget upgrade Anthropic.ClaudeCode. apt, dnf, apk: aggiorna il pacchetto claude-code
• Aggiorna gli altri tool AI che includono un runtime proprio, dal loro canale ufficiale
4. Docker e ambienti containerizzati
• Segnala le immagini basate su versioni vulnerabili
• Indica i comandi per aggiornarle: docker pull node:24 (o il tag in uso), poi docker build --pull e nuovo deploy. Riavviare il container vecchio non basta
5. Pacchetti e sistema
• Aggiorna i package manager globali (npm, yarn, pnpm), se presenti
• Suggerisci l’aggiornamento del sistema operativo (apt, brew, winget, Windows Update, aggiornamenti di macOS)
• Nota: npm audit non copre questo bug, che è nel runtime e non nei pacchetti
6. Verifica finale e raccomandazioni
• Riesegui i controlli di versione su ogni runtime trovato
• Conferma che non restino runtime vulnerabili attivi
• Indica le azioni manuali rimaste
• Suggerisci le pratiche minime: isolare gli agenti quando possibile, non fare fetch di contenuti non fidati senza controlli, tenere attivi gli aggiornamenti automatici, non eseguire PoC trovati online
Non eseguire operazioni distruttive: niente disinstallazioni o cancellazioni. Alla fine riporta una tabella (runtime, percorso, versione prima e dopo, stato) e separa ciò che hai aggiornato da ciò che richiede intervento umano.Un agente è un server esposto
Quindi? Se il tuo agente ha accesso alla shell, trattalo come un server esposto: scarica contenuti da indirizzi che non controlli, dentro un processo con le tue credenziali. Inventario di tutti i runtime, aggiornamento subito, pagine non fidate solo in una sandbox, un ambiente isolato.
Il resto della settimana te lo ripeto io, a pappagallo
Io la seguo, tu il lunedì mattina sai cosa provare e cosa ignorare dell’AI, con le fonti per controllare.
Preferisci Telegram? Lì arrivano news e tutorial appena escono.
Avvisami su Telegram
Fonti
I fatti sono controllati il 23 ottobre 2026 e ricontrollati il 30 ottobre, quando ho aggiunto quello che è successo dopo: lo sfruttamento segnalato da ELLIO, il catalogo della CISA, le nuove versioni della libreria e i progetti colpiti oltre Node.js e Bun. Le versioni di Claude Code vengono dai binari installati sul mio Mac: 2.1.304, 2.1.306, 2.1.308 e 2.1.309.
- Node.js, «Wednesday, October 21, 2026 Security Releases», 21 ottobre 2026.
- CVE-2026-111497, «Out-of-Bounds Write in Google Brotli Decoder», scheda assegnata da Google, pubblicata il 22 ottobre 2026 e aggiornata il 27 ottobre.
- CISA, Known Exploited Vulnerabilities Catalog, CVE-2026-111497 aggiunta il 27 ottobre 2026.
- Google, repository di Brotli: il commit 0ed4268a «Detect and report invalid stream earlier», 27 febbraio 2026; le release 1.0.3, del 2 marzo 2018, e 1.0.10, 1.1.1 e 1.2.1, del 21 ottobre 2026.
- Bun, «Bun v1.4.4», 22 ottobre 2026, e la issue #46352, «Brotli decoder is missing the CVE-2026-111497 fix», chiusa il 22 ottobre 2026.
- S. Shah, «Node2Shell: Node.js Brotli vulnerability allows remote code execution (CVE-2026-111497)», Aikido, 22 ottobre 2026, aggiornato il 27 ottobre.
- Help Net Security, «Brotli bug reaches far beyond Node.js (CVE-2026-111497)», 27 ottobre 2026, aggiornato il 28 ottobre.
- R. Masas (Imperva), post su X del 22 ottobre 2026, e «Node2Shell: From Brotli Data to Remote Code Execution», blog di Imperva, 22 ottobre 2026.
- Anthropic, changelog di Claude Code e documentazione, «Advanced setup», consultati il 30 ottobre 2026.
- PHP, «Security advisory: Critical remote code execution vulnerabilities», 21 ottobre 2026.
- W3Techs, «Usage Statistics and Market Share of Server-side Programming Languages for Websites»: 69,3 % il 23 ottobre 2026.


