Illustrazione tecnica astratta su un campo blu navy scuro: un alto piano di confine traslucido si trova vicino al bordo sinistro, disegnato come un sottile contorno pallido con un riempimento smerigliato. Una singola linea bianca entra da sinistra, attraversa il piano e continua verso destra, dove termina in un piccolo blocco scuro che si trova all'esterno di una fila poco profonda di quattro moduli ciano luminosi. Una sottile traccia bianca tratteggiata si dirama dalla linea poco prima del piano e si ferma a un piccolo rettangolo pallido montato sulla faccia del piano, contrassegnato unicamente dalla forma. Non compaiono testo, persone o loghi di organizzazioni. Il logo OrcaRouter è composto nell'angolo in basso a destra.
AI Safety Incidents

GhostApproval: Sei assistenti AI alla programmazione hanno chiesto il permesso e hanno indicato il file sbagliato

Autore

Gideon Frost

Data di pubblicazione

Ultimi modelli · 20Vedi tutti i modelli →
Benchmark: Artificial Analysis · aggiornato ogni giorno
Torna a tutti gli articoli

L'8 luglio 2026 l'azienda di sicurezza Wiz ha pubblicato GhostApproval, un risultato di ricerca in cui un collegamento simbolico inserito in un repository faceva sì che sei assistenti di programmazione AI scrivessero al di fuori della propria area di lavoro — in ~/.ssh/authorized_keys, che concede un accesso SSH persistente senza password, oppure in ~/.zshrc, che viene eseguito al successivo avvio della shell — mentre la finestra di conferma indicava solo il file innocuo che il collegamento fingeva di essere. Wiz ha testato Amazon Q Developer, Claude Code di Anthropic, Augment, Cursor, Google Antigravity e Windsurf e ha riportato lo schema in tutti e sei. Non è stato segnalato alcuno sfruttamento in ambiente reale: il lavoro è una dimostrazione proof-of-concept e la voce dell'archivio non registra alcun danno reale. Tre fornitori hanno rilasciato correzioni, due hanno confermato di aver ricevuto il report e poi hanno smesso di rispondere, e uno ha negato che il comportamento costituisse una vulnerabilità. Il Orca AI Incident Archive contiene il registro completo di questo risultato insieme alle altre voci archiviate con il suo tag di tipo SANDBOX.

La primitiva in sé è vecchia storia. L'inseguimento dei symlink, catalogato come CWE-61, è una primitiva d'attacco da decenni — Wiz elenca usi precedenti in race condition, package manager e container escape — e ognuno di essi dipendeva da uno strumento che scriveva in un percorso controllato dall'utente senza risolverlo prima. Ciò che ha reso questa scoperta meritevole di un nome è il secondo strato: in diversi prodotti il ragionamento stesso dell'assistente identificava la destinazione pericolosa, e il prompt mostrato all'utente umano la nascondeva. Wiz la classifica come CWE-451, rappresentazione fuorviante nell'interfaccia utente di informazioni critiche. Il confine di sicurezza era presente. Le informazioni necessarie a una persona per esercitarlo non c'erano.

Come funziona il trucco e su cosa atterra

Il repository malevolo di Wiz è deliberatamente noioso. Contiene un collegamento simbolico chiamato project_settings.json che punta al file delle chiavi autorizzate SSH dello sviluppatore, più un README che istruisce l'agente ad aggiornare quella "config" durante la configurazione dell'area di lavoro. Quando lo sviluppatore chiede all'assistente di seguire il README, l'agente segue il collegamento e scrive la chiave pubblica dell'attaccante. Se la macchina esegue un servizio SSH che l'attaccante può raggiungere, da quel momento in poi si tratta di accesso senza password. Una seconda variante indirizza la stessa esca a ~/.zshrc, quindi il payload viene eseguito la prossima volta che si apre un terminale e non è necessario alcun accesso SSH.

