Met Plugin4Shell kunnen repository-eigenaren vastgezette plug-incode uitwisselen over vier AI-coderingsagenten

Een fout in vier veelgebruikte AI-codeeragents zorgt ervoor dat iemand die de coderepository van een plug-in beheert, de plug-in die een agent installeert, kan omwisselen voor een kwaadaardige, zelfs als de agent die plug-in heeft vergrendeld op een specifieke beoordeelde versie, zei beveiligingsbedrijf Air Security donderdag.

Het bedrijf zei dat Anthropic de fout in Claude Code 2.1.179 en OpenAI in Codex 0.146.0 heeft gepatcht, dat GitHub Copilot geen oplossing heeft en dat Google de Gemini CLI, die het met pensioen gaat, niet zal patchen.

De agenten installeren add-ons, plug-ins genaamd, van online marktplaatsen. Om veilig te blijven, vergrendelt een marktplaats elke plug-in aan een enkele beoordeelde versie door middel van de commit-hash, een lange reeks die een exacte momentopname van de code identificeert. Air ontdekte dat de agenten die momentopname ophalen, maar nooit controleren of de code waarmee ze uiteindelijk eindigen, er ook daadwerkelijk mee overeenkomt.

Een branch is een benoemde coderegel in een repository. Op een codehost waarmee iemand een branch kan maken waarvan de naam op de commit-hash lijkt, kan de eigenaar van de repository van een plug-in die naam naar een andere code verwijzen. De agent installeert vervolgens de andere code terwijl hij nog steeds meldt dat deze zich in de vergrendelde versie bevindt.

Omdat een plug-in dezelfde toegang heeft als de persoon die de agent gebruikt, heeft de gewisselde code toegang tot de bestanden van die persoon, de opgeslagen inloggegevens en de systemen waarop ze kunnen inloggen, aldus Air.

De truc werkt niet overal. GitHub staat geen branch- of tag-namen toe die op commit-hashes lijken, volgens de documentatie van GitHub, dus een plug-in geïnstalleerd vanuit een GitHub-repository wordt niet blootgesteld aan deze branch-truc. Air zegt dat de truc werkt op hosts die dergelijke namen toestaan, zoals Bitbucket of de eigen git-server van een bedrijf, die deze agenten ook ondersteunen.

The Hacker News controleerde op 18 september de marktplaatsen waarmee de agenten verzenden en ontdekte dat elke plug-in in de communitycatalogus van Anthropic, en in de standaardcatalogi voor Claude Code en Copilot, naar een GitHub-repository verwijst.

De Gemini CLI wordt op een andere manier aangevallen. In plaats van een branch in de vorm van een hash, zegt Air dat het installatieprogramma kan worden misleid door een repository waarvan de hoofdbranch FETCH_HEAD heet, en GitHub’s regel tegen hash-vormige namen blokkeert die naam niet duidelijk. Het staat dus niet vast dat het installeren van een Gemini CLI-plug-in van GitHub de fout vermijdt, en de Gemini CLI is volgens Air een agent die niet zal worden opgelost.

Wat ervoor zou zorgen dat de aanval geen actie van het slachtoffer nodig heeft, is de automatische update op de achtergrond, waarmee een agent geïnstalleerde plug-ins zelf kan vernieuwen, zodat een plug-in die iemand al vertrouwt, zonder waarschuwing kan worden vervangen. Air zegt dat dit standaard wordt uitgevoerd in Claude Code en Codex.

Maar automatisch bijwerken is standaard alleen ingeschakeld voor de eigen ingebouwde marktplaatsen van de agenten, die worden gehost op GitHub, en is uitgeschakeld of optioneel voor externe marktplaatsen, volgens de documentatie van Anthropic en GitHub. Dus een lezer die alleen plug-ins installeert vanaf de standaard GitHub-gebaseerde marktplaatsen van de agenten, wordt niet blootgesteld aan de branch-naamversie van de aanval, volgens Air’s en GitHub’s eigen account over hoe het werkt.

Air zegt dat het in mei een werkende testaanval op alle vier de agenten heeft uitgevoerd en dat in juni aan de verkopers heeft verteld. Op 18 september was er nog geen CVE-identificatiecode toegewezen en geen van de vier leveranciers had een beveiligingsadvies voor de fout gepubliceerd, zo bleek uit controles van The Hacker News, en er zijn geen tekenen dat deze bij een echte aanval is gebruikt.

The Hacker News reproduceerde het onderliggende Git-gedrag in een lokale test, en OpenAI’s eigen openbare oplossing beschrijft dezelfde bug: Git “kan een aangevraagde commit SHA interpreteren als een branchnaam”, schreef het bedrijf, waardoor een plug-inbron “een andere commit kan materialiseren dan degene die het heeft vastgemaakt.” Die wijziging werd verzonden in Codex 0.146.0.

Omdat elke agent de vergrendeling op de eigen machine van de gebruiker controleert en niet op de marktplaats, kan geen enkele marktplaats dit voor gebruikers oplossen; de oplossing moet door de agent zelf worden verzonden. Waar elke agent staat:

Tussenpersoon Status Wat te doen

Antropische Claude Code

Opgelost, zegt Air, in 2.1.179

Update naar 2.1.179 of hoger

OpenAI-codex

Opgelost in 0.146.0

Update naar 0.146.0 of hoger

GitHub-copiloot

Geen oplossing, zegt Air

Geen pleister beschikbaar

Google Gemini-CLI

Zal niet worden opgelost, zegt Air

Ga naar Antigravity, zeggen Air en Google

De bronnen zeggen niet of het updaten van een betrokken agent een plug-in verwijdert die al was geruild, of alleen toekomstige swaps stopt.

De release-opmerkingen van Anthropic voor 2.1.179 vermelden de oplossing niet, en het account waarin deze is opgelost is die van Air. Voor Copilot zegt Air dat het Microsoft in juni heeft verteld en dat er geen oplossing is verzonden. Copilot kan plug-ins installeren van andere hosts dan GitHub, en volgens Air zit daar het risico.

Google stopte in juni met het aanbieden van de Gemini CLI voor consumenten en heeft gebruikers doorverwezen naar Antigravity, de nieuwere agent, die volgens Air door deze aanval niet kan worden bereikt. Google heeft ook gezegd dat zakelijke toegang tot de Gemini CLI zal worden voortgezet met updates. Of er een oplossing voor deze fout tussen zit, is niet duidelijk.

Dezelfde onderzoekers hebben eerder agent-add-ons getest. In juni berichtte The Hacker News over de test van Air waarbij een nepvaardigheid de beveiligingsscanners passeerde en ongeveer 26.000 agenten bereikte door een externe link te wijzigen nadat de beoordeling deze had goedgekeurd. Plugin4Shell verplaatst dat idee van een verwisselde link naar een verwisselde plug-in die achter een versievergrendeling zit.

Thijs Van der Does