Abstracte technische illustratie op een donker marineblauw veld: een hoog doorschijnend grensvlak staat nabij de linkerrand, getekend als een dunne bleke omtrek met een matte vulling. Een enkele witte lijn komt van links, gaat door het grensvlak en loopt door naar rechts, waar hij eindigt bij een klein donker blok dat buiten een ondiepe rij van vier gloeiende cyaan modules ligt. Een dunne gestreepte witte spoor vertakt zich van de lijn net voor het grensvlak en stopt bij een kleine bleke rechthoek die op het oppervlak van het grensvlak is gemonteerd en alleen door zijn vorm wordt aangeduid. Er verschijnen geen tekst, mensen of organisatielogo's. Het OrcaRouter-logo is in de rechteronderhoek gecompositeerd.
AI Safety Incidents

GhostApproval: Zes AI-codeassistenten vroegen om toestemming en noemden het verkeerde bestand

Auteur

Gideon Frost

Publicatiedatum

Nieuwste modellen · 20Bekijk alle modellen →
Benchmarks: Artificial Analysis · dagelijks bijgewerkt
Terug naar alle berichten

Op 8 juli 2026 publiceerde het beveiligingsbedrijf Wiz GhostApproval, een onderzoeksbevinding waarin een symbolische link die in een repository was geplant, zes AI-codeassistenten buiten hun werkruimte liet schrijven — naar ~/.ssh/authorized_keys, dat permanente wachtwoordloze SSH-toegang verleent, of naar ~/.zshrc, dat bij de volgende shellstart wordt uitgevoerd — terwijl de bevestigingsdialoog alleen het onschadelijke bestand noemde dat de link voorwendde te zijn. Wiz testte Amazon Q Developer, Claude Code van Anthropic, Augment, Cursor, Google Antigravity en Windsurf, en meldde het patroon bij alle zes. Er is geen misbruik in het wild gemeld: het werk is een proof-of-conceptdemonstratie, en het archiefitem registreert geen werkelijke schade. Drie leveranciers brachten fixes uit, twee bevestigden de melding en stopten daarna met reageren, en één betwistte dat het gedrag überhaupt een kwetsbaarheid was. Het Orca AI Incident Archive bevat de volledige registratie van deze bevinding, naast de andere vermeldingen die onder zijn type-tag SANDBOX zijn geregistreerd.

De primitief zelf is oud nieuws. Symlinkvolging, geregistreerd als CWE-61, is al tientallen jaren een aanvalsprimitief — Wiz noemt eerdere toepassingen in race conditions, pakketbeheerders en containerontsnappingen — en elk daarvan was afhankelijk van een tool die naar een door de gebruiker beheerd pad schreef zonder dat eerst te resolven. Wat deze bevinding een naam waard maakte, is de tweede laag: in verschillende producten wees de eigen redenering van de assistent de gevaarlijke bestemming aan, en de prompt die aan de mens werd getoond, verhulde die. Wiz classificeert dat als CWE-451, misleidende weergave van kritieke informatie in de gebruikersinterface. De beveiligingsgrens was aanwezig. De informatie die iemand nodig had om die te benutten, ontbrak.

Hoe de truc werkt, en waar het op uitkomt.

Wiz' kwaadaardige repository is bewust saai. Het bevat een symlink genaamd project_settings.json die verwijst naar het SSH-bestand met geautoriseerde sleutels van de ontwikkelaar, plus een README die de agent instrueert om die "config" bij te updaten tijdens het instellen van de werkruimte. Wanneer de ontwikkelaar de assistent vraagt de README te volgen, volgt de agent de link en schrijft de publieke sleutel van de aanvaller. Als op de machine een SSH-dienst draait die de aanvaller kan bereiken, is dat vanaf dan wachtwoordloos inloggen. Een tweede variant richt dezelfde lokvogel op ~/.zshrc, zodat de payload wordt uitgevoerd de volgende keer dat een terminal wordt geopend en er helemaal geen SSH-toegang nodig is.

Wiz' beschrijving van de technische fout is kort: de sandbox, waar die bestaat, valideert het canonieke pad niet, dus een schrijfactie die op het project is gericht, komt terecht waar de link naar wijst. De proof of concept van het bedrijf reproduceerde dit bij "6 van de top AI-codeassistenten", in zijn eigen woorden, en het publiceerde screenshots voor elk daarvan. De getroffen groep bestaat uit iedereen die in een van die tools een repository opent die hij of zij niet zelf heeft geschreven — wat in een normale ontwikkelaarsworkflow geforkte projecten, externe afhankelijkheden en elke codereview van de branch van een externe bijdrager omvat.

De dialoog die het verkeerde bestand noemde