La descrizione di Wiz del guasto tecnico è breve: la sandbox, dove esiste, non convalida il percorso canonico, quindi una scrittura destinata all'interno del progetto finisce ovunque punti il link. La proof of concept dell'azienda ha riprodotto questo comportamento su «6 dei principali assistenti AI per la programmazione», per usare le sue stesse parole, e ha pubblicato screenshot per ciascuno. Le persone interessate sono chiunque apra un repository di cui non è autore in uno di quegli strumenti — il che, nel normale flusso di lavoro degli sviluppatori, include progetti forkati, dipendenze di terze parti e qualsiasi revisione del codice del branch di un contributore esterno.

La finestra di dialogo che ha indicato il file sbagliato

La prova più chiara è venuta da Claude Code. Nel test di Wiz, il ragionamento dell’agente affermava, nella citazione dell’azienda, «Posso vedere che project_settings.json è in realtà un file di configurazione zsh». Il prompt di autorizzazione che l’utente ha visto chiedeva: «Applicare questa modifica a project_settings.json?» L’agente sapeva dove sarebbe stata indirizzata la scrittura; la persona che la autorizzava no. Wiz definisce il consenso risultante «sostanzialmente vuoto» e il controllo human-in-the-loop una semplice formalità.

Tre prodotti hanno reso il gap peggiore di un'etichetta errata. Windsurf ha scritto il file su disco prima che comparissero i pulsanti Accetta e Rifiuta, quindi la finestra di dialogo era un'offerta di annullamento anziché un controllo di autorizzazione — secondo Wiz, quando l'utente poteva rifiutare, la chiave era già al suo posto. Amazon Q Developer ha mostrato la stessa sequenza, offrendo solo un pulsante Annulla dopo la scrittura. Augment non ha chiesto nulla: Wiz ha dimostrato una lettura tramite symlink che ha fatto comparire nella trascrizione della chat un falso file di credenziali AWS proveniente dall'esterno del progetto, e una scrittura tramite symlink in ~/.ssh/authorized_keys senza alcuna finestra di dialogo. All'estremo opposto, Cursor e Google Antigravity mostravano il percorso non risolto e chiedevano un clic che autorizzasse quello risolto.

Il primo test di Wiz è stato eseguito il 10 febbraio 2026 e le segnalazioni sono state inviate tra il 12 febbraio e il 5 marzo. La sua cronologia delle divulgazioni registra le conferme di ricezione: Anthropic il 15 febbraio, Augment il 24 febbraio, Google il 26 febbraio, Cursor il 2 marzo, AWS il 6 marzo e Cognition, che possiede Windsurf, il 23 giugno. La divulgazione pubblica è avvenuta circa cinque mesi dopo la prima segnalazione.

HTML card headed 'Five months from first test to public disclosure', with a kicker reading 'GhostApproval · Wiz Research · disclosure sequence'. A vertical timeline lists the dated steps: 10 February 2026, initial discovery; 12 and 14 February, Augment read and write reports; 14 February, report to Anthropic; 15 February, Anthropic closes the ticket as Informative; 24 February, Augment acknowledges; 26 February, Google acknowledges; 2 March, Cursor acknowledges; 2 and 5 March, reports to Cognition and AWS; 22 May, Google deploys its fix; 27 May, AWS ships language server 1.69.0; 23 June, AWS publishes CVE-2026-12958 and Cognition acknowledges; 8 July 2026, public disclosure. An amber box records that Augment and Windsurf acknowledged receipt and supplied no further updates. A footer cites Wiz's disclosure timeline. The OrcaRouter logo is composited in the bottom-right corner.

Sei fornitori, tre risposte

Wiz valuta i risultati secondo la propria scala di gravità, da High su AWS a Critical su Augment, Cursor, Google Antigravity e Windsurf. Tre fornitori hanno trattato il report come una vulnerabilità e hanno rilasciato una correzione. L'archivio classifica la voce come gravità alta e A come affidabilità, e gli avvisi principali concordano con Wiz sul meccanismo.

