GhostApproval Symlink-fouten kunnen ervoor zorgen dat kwaadaardige repos code uitvoeren in AI-coderingsagenten

Onderzoekers bij Wiz ontdekte dat een fout in zes populaire AI-codeerassistenten ervoor zorgt dat een codeproject met een boobytrap stilletjes de controle over de computer van een ontwikkelaar overneemt. De assistent vraagt ​​toestemming om één onschadelijk ogend bestand te bewerken, maar de schrijfactie komt terecht op een gevoelig bestand.

De getroffen tools zijn Amazon Q Developer, Anthropic’s Claude Code, Augment, Cursor, Google Antigravity en Windsurf. Wiz noemt het patroon Ghost-goedkeuring en publiceerde het op 8 juli.

Drie van de zes hebben oplossingen geleverd, twee niet, en Anthropic betwist dat het een bug is. Het meest zichtbaar zijn de tools die bestanden wijzigen voordat u kunt meewegen.

Hoe de aanval werkt

De aanval maakt misbruik van een oude Unix-functie genaamd a symbolische linkof symbolische linkdat de assistenten niet controleren. Een symlink verwijst stilletjes naar een ander bestand elders op de schijf, dus als u ernaar schrijft, wordt er ook daadwerkelijk naar het doel geschreven.

Wiz heeft een kwaadaardige repository gebouwd met een symbolische link met de naam project_settings.json die verwijst naar het SSH-inlogbestand van het slachtoffer, ~/.ssh/authorized_keys. De README van de repository vertelt de assistent om “een regel” toe te voegen aan project_settings.json, en die regel is de eigen SSH-sleutel van de aanvaller, verkleed als een onschadelijke instelling.

Vraag de agent om “de werkruimte in te stellen” of “de README te volgen”, en hij schrijft de sleutel rechtstreeks via de symlink naar het inlogbestand. Als de machine een SSH-service uitvoert die de aanvaller kan bereiken, kan hij vanaf daar inloggen zonder wachtwoord.

Een tweede versie van de truc schrijft naar je shell-opstartbestand, ~/.zshrc, dat de shell uitvoert de volgende keer dat je een terminal opent, dus er is geen SSH nodig. Er zijn geen tekenen dat dit bij echte aanvallen is gebruikt; Wiz presenteert het als onderzoek.

In het goedkeuringsvak staat het verkeerde

Symlink-trucs zijn tientallen jaren oud. De symbolische link is alleen de levering; de echte mislukking is het goedkeuringsvak. In GhostApproval liegt die doos.

Bij het testen van Claude Code ontdekte Wiz dat de agent het echte doelwit in zijn eigen redenering al had opgemerkt, waarbij hij opmerkte dat project_settings.json, in zijn woorden, “eigenlijk een zsh-configuratiebestand” was. Toch noemde het vak dat aan de ontwikkelaar werd getoond alleen het onschadelijke bestand.

U klikt op Accepteren, in de veronderstelling dat u een lokaal configuratiebestand aan het bewerken bent, en het schrijven raakt uw shell-opstartbestand of uw SSH-sleutels. Wiz noemt dit een omzeiling van geïnformeerde toestemming: de mens is nog steeds op de hoogte, maar de lus laat hem het verkeerde zien.

Sommige tools zijn erger: ze slaan de poort helemaal over, waardoor er nooit een moment is om in te grijpen. Windsurf schrijft het bestand naar schijf voordat de knoppen Accepteren en Weigeren verschijnen, dus de prompt is slechts een knop voor ongedaan maken en de sleutel zit al op zijn plaats.

Augment toont helemaal geen dialoog, en Wiz demonstreerde het in stilte door een AWS-inloggegevensbestand te lezen dat buiten het project stond. De tools die nog steeds een prompt tonen, zijn echter niet veiliger; de prompt noemt alleen het verkeerde bestand.

Welke tools worden beïnvloed

Wiz rapporteerde het probleem aan alle zes leveranciers. Dit is waar ze allemaal staan ​​vanaf de publicatie:

Hulpmiddel Status Wat te doen
Amazon Q-ontwikkelaar Opgelost in Taalserver 1.69.0 (CVE-2026-12958) Update. Het wordt voor de meeste gebruikers automatisch geïnstalleerd en het opnieuw laden van de IDE haalt het binnen.
Cursor Vast in v3.0 (CVE-2026-50549) Update van de extensiebeheerder.
Google Anti-zwaartekracht Vast (CVE in behandeling) Update naar de huidige versie.
Vergroot Erkend; nog geen oplossing Richt het niet op opslagplaatsen die u niet vertrouwt.
Windsurfen Erkend; nog geen oplossing Richt het niet op opslagplaatsen die u niet vertrouwt.
Antropische Claude Code Twijfelachtig; huidige versies waarschuwen Update en lees de symlink-waarschuwing voordat u deze accepteert.