Het duidelijkste bewijs kwam van Claude Code. In de test van Wiz luidde de redenering van de agent, in de woorden van het bedrijf: "Ik kan zien dat project_settings.json eigenlijk een zsh-configuratiebestand is." De toestemmingsprompt die de gebruiker te zien kreeg, vroeg: "Deze wijziging in project_settings.json doorvoeren?" De agent wist waar de schrijfactie terecht zou komen; de persoon die de wijziging goedkeurde, niet. Wiz noemt de resulterende toestemming "inhoudelijk leeg" en de human-in-the-loop-controle een rubberstempel.

Drie producten maakten de kloof erger dan een slecht label. Windsurf schreef het bestand naar schijf voordat de Accept- en Reject-knoppen verschenen, zodat het dialoogvenster eerder een aanbod om ongedaan te maken was dan een autorisatiepoort — op het moment dat een gebruiker kon weigeren, was de sleutel volgens Wiz al aanwezig. Amazon Q Developer vertoonde dezelfde volgorde en bood na het schrijven alleen een Undo-knop aan. Augment vroeg helemaal niets: Wiz demonstreerde een leesactie via een symlink waarbij een afleidingsbestand met AWS-referenties van buiten het project in het chatverslag verscheen, en een schrijfactie via een symlink naar ~/.ssh/authorized_keys zonder enig dialoogvenster. Aan het andere uiterste toonden Cursor en Google Antigravity het niet-opgeloste pad en vroegen om een klik die het opgeloste pad autoriseerde.

De eerste test van Wiz vond plaats op 10 februari 2026 en de rapporten werden tussen 12 februari en 5 maart verzonden. In zijn tijdlijn van openbaarmaking worden de bevestigingen vastgelegd: Anthropic op 15 februari, Augment op 24 februari, Google op 26 februari, Cursor op 2 maart, AWS op 6 maart en Cognition, dat Windsurf bezit, op 23 juni. De openbare bekendmaking volgde ongeveer vijf maanden na het eerste rapport.

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.

Zes leveranciers, drie antwoorden.

Wiz beoordeelt de bevindingen volgens zijn eigen ernstschaal, van Hoog bij AWS tot Kritiek bij Augment, Cursor, Google Antigravity en Windsurf. Drie leveranciers behandelden het rapport als een kwetsbaarheid en leverden een oplossing uit. Het archief beoordeelt de vermelding als hoge ernst en A op betrouwbaarheid, en de primaire adviezen stemmen met Wiz overeen wat het mechanisme betreft.

• Amazon Web Services. Hoge ernst, geregistreerd als CVE-2026-12958 en opgelost in Language Servers for AWS 1.69.0. AWS' eigen bulletin 2026-047-AWS, gepubliceerd op 23 juni 2026, bevestigt "een ontbrekend symlinkvalidatieprobleem" vóór 1.69.0 en vermeldt de minimale plug-inbuilds die de fix bevatten: Amazon Q Developer for Visual Studio Code 2.20, for JetBrains 4.3, for Eclipse 2.7.4, en AWS Toolkit with Amazon Q for Visual Studio 1.94.0.0. Het bulletin vermeldt dat er geen workarounds zijn, dat de language server automatisch wordt geüpdatet tenzij een netwerkconfiguratie dit verhindert, en bedankt Wiz voor de gecoördineerde openbaarmaking. Het CNA-record kent dit probleem een score van 8,5 toe volgens CVSS 4.0 en 7,8 volgens CVSS 3.1.

• Cursor.Kritiek, geregistreerd als CVE-2026-50549 en opgelost in Cursor 3.0. Het record werd op 25 juni 2026 door GitHub als CNA gepubliceerd met 9.3 onder CVSS 4.0. In de beschrijving wordt de aanvaller iets anders neergezet dan in het repositoryverhaal van Wiz: een kwaadwillige agent maakt een symlink binnen de workspace aan en dwingt padcanonisatie te mislukken, hetzij omdat het doel niet bestaat, hetzij omdat leesrechten van het pad zijn weggenomen, waarna de schrijfactie zonder goedkeuring terugvalt op het oorspronkelijke pad en de sandbox-helper kan overschrijven voor uitvoering buiten de sandbox.

• Google. Wiz beoordeelt Antigravity als Kritiek en registreert de fix als versie 1.19.6, uitgerold op 22 mei 2026. In de kolom Ernst staat "In afwachting" en volgens Wiz beoordeelde Google of het een CVE zou uitgeven; in het openbare register staat geen CVE-identificatie voor Antigravity.