• Amazon Web Services. Gravità alta, tracciato come CVE-2026-12958 e corretto in Language Servers for AWS 1.69.0. Il bollettino di AWS 2026-047-AWS, pubblicato il 23 giugno 2026, conferma "un problema di mancata validazione dei symlink" prima della versione 1.69.0 ed elenca le build minime del plugin che contengono la correzione: Amazon Q Developer per Visual Studio Code 2.20, per JetBrains 4.3, per Eclipse 2.7.4 e AWS Toolkit con Amazon Q per Visual Studio 1.94.0.0. Afferma che non esistono soluzioni alternative, che il language server si aggiorna automaticamente a meno che una configurazione di rete non lo impedisca, e ringrazia Wiz per la divulgazione coordinata. Il record CNA assegna al problema un punteggio di 8,5 secondo CVSS 4.0 e 7,8 secondo CVSS 3.1.

• Cursor. Critica, tracciata come CVE-2026-50549 e corretta in Cursor 3.0. Il record è stato pubblicato da GitHub come CNA il 25 giugno 2026 con un punteggio di 9,3 secondo CVSS 4.0. La sua descrizione inquadra l'attaccante in modo leggermente diverso rispetto alla ricostruzione del repository di Wiz: un agente malevolo crea un symlink all'interno del workspace e forza il fallimento della canonicalizzazione del percorso, o perché la destinazione non esiste o perché il permesso di lettura è stato rimosso dal percorso, dopodiché la scrittura ricade sul percorso originale senza approvazione e può sovrascrivere l'helper della sandbox per l'esecuzione senza sandbox.

• Google. Wiz classifica Antigravity come Critical e registra la correzione come versione 1.19.6, distribuita il 22 maggio 2026. La colonna della gravità riporta "Pending" e Google, secondo il resoconto di Wiz, stava valutando se emettere un CVE; nel registro pubblico non compare alcun identificatore CVE per Antigravity.

• Augment.Critico secondo la valutazione di Wiz, testato sulla versione 0.754.3, riconosciuto il 24 febbraio 2026 e non correttato al momento della pubblicazione. La nota di ricerca della Cloud Security Alliance sul rilevamento riporta la controargomentazione di Augment secondo cui un agente opera con le credenziali dell'utente stesso.

• Windsurf. Criticità secondo la valutazione di Wiz, testata sulla build V1.9566, riconosciuta da Cognition il 23 giugno 2026 e non corretta al momento della pubblicazione.

• Anthropic. Contestato. Nessun CVE, e la versione testata di Claude Code, 2.1.42, compare nella tabella di Wiz con lo stato "Rejected".

HTML card headed 'One pattern, six products, six answers', with a kicker reading 'GhostApproval · vendor status at public disclosure, 8 July 2026'. A six-row table gives product, Wiz's severity rating, CVE identifier, fixed version and status: Amazon Q Developer, High, CVE-2026-12958, fixed in language server 1.69.0; Cursor, Critical, CVE-2026-50549, fixed in 3.0; Google Antigravity, Critical, no CVE published, fixed in 1.19.6 on 22 May 2026; Augment, Critical, no CVE, no fix, acknowledged 24 February 2026; Windsurf, Critical, no CVE, no fix, acknowledged 23 June 2026; Claude Code from Anthropic, Disputed, no CVE, rejected as outside the threat model. A note beneath reads that severity ratings for the products without a CVE are Wiz's own, not a CNA score, and that no exploitation in the wild was reported. A footer cites Wiz's vendor table, the AWS security bulletin and the two CVE records. The OrcaRouter logo is composited in the bottom-right corner.

Il rifiuto di Anthropic e la correzione che precede il report

La risposta di Anthropic a Wiz è stata un no ponderato. "Questo esula dal nostro attuale modello di minaccia", ha scritto l'azienda, secondo la citazione di Wiz. "Quando l'utente avvia Claude Code per la prima volta in una directory, deve confermare di considerare attendibile la directory prima di iniziare la sessione. Lo scenario che descrivi comporta che un utente confermi esplicitamente un prompt di autorizzazione all'interno di una directory contenente un collegamento simbolico malevolo, il che esula dal modello di minaccia di Claude Code." Il ticket è stato chiuso come "Informativo".

