Non pensare a un elefante!
Considerazioni personali su linguaggio e codice a partire da un attacco hacker (riuscitissimo) contro Claude Code
⏱️ Tempo di lettura: ~11 minuti
TL;DR. Microsoft ha scoperto, e Anthropic ha già corretto, un modo per convincere Claude Code, mentre lavora dentro GitHub, a leggere ed esfiltrare credenziali riservate: istruzioni nascoste in un commento HTML, travestite da innocuo controllo di conformità. Seguono ragionamenti personali su come il linguaggio naturale stia diventando un’interfaccia di esecuzione e si finisce dalle parti di Austin e nelle paludi della PNL. Il punto finale, come sempre, lo mette Lacan: il linguaggio ha sempre avuto una “componente” esecutiva: oggi l’abbiamo “cablata” dentro le macchine, vulnerabilità incluse. Morale: mai fidarsi del testo. Neppure di questo.
Oops 01
[cosa è successo, versione breve]
A inizio giugno 2026 il team di Microsoft Threat Intelligence ha pubblicato una ricerca su una vulnerabilità di Claude Code, l’agente di coding di Anthropic, quando viene integrato nelle pipeline di automazione di GitHub.
Un attaccante scriveva un commento su GitHub e l’agente AI, leggendolo, andava a recuperare le credenziali segrete dell’ambiente di build e provava a farle uscire. Nessuno ha forzato un server, indovinato una password, sfruttato un overflow di memoria. Hanno scritto del testo in linguaggio umano.
Il bug è già stato corretto da Anthropic, ma la vicenda merita più di una nota di cronaca.
Oops 02
[cosa è successo, versione tecnica (salta, se detesti il gergo da informatici)]
Claude Code può girare dentro una pipeline CI/CD1: legge una issue o una pull request, propone correzioni, a volte apre commit. Per farlo, deve leggere contenuti scritti da estranei e ha a disposizione strumenti molto potenti e accesso ai segreti del runner2: chiavi API, token cloud, credenziali di produzione.
L’attacco ricostruito da Microsoft sfrutta tre pieghe del sistema, tutte molto istruttive, se ti piace il genere.
Primo: le istruzioni malevole erano nascoste in un commento HTML3, quindi invisibili a chi guarda la pagina nel browser, ma perfettamente leggibili dal modello, che processa il markdown grezzo.
Secondo: erano camuffate da innocua “compliance review”, una richiesta di controllo formale, così da non somigliare a un comando.
Terzo, ed è il dettaglio più raffinato: lo strumento di lettura del file system non era isolato e poteva quindi arrivare a leggere le variabili d’ambiente del processo, dove si trovava la ANTHROPIC_API_KEY. Poiché sia il filtro di sicurezza del modello sia lo scanner di GitHub avrebbero riconosciuto e bloccato una chiave nel formato standard, l’istruzione diceva al modello di tagliare i primi caratteri della stringa prima di stamparla4: un piccolo trucco di “lavaggio” che neutralizza la firma riconoscibile. A quel punto la chiave decapitata poteva uscire e l’attaccante non doveva far altro che riattaccarci il prefisso.
Cronologia ordinata: segnalazione tramite HackerOne il 29 aprile 2026, patch nella versione 2.1.128 di Claude Code il 5 maggio, pubblicazione della ricerca il 5 giugno. Tempi di risposta più che adeguati.
Come nel caso della lancia di Achille, ciò che ferisce è ciò che cura: Microsoft ha trovato la falla facendosi aiutare da un modello AI guidato dai ricercatori. Lo stesso “linguaggio che pilota la macchina” stava da entrambe le parti del tavolo da gioco.
Nuove forme per vecchi problemi
Mi è capitato di leggere che l’informatica avrebbe “separato rigidamente dati e istruzioni” e che oggi gli LLM stanno demolendo questo confine. È una balla fenomenale. Quel confine non è mai stato pulito: fin dall’architettura di von Neumann5, programmi e dati abitano la stessa memoria, ed è esattamente questa promiscuità a rendere possibile, da settant’anni, l’intera famiglia degli attacchi per iniezione. Ad esempio, la SQL injection (vecchia scuola : ) infila comandi dove il programma si aspetta un nome utente. Gran parte della disciplina della sicurezza informatica non è altro che la lunga, ostinata guerra per ricostruire un confine che il calcolatore, per come è fatto, tende a far evaporare.
In un LLM il “canale” è la finestra di contesto, e lì dentro il prompt di sistema, le istruzioni dello sviluppatore e il commento scritto dallo sconosciuto sono tutti, indistintamente, token a cui il modello presta attenzione. Non esiste un muro architetturale tra loro. Esistono mitigazioni, gerarchie di istruzioni, il filtro di sicurezza che l’attacco di Microsoft ha dovuto aggirare “lavando” la chiave, le sandbox, e princìpi di progettazione come la Rule of Two6 o la lethal trifecta7, ma sono tutte difese probabilistiche, non barriere assolute.
La vera novità, allora, non è che il linguaggio comandi: è quale linguaggio. Il codice di un “vecchio” attacco aveva, scusa il bisticcio, l’aspetto di un codice e questo lo rendeva, almeno in linea di principio, sospettabile. Adesso un attacco può avere l’aspetto di una frase scritta in bell’italiano.
Vi dichiaro marito e moglie
Prima riflessione da un punto di vista più interessato al linguaggio che non a GitHub.
L’idea che dire sia fare non l’abbiamo scoperta con gli agenti AI: l’aveva messa a fuoco J. L. Austin8 settant’anni fa. Quando un officiante dice “vi dichiaro marito e moglie”, quando un giudice dice “la condanno”, quando un capo dice “sei licenziato”, le parole non descrivono uno stato di cose: lo producono. Sono enunciati performativi: l’enunciazione è già l’azione. Una porzione enorme della nostra realtà sociale come promesse, contratti, voti, sentenze, dichiarazioni di guerra, è fatta letteralmente di linguaggio che esegue.
Cosa cambia con un LLM, allora? Cambia che salta il guardiano. Il performativo di Austin funziona solo se c’è l’officiante giusto, nel contesto giusto, con l’autorità riconosciuta. “Vi dichiaro marito e moglie” detto da me a due passanti non sposa nessuno.
La forza performativa, nel mondo umano, è incanalata da istituzioni, ruoli, rituali.
In un agente che esegue, quell’incanalamento non c’è: qualsiasi frase, scritta da chiunque, in un commento qualunque, può acquisire forza esecutiva. Abbiamo costruito una macchina performativa senza prete e senza tribunale. Ogni stringa può essere un ordine, e l’unica cosa che decide se lo è davvero è la statistica di un forward pass.
Nelle paludi della PNL
(che aveva quasi ragione, ma sul soggetto sbagliato)
La programmazione neurolinguistica9 nasce negli anni Settanta dall’idea che esista una ideale concatenazione tra neuro (i processi del sistema nervoso), linguistico (il linguaggio) e programming (le strategie comportamentali apprese).
I padri della disciplina, Bandler e Grinder, attingono direttamente alla cibernetica: Gregory Bateson10, figura centrale di quel pensiero, firma la prefazione del loro primo libro e li introduce a Milton Erickson; sull’onda dell’entusiasmo, arrivano a dichiarare che l’unità di analisi della comunicazione è il ciclo di feedback retroattivo. Il termine stesso “neuro-linguistica” risale a Korzybski11 e al suo famoso detto “la mappa non è il territorio”. Tradotto: il linguaggio sarebbe il linguaggio di programmazione della bio-macchina umana. Cambi le parole, riscrivi il comportamento.
Bel sogno. Che funziona solo un po’ e non come promette. Le revisioni della letteratura sono impietose: Witkowski, esaminando 63 studi indicizzati, trova che la stragrande maggioranza è metodologicamente fragile e che il sostegno empirico ai meccanismi-chiave della PNL semplicemente non c’è; la revisione sistematica di Sturt e colleghi, pubblicata sul British Journal of General Practice, conclude che non esistono prove robuste di effetti della PNL sugli esiti di salute. La PNL, come tecnica per “programmare le persone con le parole”, è in larga parte una promessa non mantenuta.
Ma è qui che il caso Claude Code si fa interessante. Il sogno della PNL era falso sul soggetto sbagliato. Non siamo riusciti a programmare gli esseri umani con il linguaggio (per lo meno, non quanto avremmo voluto) ma abbiamo costruito macchine che sono programmate dal linguaggio. E così facendo abbiamo ereditato, dentro quelle macchine, esattamente la vulnerabilità che il sogno aveva sempre implicato senza dirlo: se il linguaggio è codice, allora il linguaggio è anche codice hackerabile.
Cambia le parole e cambierai il mondo. Detto di un cervello, è una metafora che le evidenze scientifiche non confermano del tutto. Detto di un LLM, è una descrizione tecnica sorprendentemente accurata. Il punto non è che quella corrente abbia ragione sulla mente, ma la sua formula è il miglior ritratto involontario di ciò che è davvero una macchina linguistica.
C’è però un ponte tra l’umano e il digitale che regge anche sul piano empirico ed è il più elegante e il più divertente. Lo firma George Lakoff12.
Non pensare a un elefante!
Non puoi.
Per capire la negazione devi prima attivare il frame “elefante”. La comprensione non è mai inerte: capire una parola significa già, neurologicamente, mettere in moto qualcosa che non puoi scegliere di non mettere in moto.
Ora guarda il modello: non esiste, in un singolo passaggio, una modalità “leggo ma non elaboro”. L’agente non può “vedere” l’istruzione iniettata e poi decidere a freddo di ignorarla, perché comprensione ed elaborazione avvengono nello stesso atto.
Questa è la rima profonda tra noi e loro: comprendere è già, in parte, eseguire. Il “linguaggio come interfaccia di esecuzione”, vale in maniera ineludibile (per ora) per il silicio e vale, con forza diversa e assai più disordinata, anche per la nostra carne.
Chi ha scritto il mio/tuo prompt?
L’idea che il linguaggio ci esegua è, in forma molto radicale, una tesi psicoanalitica. Per Jacques Lacan13 non siamo noi a parlare il linguaggio, è il linguaggio a parlare noi. L’inconscio, recita la sua formula più celebre, è strutturato come un linguaggio; e l’ordine Simbolico14, cioè la rete di significanti, leggi e parole in cui veniamo gettati alla nascita, ci precede, ci costituisce come soggetti e continua a determinarci a nostra insaputa.
Prima di essere uno strumento che usiamo, il linguaggio è una struttura che ci usa.
Il seminario in cui Lacan elabora l’autonomia del Simbolico, nell’anno 1954-1955, ha come tema portante proprio la cibernetica. Lacan discute le macchine dell’informazione e gli automi a stati finiti, tiene una conferenza intitolata «Psicoanalisi e cibernetica, ovvero sulla natura del linguaggio» e arriva a leggere La lettera rubata di Poe come un meccanismo che fa circolare il significante a prescindere dalle intenzioni dei personaggi. La sua intuizione: l’ordine simbolico funziona da solo, nel reale, indipendentemente da ogni soggettività, come un automa che esegue la propria sequenza.
La stessa cibernetica delle conferenze Macy che, vent’anni dopo, Bateson avrebbe trasmesso alla nascente PNL, Lacan la stava già metabolizzando dentro la psicoanalisi, e ne traeva una conclusione speculare: il soggetto è, in parte, l’effetto di una macchina linguistica che gira senza chiedergli il permesso.
Se ha ragione, allora il prompt injection più riuscito di sempre è quello che ci ha costituiti come soggetti parlanti. La macchina del 2026 non inventa nulla: esteriorizza in silicio, e finalmente in forma ispezionabile, una condizione che la psicoanalisi già ci attribuiva.
C’è però una differenza che salva l’analogia dal diventare mistica: Lacan insiste che il linguaggio non è un codice: a differenza di un codice, nel linguaggio non esiste corrispondenza univoca e stabile tra segno e referente. È irriducibilmente ambiguo, scivoloso, plurivoco.
Un LLM tratta come potenziale istruzione un materiale che, per sua natura, non smette mai di significare troppe cose. Non è un difetto di programmazione: è ciò che accade quando si chiede al linguaggio degli umani di comportarsi come il codice delle macchine.
Non fidarti e chiedi educatamente
La lezione operativa è facilissima: per anni il mantra è stato “mai fidarsi dell’utente”, ora dobbiamo aggiornarlo in mai fidarsi del testo. Anche quando sembra una richiesta di revisione del codice. Soprattutto quando è scritto in un italiano, o in un inglese, perfetto. In termini di architettura significa non concedere mai a uno stesso agente, contemporaneamente, le tre cose della lethal trifecta: accesso a dati sensibili, esposizione a input non fidati e un canale per far uscire informazioni. Togli un vertice del triangolo e il triangolo non esiste più.
Ma la lezione più interessante è che abbiamo iniziato a condividere le nostre infrastrutture con entità che si pilotano a parole e che non siamo poi così diversi da loro: anche noi giriamo su un linguaggio di cui non siamo autori. Il caso Claude Code, in fondo, è soprattutto uno specchio.
E sì, per i nostalgici della cultura hacker old school, la più antica delle vulnerabilità resta sempre la stessa. Kevin Mitnick15 non bucava i sistemi, telefonava alle persone. Il layer più fragile è sempre stato quello che capisce il linguaggio naturale. La novità è che adesso ne abbiamo costruito uno nuovo, lo abbiamo messo in mezzo alle nostre pipeline di produzione, ed è molto educato.
Aspetta di fare tutto quello che saprai chiedergli nel modo giusto.
e se vuoi
Sitografia di riferimento
Con la sitografia, l’articolo eccede il limite di caratteri di Substack per un singolo post, quindi l’ho pubblicata a parte, qui.
CI/CD (Continuous Integration / Continuous Delivery): l’insieme di processi automatizzati con cui il codice scritto dagli sviluppatori viene integrato, testato e rilasciato di continuo. Le pipeline CI/CD eseguono questi passaggi senza intervento umano e, per farlo, custodiscono spesso credenziali molto sensibili.
Il runner è la macchina virtuale (di solito effimera) su cui GitHub Actions esegue i compiti di una pipeline. A seconda della configurazione riceve i contenuti del repository, i metadati di issue e pull request e una serie di segreti: token, chiavi cloud, chiavi API di terze parti.
Un commento HTML ha la forma <!-- testo --> e non viene mostrato quando la pagina è resa nel browser. Resta però nel testo sorgente, e un modello che legge il codice lo vede eccome: ideale per nascondere istruzioni a un occhio umano lasciandole leggibili alla macchina.
Le chiavi API di Anthropic iniziano con il prefisso sk-ant-. Lo scanner dei segreti di GitHub e i filtri di sicurezza del modello riconoscono quel pattern e bloccano l’output. Istruendo il modello a rimuovere i primi caratteri prima di stampare la stringa, l’attacco faceva sì che il testo emesso non corrispondesse più alla firma nota: bastava poi riattaccare il prefisso a monte.
L'architettura di von Neumann (anni Quaranta) è il modello di calcolatore in cui istruzioni e dati risiedono nella stessa memoria. È ciò che rende un computer flessibile, un programma può manipolare altri programmi come fossero dati, ma è anche la radice della porosità tra "codice" e "dato" che gli attacchi per iniezione sfruttano da sempre.
La Agents Rule of Two è il principio di progettazione, formulato in ambito Meta e ripreso da Microsoft, secondo cui un agente non dovrebbe mai detenere simultaneamente più di due di tre poteri: elaborare input non fidati, accedere a sistemi o segreti sensibili, modificare lo stato o comunicare verso l’esterno. È l’equivalente costruttivo della lethal trifecta vista dal lato della difesa.
La lethal trifecta (Simon Willison, 2025) descrive la combinazione esplosiva di tre capacità in uno stesso agente: accesso a dati privati, esposizione a contenuti non fidati e un canale per esfiltrare informazioni. Se un agente possiede tutte e tre, è vulnerabile per costruzione; togliendone una, l’attacco perde efficacia.
John Langshaw Austin (1911–1960), filosofo del linguaggio di Oxford. Nelle lezioni How to Do Things with Words (William James Lectures, Harvard 1955; pubblicate postume nel 1962) introduce gli enunciati performativi, quelli in cui dire è già fare, e la distinzione tra atto locutorio, illocutorio e perlocutorio. È il testo fondativo della teoria degli atti linguistici, poi sviluppata da John Searle.
PNL / NLP (Programmazione Neuro-Linguistica): approccio sviluppato negli anni Settanta da Richard Bandler e John Grinder, fondato sull’idea di “modellare” e riprodurre i pattern linguistici dei comunicatori d’eccellenza per modificare comportamento ed esperienza soggettiva. Sul piano empirico il suo statuto è molto contestato. In questo articolo non la considero come scienza validata ma come sintomo culturale dell’idea cibernetica di un linguaggio-codice della mente.
Gregory Bateson (1904–1980), antropologo ed epistemologo, figura centrale della cibernetica (le conferenze Macy). Influenzato da Korzybski, scrisse la prefazione a The Structure of Magic di Bandler e Grinder e introdusse i due a Milton Erickson. È il tramite diretto tra il pensiero cibernetico e la nascita della PNL.
Alfred Korzybski (1879–1950), fondatore della semantica generale, noto per la formula “la mappa non è il territorio”. A lui si fa risalire il primo uso del termine “neuro-linguistica” (intorno al 1941), poi confluito nel nome della PNL.
George Lakoff (1941), linguista cognitivo a Berkeley, tra i fondatori delle scienze cognitive. Con Mark Johnson, in Metaphors We Live By (1980), elabora la teoria della metafora concettuale: le metafore non sono ornamenti del linguaggio ma strutture del pensiero, che plasmano percezione e azione. Nei lavori successivi (Moral Politics, 1996; Don’t Think of an Elephant!, 2004) applica al discorso pubblico la nozione di frame, lo schema cognitivo che una parola attiva automaticamente.
Jacques Lacan (1901–1981), psicoanalista francese. La svolta verso il primato del Simbolico è fissata nel “Discorso di Roma”, Funzione e campo della parola e del linguaggio in psicoanalisi (1953), poi raccolto negli Écrits (1966), dove formula la tesi che attraverserà tutta la sua opera: l’inconscio è strutturato come un linguaggio (l’inconscient est structuré comme un langage). Per Lacan è la struttura del linguaggio a “parlare” il soggetto, non viceversa.
Nel lessico lacaniano il Simbolico è il registro del linguaggio, della legge e delle norme sociali: la rete di significanti, talvolta detta “grande Altro”, entro cui il soggetto si costituisce. L’unità di base, per Lacan (sulla scia di Saussure e Jakobson), non è il segno ma il significante; lo stesso inconscio è descritto come una catena di significanti.
Kevin David Mitnick, detto Condor (Los Angeles, 6 agosto 1963 – Las Vegas, 16 luglio 2023), è stato un programmatore e hacker statunitense che si è distinto per avere introdotto la tecnica dell’IP spoofing, ma soprattutto per le sue incredibili capacità nell’ingegneria sociale. Ha eseguito alcune tra le più ardite incursioni mai subite dai computer del governo degli Stati Uniti.