• Augment.Kritiek volgens Wiz' beoordeling, getest op 0.754.3, bevestigd op 24 februari 2026 en niet gepatcht bij publicatie. De onderzoeksnotitie van de Cloud Security Alliance over deze bevinding vermeldt Augments tegenargument dat een agent onder de eigen inloggegevens van de gebruiker werkt.

• Windsurf. Kritiek volgens de beoordeling van Wiz, getest op build V1.9566, op 23 juni 2026 bevestigd door Cognition en bij publicatie niet gepatcht.

• Anthropic. Betwist. Geen CVE, en Claude Codes geteste versie, 2.1.42, staat in Wiz' tabel met de status "Afgewezen".

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.

Anthropics afwijzing, en de fix die al bestond voordat het rapport verscheen

Anthropics antwoord aan Wiz was een weloverwogen nee. "Dit valt buiten ons huidige dreigingsmodel," schreef het bedrijf, volgens het citaat van Wiz. "Wanneer de gebruiker Claude Code voor het eerst in een map start, moet die bevestigen dat hij de map vertrouwt voordat de sessie begint. Het scenario dat u beschrijft houdt in dat een gebruiker expliciet een toestemmingsprompt bevestigt in een map die een kwaadaardige symbolische link bevat, wat buiten het dreigingsmodel van Claude Code valt." Het ticket werd gesloten als 'Informatief'.

Die redenering heeft een samenhangende vorm: de gebruiker vertrouwde de map, en keurde daarna de bewerking goed, dus beide toestemmingsmomenten werden gerespecteerd. Wiz' weerlegging is dat geïnformeerde toestemming nauwkeurige informatie vereist — het goedkeuren van project_settings.json terwijl de schrijfactie in ~/.ssh/authorized_keys terechtkomt, is formeel een beslissing en inhoudelijk een lege. Wiz claimt niet te hebben beslist welke positie juist is, en dit artikel evenmin. De praktische observatie is dat AWS, Google en Cursor het andere standpunt innamen en een patch toepasten.

Wiz meldde ook dat Claude Code zich in de loop van het geschil had gewijzigd: volgens het bedrijf lossen huidige versies symlinks op en waarschuwen ze voordat naar gevoelige bestanden wordt geschreven, en het merkte op dat Anthropic weigerde te zeggen of dat verband had met het rapport. Op 7 juli 2026 leverde Anthropic een correctie aan, geciteerd door Wiz: "De symlinkwaarschuwing in het machtigingsdialoogvenster voor Edit/Write werd uitgebracht in v2.1.32 (5 februari 2026), negen dagen voordat dit rapport aan ons werd ingediend. Ze werd toegevoegd als onderdeel van proactieve beveiligingsverharding op basis van een interne beoordeling. De weigering om commentaar te geven was een automatisch antwoord van ons triagesysteem."

De versietiming klopt; het openbare verslag van wat er is gewijzigd niet. Claude Code 2.1.32 werd op 5 februari 2026 om 17:03 UTC gepubliceerd in de npm-registry, negen dagen vóór het rapport van 14 februari, precies zoals Anthropic zegt. Maar de openbare changelogvermelding voor die release somt twaalf wijzigingen op, waaronder agentteams, geheugenregistratie en diverse UI-fixes, en geen ervan noemt symlinks of toestemmingsdialoogvensters. De eerste changelogregels die dit exacte gedrag beschrijven, komen veel later: versie 2.1.280, op 22 september 2026 naar npm gepubliceerd, vermeldt "Opgelost: schrijfacties via een symlinkpad werden beoordeeld op hun spelling in de repository-boom: de prompt vermeldt waar de schrijfactie terechtkomt", en 2.1.287 van 1 oktober 2026 vermeldt dat een shell-schrijfactie via een in de repository gecommitte symlink naar een gevoelig bestand nu aangeeft waar de schrijfactie terechtkomt en op een persoon wacht. Wiz' eigen observatie dat 2.1.173 en later symlinks oplossen, valt ook na het rapport, aangezien 2.1.173 op 11 juni 2026 werd uitgebracht.

Wat is vastgesteld, en wat niet

• Vastgesteld. Het mechanisme: een nepsymlink in een repository, een agent die deze volgt, een schrijfactie die buiten de werkruimte terechtkomt, en een bevestigingsoppervlak dat het verkeerde pad vermeldt. Wiz reproduceerde het in alle zes producten en publiceerde screenshots. Er bestaan twee CVE-records, gepubliceerd door hun CNA's, en het bulletin van AWS bevestigt onafhankelijk het lek in versies vóór 1.69.0 en de fix. Anthropic ontkent niet dat het gedrag is opgetreden; het betwist dat het een kwetsbaarheid is.