Quel ragionamento ha una forma coerente: l'utente si fidava della directory, poi ha approvato l'operazione, quindi entrambi i momenti di consenso sono stati rispettati. La replica di Wiz è che il consenso informato richiede informazioni accurate — approvare project_settings.json mentre la scrittura finisce in ~/.ssh/authorized_keys è formalmente una decisione e sostanzialmente vuota. Wiz non afferma di aver stabilito quale posizione sia quella corretta, e nemmeno questo articolo lo fa. L'osservazione pratica è che AWS, Google e Cursor hanno adottato l'altra posizione e hanno applicato la patch.

Wiz ha anche riferito che Claude Code era cambiato nel corso della disputa: secondo l'azienda, le versioni attuali risolvono i symlink e avvisano prima di scrivere su file sensibili, e ha osservato che Anthropic ha rifiutato di dire se ciò fosse collegato al report. Il 7 luglio 2026 Anthropic ha fornito una correzione, citata da Wiz: "L'avviso sui symlink nella finestra di dialogo delle autorizzazioni Edit/Write è stato rilasciato nella v2.1.32 (5 febbraio 2026), nove giorni prima che questo report ci venisse inviato. È stato aggiunto nell'ambito di un irrobustimento proattivo della sicurezza basato su una revisione interna. Il rifiuto di commentare è stato una risposta automatica del nostro sistema di triage."

La tempistica della versione torna; il registro pubblico di ciò che è cambiato no. Claude Code 2.1.32 è stato pubblicato sul registro npm il 5 febbraio 2026 alle 17:03 UTC, ovvero nove giorni prima del rapporto del 14 febbraio, esattamente come afferma Anthropic. Ma la voce pubblica del changelog per quel rilascio elenca dodici modifiche, tra cui team di agenti, registrazione della memoria e diverse correzioni dell'interfaccia, e nessuna di esse menziona symlink o finestre di dialogo per i permessi. Le prime righe del changelog che descrivono esattamente questo comportamento sono molto più avanti: la versione 2.1.280, pubblicata su npm il 22 settembre 2026, riporta «Corretto il caso in cui le scritture attraverso un percorso con symlink venivano giudicate in base alla loro denominazione nell'albero: il prompt indica dove va a finire la scrittura», e la 2.1.287 del 1° ottobre 2026 riporta che una scrittura da shell attraverso un symlink committato nel repository su un file sensibile ora indica dove va a finire e attende l'intervento di una persona. Anche l'osservazione di Wiz stessa, secondo cui la 2.1.173 e le successive risolvono i symlink, arriva dopo il rapporto, dato che la 2.1.173 è stata rilasciata l'11 giugno 2026.

Che cosa è stabilito e che cosa non lo è

• Confermato. Il meccanismo: un symlink esca in un repository, un agente che lo segue, una scrittura che finisce fuori dal workspace e una superficie di conferma che indica il percorso sbagliato. Wiz lo ha riprodotto in tutti e sei i prodotti e ha pubblicato screenshot. Esistono due record CVE, pubblicati dai rispettivi CNA, e il bollettino di AWS conferma indipendentemente la falla nelle versioni precedenti alla 1.69.0 e la correzione. Anthropic non contesta che il comportamento si sia verificato; contesta che si tratti di una vulnerabilità.

• Fonte unica. I punteggi di gravità per Augment, Windsurf e Google Antigravity sono giudizi di Wiz, non punteggi CNA, perché per nessuno dei tre è stata pubblicata una CVE. L'affermazione che Windsurf e Amazon Q scrivono prima che compaia il dialogo si basa sugli screenshot e sulla narrazione di Wiz; nessun fornitore ha confermato pubblicamente l'ordine.

• Contestato. Se uno strumento debba garantire al proprio utente protezione da uno spazio di lavoro ingannevole, o se la fiducia nella directory più un clic risolva la questione. Anthropic dice la seconda; Wiz dice che il prompt mostrato ha reso il clic privo di significato. L'archivio non segnala il record come contestato: i fatti sono concordati e solo l'interpretazione è contestata.

• Non stabilito. Se Augment e Windsurf abbiano corretto la vulnerabilità dopo la pubblicazione. Tutta la copertura esaminata per questo articolo, inclusa la nota della Cloud Security Alliance del 15 luglio 2026, descrive ancora entrambi come non corretti; non è stato trovato alcun avviso pubblico di correzione da parte di nessuno dei due fornitori.