Anthropic kwam terug op de classificatie en vertelde Wiz dat het scenario “buiten ons dreigingsmodel” valt: de ontwikkelaar koos ervoor om de map te vertrouwen bij het starten van de sessie en keurde vervolgens de bewerking goed, dus de beslissing was aan hen.

Het zei ook dat de symlink-waarschuwing van Claude Code die begin februari werd verzonden, vóór het privérapport van Wiz, eerder een routinematige verharding dan een oplossing was, en dat een eerder “geen commentaar” een automatisch antwoord was.

Van de zes leveranciers is Anthropic de enige die zegt dat dit geen bug is; drie verzonden oplossingen, en twee werken eraan. De vraag die het standpunt oproept is echter reëel, en niet alleen die van Anthropic: hoe ver moet een codeeragent gaan om een ​​ontwikkelaar te beschermen die al een kwaadaardige repository heeft vertrouwd?

Naast patchen zijn er een paar gewoonten die het risico verkleinen, welk hulpmiddel je ook gebruikt. Voer de agent uit met beperkte bestandstoegang of in een sandbox of container. Blader door de README-bestanden en de verborgen configuratiebestanden van een opslagplaats voordat u deze door een agent laat ‘instellen’.

En nadat je in een onbekende repository hebt gewerkt, controleer je de bestanden die de aanvalsdoelen zijn, die zich buiten het project bevinden en dus niet in de git-status verschijnen: je shell-opstartbestand, je SSH-sleutels en de eigen configuratie van je AI-tool. Het controleren van hun tijdstempels, bijvoorbeeld met ls -la ~/.zshrc ~/.ssh/authorized_keys, laat zien of er iets is veranderd terwijl de agent actief was.

Het advies van Wiz aan gereedschapsmakers is kort: los de symlink op en toon de echte bestemming voordat u erom vraagt, markeer elke schrijfactie die buiten de projectmap terechtkomt en raak de schijf nooit aan totdat de gebruiker daadwerkelijk heeft goedgekeurd.

Een gedeelde fout, niet de fout van één leverancier

In mei publiceerde Adversa AI SymJack, hetzelfde symlink-en-goedkeuringspatroon voor zes codeeragenten, waaronder Claude Code, Cursor, GitHub Copilot en Grok Build.

Twee onafhankelijke teams die ontdekken dat dit wijst op een gedeelde zwakte in het ontwerp, en niet op een vergissing van één leverancier: deze agenten volgen een symlink met behulp van gewone bestandsbewerkingen en vragen vervolgens om goedkeuring op basis van het pad dat hen is overhandigd, niet het pad waarop het schrijven terechtkomt.

De overlap bereikt zelfs de CVE. Cursor’s eigen advies voor de symlink-bug crediteert zowel Wiz als Cato AI Labs, wiens eerdere werk The Hacker News behandelde als DuneSlide.

De bestanden die een AI-assistent vertrouwt, zijn niet langer alleen maar code. Voor deze agenten fungeren ze als instructies die de agent volgt en als paden waarop hij handelt, en geven ze vorm aan wat het goedkeuringsvak laat zien. Het bulletin van AWS behandelt ook een afzonderlijke Amazon Q-fout, CVE-2026-12957, waarbij een vergiftigde repository automatisch een configuratiebestand kan laden en opdrachten kan uitvoeren om de AWS-sleutels van een ontwikkelaar te stelen zodra de werkruimte wordt vertrouwd.

De exacte GhostApproval-techniek wordt nog onderzocht, maar het bredere patroon duikt al op in het wild: opslagplaatsen met bestanden die AI-agenten tot onveilig gedrag aanzetten.

Zoals THN in juni meldde, plaatste de Miasma-worm configuratiebestanden van AI-agenten in een Microsoft Azure-repository, zodat de payload werd uitgevoerd op het moment dat een ontwikkelaar het project opende in Claude Code, Cursor of Gemini. GitHub heeft als reactie daarop de 73 getroffen Microsoft-opslagplaatsen uitgeschakeld.

“Mens in de lus” beschermt je alleen als de lus de waarheid vertelt. Naarmate deze assistenten meer vrijheid krijgen om zelf bestanden te lezen en te schrijven, is een goedkeuringsvenster waarin de verkeerde bestemming wordt vermeld geen waarborg maar een aansprakelijkheid, en het behandelen van een misleidende opslagplaats als puur het probleem van de gebruiker legt de nadruk op de persoon die het minst in staat is om de ruil te zien.

Thijs Van der Does