• Uit één bron. De ernstbeoordelingen voor Augment, Windsurf en Google Antigravity zijn beoordelingen van Wiz, geen CNA-scores, omdat voor geen van de drie een CVE is gepubliceerd. De bewering dat Windsurf en Amazon Q schrijven voordat de dialoog verschijnt, berust op de screenshots en toelichting van Wiz; geen enkele leverancier heeft de volgorde publiekelijk bevestigd.

• Omstreden. Of een tool zijn gebruiker bescherming verschuldigd is tegen een misleidende werkruimte, of dat vertrouwen in de map plus een klik de kwestie beslist. Anthropic zegt het laatste; Wiz zegt dat de prompt die het liet zien de klik betekenisloos maakte. Het archief markeert het record niet als omstreden: de feiten zijn overeengekomen en alleen de interpretatie is betwist.

• Niet vastgesteld.Of Augment en Windsurf de kwetsbaarheid sinds publicatie hebben opgelost. Alle berichtgeving die voor dit artikel is bekeken, inclusief de nota van de Cloud Security Alliance van 15 juli 2026, beschrijft beide nog steeds als niet gepatcht; er is geen openbare melding van een oplossing van een van beide leveranciers gevonden.

De datum zelf heeft een kleine complicatie. Wiz' bericht en de openbaarmakingstijdlijn daarbij noemen beide 8 juli 2026, Infosecurity Magazine beschrijft het proof of concept als gepubliceerd op 7 juli en het eigen artikel op 9 juli, en de archiefvermelding is gedateerd op 9 juli 2026 met dagprecisie. De vondst, de berichtgeving en het archief zijn het niet oneens over de week; ze wijken wat de dag betreft tot twee dagen van elkaar af.

Eerder werk aan een van de zes verdient aparte erkenning. Evan Schuman van CSO Online merkte in een artikel van 9 juli 2026 op dat Cato Networks een versie van het lek die uitsluitend Cursor betrof, had gemeld vóór het bredere onderzoek van Wiz. Het verslag van SecurityWeek over dat onderzoek, gepubliceerd op 3 juli 2026, noemt het DuneSlide, kent CVE-2026-50548 en CVE-2026-50549 aan het tweetal toe, geeft beide een score van 9,8 en dateert de Cursor 3.0-release waarmee ze werden verholpen op 2 april — cijfers die niet overeenkomen met de tijdlijn van Wiz, die de publicatie van de fix voor Cursor op 5 juni plaatst, of met het CNA-record dat op 25 juni werd gepubliceerd met een score van 9,3. De 9,8 en de 9,3 komen van twee verschillende beoordelaars van hetzelfde lek; de april- en junidatums kunnen een release en een advies beschrijven, in plaats van dat ze het oneens zijn over wanneer de patch verscheen.

Wat is er daarna veranderd?

Concreet: gebruikers van Amazon Q Developer werden naar language server 1.69.0 verplaatst, in de meeste configuraties automatisch; gebruikers van Google Antigravity naar 1.19.6 vanaf 22 mei 2026; gebruikers van Cursor naar 3.0; en gebruikers van Claude Code naar een versie die links oplost, met verdere wijzigingen voor promptgetrouwheid die in september en oktober 2026 in 2.1.280 en 2.1.287 werden doorgevoerd. Gebruikers van Augment en Windsurf kregen, op basis van de bij publicatie beschikbare gegevens, alleen een datum om in het oog te houden en verder niets.

Wiz' eigen aanbevelingen waren smal en technisch: symlinks oplossen voordat een prompt wordt weergegeven, expliciet waarschuwen wanneer het opgeloste pad buiten de werkruimte valt, en nooit naar schijf schrijven vóór expliciete autorisatie, zodat de dialoog een poort vormt en geen undo-knop. De notitie van Cloud Security Alliance voegt een governancekader toe: behandel codeerassistenten als geprivilegieerde software met toegang tot het bestandssysteem, niet als editorplug-ins, en vraag leveranciers direct of paden worden opgelost voordat een bevestiging verschijnt. Katie Norton van IDC, geciteerd door CSO Online, plaatste het resterende risico waar de toeleveringsketen al loopt: externe bijdragers, geforkte repositories en externe afhankelijkheden, "eerder dan in intern geschreven code".

Wat open blijft, is de ontwerpvraag, niet de bug. Zes onafhankelijk gebouwde producten kwamen uit op dezelfde sequentie — toon het aangevraagde pad, vertrouw de klik — en de daaropvolgende divergentie ging over aansprakelijkheid, niet over mechanisme. De archiefvermelding draagt een landmark-vlag, wat het oordeel van het archief is dat de registratie een categorie beschrijft en niet de fout van één enkele leverancier, en het is moeilijk tegen die lezing in te brengen: hetzelfde korte proof-of-concept werkte zes keer.

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.