Un errore nel blocco delle versioni dei plugin espone gli agenti AI per la programmazione a sostituzioni silenziose nella catena di fornitura
Plugin4Shell sfrutta il blocco versioni dei plugin di Claude, Codex, Copilot e Gemini CLI per installare codice malevolo mostrando la versione corretta.
Testo generato da intelligenza artificiale, pubblicato senza revisione umana. Trasparenza IA
Immagine illustrativa generata con AI
Il proprietario di un repository può aggirare i blocchi sulle versioni dei plugin in quattro agenti AI per la programmazione molto diffusi, inducendoli a installare codice non sottoposto a revisione pur continuando a mostrare la versione prevista.
La vulnerabilità nella catena di fornitura, denominata Plugin4Shell da Air Security, riguarda Anthropic Claude Code, OpenAI Codex, GitHub Copilot e Google Gemini CLI. A maggio Air ha testato con successo l’attacco contro tutti e quattro i prodotti e a giugno ha informato i rispettivi fornitori.
Anthropic e OpenAI hanno rilasciato delle correzioni. Secondo Air, GitHub Copilot non è ancora stato corretto, mentre Google non intende intervenire su Gemini CLI, ormai in fase di dismissione. Al 18 settembre 2026 non risultavano pubblicati né un CVE né un avviso di sicurezza dei fornitori, e non c’erano prove di attacchi reali che avessero sfruttato la vulnerabilità.
Un commit bloccato non garantisce che il codice sia quello previsto
Gli agenti AI per la programmazione possono estendere le proprie funzionalità scaricando plugin da marketplace e repository di codice sorgente esterni. Per impedire che il codice cambi dopo la revisione, un marketplace può identificare ogni plugin approvato tramite l’hash di un commit Git.
Quell’hash dovrebbe rappresentare un’unica istantanea immutabile del repository. Negli agenti interessati, tuttavia, il processo di installazione non verifica adeguatamente che il contenuto scaricato corrisponda al commit specificato.
Plugin4Shell sfrutta un’ambiguità nel modo in cui Git risolve i riferimenti. Su un servizio di hosting dei repository che lo consenta, il proprietario può creare un branch con un nome simile all’hash del commit bloccato del plugin. L’attaccante indirizza quindi quel branch verso un commit diverso contenente codice malevolo.
Quando l’agente richiede quello che ritiene essere il commit approvato, Git può interpretare il valore come il nome del branch controllato dall’attaccante. L’installer recupera di conseguenza il codice da un altro commit, ma l’agente continua a indicare che il plugin si trova nella versione prevista e bloccata.
Questo compromette sia la revisione sia la trasparenza sulle versioni. Un plugin può apparire invariato all’utente anche se il suo contenuto eseguibile è stato sostituito.
La modifica pubblica di OpenAI per Codex descrive la stessa modalità di errore: Git può trattare una richiesta contenente lo SHA di un commit come un riferimento a un branch, consentendo alla sorgente del plugin di risolversi in un commit diverso da quello registrato nel file di blocco. La correzione è inclusa in Codex 0.146.0.
Lo sfruttamento dipende dal servizio che ospita il repository
La tecnica del branch con un nome simile a un hash non funziona allo stesso modo su tutte le piattaforme di hosting. GitHub vieta i nomi di branch e tag che ricordano gli hash dei commit, impedendo questo specifico metodo nei repository ospitati sulla piattaforma.
Air ha riscontrato che l’attacco è efficace su Bitbucket e sui server Git gestiti privatamente, che potrebbero consentire nomi di questo tipo. Gli agenti per la programmazione interessati supportano plugin provenienti da repository esterni di questo genere.
Questa distinzione riduce notevolmente l’esposizione per gli utenti che si affidano esclusivamente ai marketplace predefiniti. Una revisione dei cataloghi degli agenti e della vulnerabilità sottostante condotta il 18 settembre ha rilevato che il catalogo della community di Anthropic e i cataloghi predefiniti di Claude Code e Copilot facevano riferimento a repository GitHub.
L’hosting su GitHub, tuttavia, non risolve in generale il problema della logica di convalida difettosa. Copilot, per esempio, può installare plugin da repository esterni a GitHub. Gli utenti che aggiungono un repository Bitbucket, un server Git privato o un altro host che consenta nomi di riferimenti ambigui rimangono esposti se utilizzano un agente non corretto.
Anche Gemini CLI presenta un problema distinto nella risoluzione dei repository. Secondo Air, il suo installer può essere influenzato da un repository il cui branch principale si chiama FETCH_HEAD. La restrizione documentata da GitHub sui nomi simili agli hash non esclude chiaramente FETCH_HEAD; pertanto, i plugin di Gemini CLI ospitati su GitHub non possono essere considerati definitivamente al sicuro da questa variante.
Gli aggiornamenti automatici possono eliminare la necessità di un’ulteriore richiesta di conferma
La configurazione più rischiosa è quella in cui un agente aggiorna in background un plugin già considerato attendibile. Dopo l’approvazione dell’installazione iniziale da parte dell’utente, il proprietario di un repository potrebbe modificare la destinazione di un riferimento ambiguo e distribuire codice sostitutivo senza un’ulteriore conferma.
Air ha riferito che gli aggiornamenti dei plugin in background sono abilitati per impostazione predefinita in Claude Code e Codex. Questo non significa, tuttavia, che ogni installazione predefinita sia immediatamente esposta.
Gli aggiornamenti automatici sono abilitati per impostazione predefinita solo per i marketplace integrati nei prodotti, ospitati su GitHub. La documentazione di Anthropic e GitHub indica che l’aggiornamento dai marketplace esterni è disabilitato o opzionale. Le regole sui nomi adottate da GitHub bloccano quindi la principale tecnica basata sui branch con nomi simili agli hash nei cataloghi predefiniti.
Il rischio aumenta quando le organizzazioni configurano marketplace privati o installano plugin direttamente da repository supportati non ospitati su GitHub. Un operatore del marketplace non può correggere gli agenti già distribuiti, perché la convalida dei riferimenti avviene sul dispositivo di ogni utente. Deve essere l’agente stesso a verificare che l’oggetto recuperato corrisponda esattamente al commit bloccato.
Le correzioni variano sensibilmente tra i quattro agenti
| Prodotto | Stato attuale | Risposta consigliata |
|---|---|---|
| Anthropic Claude Code | Secondo Air, il problema è stato corretto nella versione 2.1.179 | Aggiornare alla versione 2.1.179 o successive |
| OpenAI Codex | Corretto nella versione 0.146.0 | Aggiornare alla versione 0.146.0 o successive |
| GitHub Copilot | Secondo Air, non è stata distribuita alcuna correzione | Evitare plugin provenienti da host esterni di repository non attendibili |
| Google Gemini CLI | Google non intende correggere il prodotto in fase di dismissione | Migrare ad Antigravity quando possibile |
Le note di rilascio di Anthropic per Claude Code 2.1.179 non menzionano Plugin4Shell. L’affermazione secondo cui questa versione risolve il problema proviene dalla valutazione di Air. OpenAI, invece, ha documentato pubblicamente la correzione relativa alla risoluzione dei riferimenti Git.
Air ha dichiarato di aver informato Microsoft a giugno, ma non risultava ancora distribuito alcun aggiornamento corrispondente per Copilot. Fino a quando la situazione non cambierà, gli utenti di Copilot dovrebbero considerare potenzialmente vulnerabili i plugin ospitati su Bitbucket, server Git privati e servizi simili.
Google ha smesso di distribuire Gemini CLI per gli utenti consumer a giugno e li ha indirizzati verso Antigravity. Air ha dichiarato che Antigravity non è vulnerabile a questo attacco. Google ha affermato che l’accesso enterprise a Gemini CLI continuerà a ricevere aggiornamenti, ma non è noto se tali aggiornamenti correggeranno Plugin4Shell.
I plugin malevoli ereditano i privilegi dell’utente
Un plugin sostituito viene eseguito con i privilegi disponibili alla persona che utilizza l’agente per la programmazione. La sua portata concreta dipende quindi dalle autorizzazioni locali, dai segreti memorizzati, dalla configurazione dell’agente e dalle sessioni autenticate.
Le possibili conseguenze includono la lettura del codice sorgente e dei file locali, l’estrazione delle credenziali salvate e l’accesso ai sistemi di sviluppo o aziendali disponibili tramite l’autenticazione già esistente dell’utente. Le postazioni degli sviluppatori sono particolarmente sensibili perché spesso riuniscono accesso ai repository, credenziali cloud, materiale per la firma e connettività alla rete interna.
Al 18 settembre 2026 non risultavano compromissioni confermate né campagne di sfruttamento attive. Non era stato assegnato alcun identificativo CVE e nessuno dei quattro fornitori aveva pubblicato un avviso di sicurezza dedicato.
Plugin4Shell dimostra comunque che la versione visualizzata non prova l’identità del codice installato. Il blocco è significativo solo se l’installer verifica l’oggetto Git risultante invece di fidarsi della risoluzione del nome.
Le installazioni esistenti richiedono una verifica separata
L’aggiornamento di Claude Code o Codex dovrebbe impedire sostituzioni future, ma le informazioni disponibili non chiariscono se uno dei due aggiornamenti rilevi o rimuova i plugin che erano già stati sostituiti. Le organizzazioni dovrebbero quindi considerare la correzione e la verifica retrospettiva come attività separate.
Amministratori e sviluppatori dovrebbero:
- Aggiornare Claude Code alla versione 2.1.179 o successive.
- Aggiornare Codex alla versione 0.146.0 o successive.
- Evitare le sorgenti esterne di plugin per Copilot fino al rilascio di una correzione da parte di GitHub.
- Migrare da Gemini CLI ad Antigravity quando possibile dal punto di vista operativo.
- Confrontare in modo indipendente il contenuto dei plugin installati con quello del commit attendibile del repository.
- Verificare i plugin installati prima dell’aggiornamento dell’agente, senza presumere che la patch li ripulisca.
- Limitare l’accesso dei plugin a file, credenziali, token e sistemi autenticati.
- Esaminare i repository dei plugin e l’attività di aggiornamento alla ricerca di modifiche inspiegabili ai riferimenti.
- Monitorare le credenziali e i servizi connessi per individuare accessi imprevisti dopo aggiornamenti sospetti dei plugin.
Gli utenti possono ridurre l’esposizione preferendo i cataloghi predefiniti degli agenti, ospitati su GitHub, dove la restrizione documentata sui nomi blocca l’attacco basato sui branch con nomi simili agli hash. Questa protezione è condizionata, soprattutto per Gemini CLI a causa della variante FETCH_HEAD.
La soluzione duratura consiste in una convalida più rigorosa lato client: dopo il recupero, l’agente deve verificare che la sorgente installata corrisponda esattamente al commit registrato dal marketplace o dal file di blocco. Qualsiasi misura meno rigorosa lascia una discrepanza tra la versione mostrata all’utente e il codice effettivamente eseguito.
Fonti
Questo articolo è una rielaborazione originale basata sulle fonti seguenti.
