Come un repository altrui può dirottare Claude Code: 7 regole di protezione
MarkdownQuattro percorsi documentati di prompt injection indiretta tramite repository, GitHub, eventi Sentry e metadati MCP, con ricerche primarie e limiti del contenimento.
Leggi l’articolo completo
Punti chiave
Le ricerche pubblicate illustrano quattro percorsi di iniezione indiretta: istruzioni di installazione, contenuti GitHub, telemetria e metadati MCP. Le pubblicazioni risalgono a date diverse e riguardano client e permessi differenti. Qui trovi fonti primarie e contenimento pratico: nessun file di impostazioni garantisce immunità.
Documentazione di Ailoot: API, chiavi e configurazione.
Quattro percorsi documentati dal testo non attendibile alle azioni dell’agente
Punti chiave
Gli esempi riguardano periodi di ricerca e configurazioni diversi, non quattro scoperte in due settimane. Mostrano come materiale non attendibile influenzi gli strumenti dell’agente; difetti di implementazione, credenziali disponibili e permessi determinano l’esito.
Formalmente, si parla di prompt injection indiretta: l'istruzione malevola non arriva direttamente da te, ma attraverso i dati che l'agente elabora mentre svolge un'attività, per esempio un README di terzi, un messaggio di errore, un commento su GitHub o una risposta da un servizio esterno. Puoi dimenticare il termine subito dopo questo paragrafo: da qui in poi userò parole semplici.
Quattro esempi di ricerca discussi sotto:
- Un repository dall'aspetto innocuo è stato mostrato trasformarsi in una reverse shell.
- Il titolo di una Pull Request è stato mostrato dirottare tre agenti AI diversi contemporaneamente.
- È stato mostrato che un agente accettava una falsa segnalazione di errore da Sentry al posto di una reale.
- Una descrizione di uno strumento MCP è stata mostrata controllare il tuo agente con la stessa efficacia di un system prompt.
In che modo il README di un repository innocuo si trasforma in una reverse shell?
Punti chiave
Un proof of concept mostra che, se cloni un repository dall'aspetto normale e chiedi a Claude Code di eseguirlo, lui segue diligentemente le istruzioni di installazione. Un errore al primo avvio suggerisce un comando di “correzione” che in realtà risolve il record DNS dell'aggressore e avvia una reverse shell. La fonte dimostra la tecnica senza stabilire quanto sia stata usata negli incidenti reali.
Il proof of concept 0DIN del 25 giugno 2026 mostra questa catena, con passaggi apparentemente ordinari:
- Cloni un repository dall'aspetto normale e chiedi a Claude Code di eseguirlo.
- Il repository installa un pacchetto Python progettato per fallire al primo utilizzo.
- Il messaggio di errore suggerisce cortesemente un comando di “correzione”:
python3 -m axiom init. - Il comando
initeseguesetup.sh. - Lo script interroga un record DNS TXT (usato di solito per note relative a un dominio, ma il campo accetta testo qualsiasi). L'aggressore vi inserisce un comando codificato in base64 (un modo per trasformare qualsiasi dato in testo semplice senza spazi o caratteri speciali) e lo passa direttamente a bash.
- Il valore del record DNS può essere modificato in qualsiasi momento, dando all'aggressore una reverse shell interattiva con i permessi dell'utente e accesso a tutti i segreti sulla macchina.
Nel caso dimostrato il payload era recuperato a runtime da DNS: analizzare soltanto i byte del repository non rivelava il contenuto finale. Non dimostra impotenza di ogni scanner o controllo: esame dei dati recuperati, monitoraggio dei processi e restrizioni di rete possono rilevare o interrompere la catena. La fonte è un proof of concept, non una misura degli incidenti reali.
In che modo il titolo di una Pull Request ha dirottato tre agenti AI diversi?
Punti chiave
Il rapporto di ricerca Comment and Control, pubblicato il 15 aprile 2026 e aggiornato il 4 maggio, documenta percorsi distinti di iniezione da testo GitHub in Claude Code Security Review, Gemini CLI Action e Copilot Agent. Una riduzione di gravità non dimostra che tutta la classe sia corretta: il rapporto descrive risposte dei fornitori e una restrizione specifica degli strumenti Claude.
Il ricercatore descrive percorsi e risposte seguenti: è un rapporto storico, non una verifica di ogni versione attuale.
| Agente | Modalità d'ingresso dell'attacco | Dati divulgati | Stato attuale |
|---|---|---|---|
| Claude Code Security Review | Titolo della PR interpolato direttamente nel system prompt senza sanitizzazione | ANTHROPIC_API_KEY, GITHUB_TOKEN | Il ricercatore riferisce restrizione di ps e modifiche alla documentazione; gravità passata a None il 20 aprile 2026 |
| Gemini CLI Action | Una sezione “Trusted Content” contraffatta in un commento ha aggirato le istruzioni di sicurezza | GEMINI_API_KEY | Google ha aggiunto prompt di protezione separati al system prompt |
| GitHub Copilot Agent | Payload nascosto in un commento HTML invisibile nel Markdown | GITHUB_COPILOT_API_TOKEN, COPILOT_JOB_NONCE | GitHub lo considera un limite architetturale, non un bug |
Sono passati quasi cinque mesi tra la prima e l'ultima segnalazione di questo ciclo di divulgazione (la prima segnalazione su Claude Code risale al 17 ottobre 2025; l'ultima correzione di bug di GitHub Copilot è del 9 marzo 2026). Il cambio di gravità e le mitigazioni non dimostrano la chiusura completa di ogni payload. Il repository PoC del ricercatore documenta il percorso dimostrato per Claude; non eseguirne il payload contro sistemi reali. Il valore per te sta nello schema d'attacco: dati non verificati da GitHub entrano nell'agente, l'agente esegue comandi e i segreti vengono divulgati attraverso lo stesso GitHub; all'aggressore non serve alcun server esterno.
Bastano due analisi per vedere lo schema: non è praticabile correggere singolarmente ogni nuova scoperta; vulnerabilità di questo tipo emergono ogni due settimane. Scrivere esplicitamente le regole di sicurezza in CLAUDE.md e settings.json, invece di tenerle a mente, fa parte del context engineering: le imposti una volta e funzionano automaticamente in ogni nuova sessione di Claude Code, senza promemoria.
Una falsa segnalazione di errore di Sentry può prendere il controllo del tuo agente?
Punti chiave
Un aggressore invia un evento di errore falso a Sentry; l'agente richiede tramite MCP l'elenco delle issue, riceve l'evento malevolo insieme a quelli legittimi ed esegue il comando incorporato come “passaggio di correzione”. Il rapporto Agentjacking di Tenet, aggiornato il 17 giugno 2026, riferisce l’85% di sfruttamento nelle proprie verifiche controllate, con oltre 100 esecuzioni comprendenti Claude Code, Cursor e Codex. Identifica una registrazione Claude Code 2-1-161 del 2 giugno, senza elenco completo per modello, harness riproducibile, denominatore esatto o dettaglio per client. L’85% è un’osservazione aggregata del ricercatore, non la probabilità di compromissione di ogni installazione attuale.
Per l'attacco non serve altro che una chiave DSN di Sentry, un identificatore pubblico che molti progetti includono direttamente nel codice lato client:
Il meccanismo è semplice: uno sviluppatore chiede all'agente di esaminare gli errori Sentry aperti; l'agente li richiede tramite il server MCP, riceve un evento malevolo mescolato a quelli reali e legge il comando incorporato come un'istruzione attendibile per correggere l'errore, perché formalmente è proprio ciò che gli è stato chiesto di fare.
Tenet riferisce che i controlli esistenti non hanno generato allarmi nei suoi ambienti provati. Non dimostra esecuzione senza tracce ovunque: log di agenti/strumenti, telemetria degli endpoint e registri di rete possono rilevare le azioni successive. L’attacco parte da telemetria esterna e dipende da strumenti e permessi effettivi.
Perché la descrizione di uno strumento MCP è pericolosa quanto un system prompt?
Punti chiave
I metadati possono contenere istruzioni che influenzano il modello, senza equivalere automaticamente all’autorità del system prompt. MCPTox, presentato per la prima volta il 19 agosto 2025, valuta l’avvelenamento di strumenti MCP realistici e riporta sensibilità variabile per modello e configurazione. L’osservazione di maggiore sensibilità di modelli capaci vale per quel benchmark, non come legge universale.
La formulazione di Microsoft è la più precisa che abbia trovato su questo tema:
Questa tecnica è chiamata tool poisoning: un’istruzione nascosta nella descrizione di uno strumento innocuo induce l’agente ad agire di conseguenza.
Nel test citato, Claude 3.7 Sonnet ha ottenuto i migliori risultati di resilienza, pur rifiutando l’istruzione avvelenata in meno del 3% dei casi. L’osservazione sui modelli più capaci riguarda gli strumenti e le impostazioni di quel benchmark: non è una regola universale né una probabilità per le installazioni attuali.
Cosa hanno in comune gli attacchi e cosa può sfuggire al rilevamento?
Punti chiave
Ognuna delle quattro scoperte sfrutta lo stesso punto cieco: l'agente non distingue i “dati da analizzare” dalle “istruzioni da seguire”. Una scansione del solo repository può non vedere payload forniti in seguito da strumenti o rete. Il rilevamento resta utile, ma deve considerare il percorso completo. Combinalo con limiti a file, credenziali, strumenti e rete anziché affidarti al riconoscimento dell’istruzione da parte dell’agente.
La conclusione vale per tutte e quattro le scoperte: non ci si può fidare dell'aspetto normale del codice, perché ogni singolo passaggio dell'attacco è davvero innocuo. Limita le capacità effettive ed esamina le azioni proposte: rilevamento e contenimento coprono parti diverse dell’attacco.
Quali protezioni include già Claude Code e perché non bastano?
Punti chiave
Claude Code include protezioni integrate: analizza l'intero prompt alla ricerca di istruzioni sospette, usa finestre di contesto isolate per i contenuti web, verifica l'attendibilità al primo avvio in una nuova cartella e quando ci si connette a server MCP. Ma il flag --dangerously-skip-permissions, usato da molte persone per disattivare le fastidiose richieste di autorizzazione, disabilita tutte queste protezioni insieme.
Anthropic riconosce direttamente il problema nella sua documentazione, senza nasconderlo:
La prompt injection è una tecnica con cui un aggressore tenta di sovrascrivere o modificare le istruzioni di un assistente AI inserendo testo malevolo. Claude Code include diverse protezioni contro questi attacchi.
Secondo la documentazione, l'agente analizza l'intero prompt alla ricerca di istruzioni sospette, non approva automaticamente curl e wget, mantiene i contenuti web in una finestra di contesto separata per evitare che si mescolino con quella principale e richiede una conferma di attendibilità al primo avvio in una nuova codebase o alla connessione di un nuovo server MCP.
Ma c'è un'avvertenza netta, dichiarata senza mezzi termini da Anthropic:
La modalità bypassPermissions non offre protezione contro la prompt injection o le azioni involontarie.
Se hai mai avviato Claude Code con --dangerously-skip-permissions per esasperazione, per far sì che “smettesse di assillarti con le domande”, hai disattivato proprio tutti i meccanismi che avrebbero potuto fermare i quattro attacchi discussi sopra. Tengo deliberatamente disattivato questo flag, anche quando Claude Code me lo chiede per la decima volta in una sessione: è fastidioso, ma quelle domande sono il confine tra “l'agente ha letto un testo sospetto” e “l'agente lo ha eseguito”. Una configurazione sensata per chi non programma consiste nella modalità di autorizzazione standard (default o acceptEdits) con la sandbox attiva: le normali modifiche ai file avvengono senza richieste aggiuntive, mentre i comandi del terminale non possono uscire fisicamente dalla sandbox, anche se l'agente è stato ingannato.
Come si attiva la modalità sandbox e si colma la lacuna che lascia aperta per impostazione predefinita?
Punti chiave
Il comando /sandbox in una sessione di Claude Code limita le posizioni in cui l'agente può scrivere e i domini che può contattare. Su macOS funziona subito; Linux e WSL2 richiedono i pacchetti bubblewrap e socat. Un dettaglio importante: per impostazione predefinita, la sandbox non impedisce di leggere file come ~/.ssh; questa protezione va attivata separatamente.
Per attivarla in modo permanente per tutti i progetti, apporta una modifica a ~/.claude/settings.json:
{
"sandbox": { "enabled": true }
}
Per impostazione predefinita, i comandi in sandbox possono scrivere solo nella directory di lavoro del progetto e nella directory temporanea della sessione. L'accesso alla rete passa da un proxy: nessun dominio è consentito in anticipo e Claude Code chiederà conferma al primo contatto con un nuovo dominio. Anthropic afferma che ciò riduce nettamente le richieste di autorizzazione, dell'84% secondo le misurazioni interne dell'azienda, perché la sandbox gestisce autonomamente alcuni casi sicuri invece di chiederti conferma ogni volta.
La lacuna lasciata aperta dalle impostazioni standard: per impostazione predefinita la sandbox limita la scrittura, ma non impedisce di leggere file come ~/.aws/credentials e ~/.ssh. Sono proprio i file e le variabili d'ambiente presi di mira dagli attacchi citati sopra. Colma questa lacuna con un blocco separato nello stesso file:
{
"sandbox": {
"enabled": true,
"credentials": {
"files": [
{ "path": "~/.aws/credentials", "mode": "deny" },
{ "path": "~/.ssh", "mode": "deny" }
],
"envVars": [
{ "name": "GITHUB_TOKEN", "mode": "deny" },
{ "name": "NPM_TOKEN", "mode": "deny" }
]
}
}
}
Il punto è che, anche se la reverse shell della prima analisi si apre dentro la sandbox, queste variabili e questi file vengono rimossi materialmente dall'ambiente del processo prima dell'avvio: non resta nulla da rubare.
Quali regole permissions.deny dovresti aggiungere oggi?
Punti chiave
permissions.deny in settings.json blocca azioni specifiche a livello di regole invece di analizzarne l'intento; Anthropic garantisce esplicitamente che una regola deny prevale sempre su una regola allow. Le regole deny limitano azioni corrispondenti degli strumenti, senza essere un confine di accesso del sistema operativo: comandi indiretti e altri strumenti richiedono controlli propri.
Un insieme minimo per chi non programma, che copre contemporaneamente i principali obiettivi di tutti e quattro gli attacchi:
{
"permissions": {
"deny": [
"Read(~/.ssh/**)",
"Read(~/.aws/credentials)",
"Read(.env)",
"Bash(curl *)",
"Bash(wget *)",
"Bash(sudo *)"
]
}
}
Secondo la documentazione di Claude Code, le regole deny hanno sempre la precedenza sulle regole allow. Quindi, anche se tu o l'agente avete accidentalmente consentito un accesso più ampio altrove, una regola deny specifica continua ad applicarsi per prima. La precedenza vale per richieste corrispondenti. Non dimostra che un segreto sia irraggiungibile da ogni sottoprocesso o strumento: usa anche restrizioni forzate del file system e dell’ambiente.
Claude Code dispone anche di una modalità auto, in cui un modello classificatore separato controlla le azioni prima che vengano eseguite: non è lo stesso modello che conversa con te. Per impostazione predefinita blocca, tra le altre cose, proprio lo schema “scarica il codice e poi eseguilo subito” (curl | bash). Anthropic avverte esplicitamente che si tratta di una modalità sperimentale che riduce il numero di richieste ma non garantisce la sicurezza da sola: considerala un livello aggiuntivo, non un sostituto della sandbox e di permissions.deny.
Come controllare un repository e un server MCP prima di affidargli il tuo agente?
Punti chiave
Prima di chiedere a Claude Code di eseguire un repository di terzi, controlla la sua età, la cronologia dei commit e la provenienza del link. Prima di installare un server MCP, usa solo fonti attendibili e ricorda che Anthropic stessa non controlla la sicurezza dei server di terzi. Entrambe le verifiche richiedono un paio di minuti e coprono proprio i punti d'ingresso usati nei quattro attacchi discussi sopra.
Ecco una breve lista di controllo da seguire prima di affidare repository all'agente:
- Non passare direttamente all'installazione da un link in un'email, un post o una recensione proveniente da una fonte sconosciuta: è così che possono essere distribuiti questi repository.
- Se l'installazione produce un errore con l'istruzione “esegui il comando X per correggerlo”, leggi cosa fa davvero X prima di consentire a Claude Code di eseguirlo. L'istruzione nell'analisi precedente sembrava del tutto normale: era proprio questo il punto.
- Controlla l'età del repository e la cronologia dei commit, non solo il numero di stelle: ai repository appena creati si possono facilmente assegnare stelle false proprio per questo tipo di attacco.
- Se il repository è sconosciuto, esegui l'installazione in una macchina virtuale, non sul tuo computer di lavoro con chiavi reali. È una raccomandazione esplicita di Anthropic per lavorare con servizi esterni.
La posizione di Anthropic sui server MCP è espressa apertamente:
Consigliamo di scrivere i propri server MCP o di usare server di fornitori di cui ci si fida. Anthropic esamina i connettori rispetto ai propri criteri di inserimento prima di aggiungerli alla directory, ma non esegue verifiche di sicurezza né gestisce server MCP.
Questo significa che sei tu, e non la piattaforma su cui li hai installati, a dover controllare i server MCP di terzi. Alcuni team, soprattutto startup di sicurezza, stanno già sviluppando strumenti per farlo: scanner di configurazioni MCP che cercano descrizioni avvelenate e il “pinning” degli strumenti, che salva l'hash della descrizione al momento della prima installazione e segnala qualsiasi modifica successiva. Queste tecnologie sono giovani, quindi è troppo presto per affidarsi a esse come unica protezione, ma vale la pena seguirle, soprattutto se colleghi server MCP alla produzione. Per queste connessioni, puoi bloccare la versione di ogni pacchetto e registrare in un log di audit l'impronta digitale delle descrizioni degli strumenti.
7 regole di protezione: la lista di controllo di oggi
Punti chiave
Tutto ciò che contiene questa guida si riassume in sette azioni concrete: tre modifiche a un solo file settings.json (sandbox, credentials, permissions.deny) e quattro abitudini per lavorare con codice, errori e server MCP di altre persone. Nessuna richiede conoscenze specialistiche: l'intera lista richiede meno di 20 minuti.
- Attiva la modalità sandbox (
/sandboxo"sandbox": {"enabled": true}in~/.claude/settings.json) e aggiungi un bloccocredentialsche impedisca di leggere~/.sshe~/.aws/credentials. - Aggiungi regole
permissions.denyper impedire la lettura di file segreti e l'esecuzione di comandi bash pericolosi (curl,wget,sudo): una regola deny prevale sempre su una allow. - Non eseguire mai
--dangerously-skip-permissionscon codice di terzi o non verificato: disattiva tutte le protezioni insieme, comprese quelle che avrebbero potuto fermare proprio questi attacchi. - Non lasciare che Claude Code esegua automaticamente un comando di “correzione” suggerito da un messaggio di errore: prima leggi cosa fa davvero.
- Installa server MCP solo da fonti di cui ti fidi e ricorda che Anthropic non ne verifica la sicurezza per conto tuo.
- Separa le sessioni in base ai permessi: una lavora con i tuoi dati personali e non vede dati esterni; una seconda esamina email, repository e ticket di altre persone, ma non ha accesso ai segreti; una terza pubblica all'esterno, e solo ciò che hai approvato personalmente. Nei miei progetti mantengo una separazione rigorosa: una sessione con accesso alle chiavi di pagamento non legge ticket o repository esterni arbitrari, e una sessione che analizza il codice di altre persone non vede affatto i segreti. Non mescolare questi ruoli in un'unica chat.
- Mantieni aggiornati Claude Code e gli script di automazione collegati: al momento della pubblicazione di questa guida, la maggior parte delle lacune descritte era già stata chiusa con delle patch e quelle nuove vengono corrette in modo analogo.
Cosa fare ora
Nessuno di questi livelli è una garanzia: Anthropic stessa afferma onestamente che nessuna protezione offre immunità completa. Non mi aspetto che Claude Code riconosca da solo un inganno in un messaggio di errore o in un commento su una issue. Per me, la sandbox e permissions.deny fanno parte integrante del modo in cui gestisco il contesto dei progetti: cosa vede l'agente, di cosa si fida per impostazione predefinita e cosa succede quando commette un errore.
Fonti
- 0DIN: Clone This Repo and I Own Your Machine, 25 giugno 2026
- Comment and Control: ricerca primaria, 15 aprile 2026, aggiornata il 4 maggio
- Tenet Threat Labs: Agentjacking, aggiornato il 17 giugno 2026
- MCPTox: benchmark primario di avvelenamento degli strumenti
- Documentazione di Claude Code - Permission Modes
- Anthropic Engineering - Claude Code Sandboxing
- Documentazione di Claude Code - Permissions
- Documentazione di Claude Code - Security Best Practices
- Documentazione di Claude Code - Model Context Protocol (MCP)
- Analisi di una vulnerabilità correlata nella Claude Code GitHub Action
- Come configurare Claude Code perché non danneggi il tuo progetto durante la notte
- Server MCP di Claude Code: 7 configurazioni pronte all'uso e installazione passo passo
- Sicurezza del vibe coding: come impedire che la tua applicazione creata con l'AI venga hackerata
Se ti serve accedere alle reti neurali tramite Ailoot, dai un'occhiata ad Ailoot.
Maggiori dettagli
Domande frequenti
Il tasso riportato dell’85% prevede il rischio della mia configurazione attuale?
No. È l’aggregato Tenet da verifiche controllate senza elenco pubblico completo dei modelli, harness riproducibile o denominatore esatto. Strumenti, approvazioni, credenziali e rete del tuo agente determinano le azioni possibili.
Perché scansionare solo il repository clonato non basta?
Il payload finale può arrivare dopo tramite errori, metadati degli strumenti o contenuti DNS. Esamina l’intero percorso e limita credenziali, file, strumenti e rete: scanner e regole deny da soli non dimostrano contenimento completo.