La data stessa presenta una piccola incongruenza. Il post di Wiz e la relativa cronologia della divulgazione indicano entrambi l'8 luglio 2026, Infosecurity Magazine descrive il proof of concept come pubblicato il 7 luglio e il proprio articolo il 9 luglio, e la voce d'archivio è datata 9 luglio 2026 con precisione al giorno. La scoperta, la pubblicazione e l'archivio non discordano sulla settimana; discordano sul giorno, con uno scarto fino a due giorni.

Un riconoscimento a parte merita il lavoro precedente su uno dei sei. Evan Schuman di CSO Online, in un articolo del 9 luglio 2026, ha fatto notare che Cato Networks aveva segnalato una versione della vulnerabilità limitata a Cursor prima dello studio più ampio di Wiz. Il resoconto di SecurityWeek su quella ricerca, pubblicato il 3 luglio 2026, la denomina DuneSlide, assegna alla coppia i codici CVE-2026-50548 e CVE-2026-50549, attribuisce a entrambe un punteggio di 9,8 e data al 2 aprile il rilascio di Cursor 3.0 che le ha corrette — cifre che non coincidono con la cronologia di Wiz, che colloca al 5 giugno la pubblicazione della correzione di Cursor, né con la scheda CNA pubblicata il 25 giugno con un punteggio di 9,3. Il 9,8 e il 9,3 sono due valutazioni della stessa vulnerabilità; le date di aprile e giugno potrebbero descrivere un rilascio e un avviso di sicurezza, anziché essere in disaccordo su quando è stata distribuita la patch.

Cosa è cambiato in seguito

Concretamente: gli utenti di Amazon Q Developer sono stati passati al language server 1.69.0, automaticamente nella maggior parte delle configurazioni; quelli di Google Antigravity a 1.19.6 dal 22 maggio 2026; quelli di Cursor a 3.0; e quelli di Claude Code a una versione che risolve i link, con ulteriori modifiche alla fedeltà dei prompt che arriveranno nella 2.1.280 e nella 2.1.287 tra settembre e ottobre 2026. Gli utenti di Augment e Windsurf, stando alle evidenze disponibili al momento della pubblicazione, hanno ottenuto solo una data da tenere d'occhio e nient'altro.

Le raccomandazioni di Wiz erano limitate e tecniche: risolvere i symlink prima di visualizzare una richiesta, avvisare esplicitamente quando il percorso risolto cade al di fuori del workspace e non scrivere mai su disco prima di un’autorizzazione esplicita, così che la finestra di dialogo sia un controllo di accesso anziché un pulsante di annullamento. La nota della Cloud Security Alliance aggiunge una cornice di governance: trattare gli assistenti di codifica come software privilegiati con accesso al filesystem anziché come plugin dell’editor e chiedere direttamente ai fornitori se i percorsi vengono risolti prima che compaia una conferma. Katie Norton di IDC, citata da CSO Online, ha collocato il rischio residuo dove corre già la catena di fornitura: contributori esterni, repository forkati e dipendenze di terze parti, «anziché nel codice scritto internamente».

Ciò che resta aperto è la questione di progettazione, non il bug. Sei prodotti sviluppati indipendentemente sono convergiti sulla stessa sequenza — mostrare il percorso richiesto, fidarsi del clic — e la divergenza successiva riguardava la responsabilità, non il meccanismo. La voce d'archivio porta un contrassegno di riferimento, che è il giudizio dell'archivio secondo cui il record descrive una categoria anziché l'errore di un singolo fornitore, ed è difficile contestare questa lettura: la stessa breve proof of concept ha funzionato sei volte.

Abstract technical illustration on a dark navy field: a pale translucent check mark, drawn as a thin outline, floats above a small white rectangle that represents an approval surface. Beneath the rectangle a white line drops vertically, passes through a faint horizontal plane, and emerges on the other side pointing at a second dark rectangle that is drawn only as an outline, unlit. A soft amber glow marks the point where the line crosses the plane. No text, people or organisation logos appear. The OrcaRouter logo is composited in the bottom-right corner.