Weekend deep dive

Plugin4Shell: hoe een pinning-belofte in vier grote AI-coding agents faalde

Onderzoekers van AIR ontdekten een zero-click kwetsbaarheid waarmee een aanvaller de SHA-pinning van plugins in Claude Code, Codex, GitHub Copilot en Gemini CLI kan omzeilen en op afstand code kan uitvoeren - de eerste supply-chain-kwetsbaarheid van het AI-agent-ecosysteem.

Saturday, 19 September 2026 · 1678 words

Listen to the episode →

Diezelfde vier bedrijven die de afgelopen twee jaar hun coding agents als het volgende grote productiviteitswapen verkochten - Anthropic, OpenAI, Google en Microsoft - bleken deze week allemaal dezelfde fout in hun software te hebben gemaakt. Beveiligingsonderzoekers van het Israëlische AIR (Air Security) publiceerden op 17 september een bevinding die ze Plugin4Shell noemen: een zero-click kwetsbaarheid waarmee een aanvaller code kan laten uitvoeren op elke machine waarop Claude Code, OpenAI Codex, GitHub Copilot of Gemini CLI draait - zonder dat het slachtoffer ook maar iets hoeft aan te klikken. De kwetsbaarheid zit niet in het taalmodel zelf, maar in de manier waarop deze agents plugins installeren en bijwerken. Dat maakt het, in de woorden van de onderzoekers, "de eerste supply-chain-kwetsbaarheid van het AI-agent-ecosysteem": niet het model of de agent zelf is het doelwit, maar de distributielaag eronder - de marktplaatsen waarlangs uitbreidingen op miljoenen machines belanden.

Wat er gebeurde

AIR vond het probleem al in mei 2026, bouwde een werkend proof-of-concept tegen alle vier de agents, en meldde het in juni verantwoord aan Anthropic, OpenAI, Google en Microsoft. Anthropic reageerde het snelst: de fix zit sinds versie 2.1.179 in Claude Code. OpenAI volgde met Codex 0.146.0, bevestigd op 12 augustus. Google koos een andere weg: het bedrijf liet weten dat de losstaande Gemini CLI wordt uitgefaseerd en geen patch meer krijgt - gebruikers moeten overstappen naar de opvolger Antigravity, die niet met hetzelfde plugin-pinningsysteem werkt en dus niet kwetsbaar is. Microsoft bleef stil. Volgens AIR kreeg het bedrijf in juni al bericht, maar was er op het moment van de publieke onthulling nog altijd geen patch voor GitHub Copilot. Een woordvoerder van GitHub liet aan The Register weten dat "Plugin4Shell-aanvallen GitHub niet raken", omdat het platform geen branch- of tagnamen toestaat die op een commit-hash lijken - de kern van één van de twee aanvalsvarianten. AIR repliceerde dat die bescherming onvolledig is, omdat marktplaatsen evengoed op Bitbucket of een eigen gehoste git-server kunnen draaien, platformen die Copilot en de andere agents ook ondersteunen. Op het moment van schrijven is er nog geen CVE-nummer toegekend en heeft geen van de vier leveranciers een officieel beveiligingsbulletin gepubliceerd; er zijn ook geen aanwijzingen dat de kwetsbaarheid al actief is misbruikt.

Hoe het technisch werkt

Het achterliggende idee van SHA-pinning is simpel en, tot deze week, vertrouwd: een marktplaats laat een plugin één keer beoordelen, koppelt die beoordeling aan een specifieke commit-hash (een lange, unieke vingerafdruk van precies die code) en belooft dat de agent voortaan altijd exact die versie installeert - ook als de auteur van de plugin later iets anders publiceert. Het is precies het mechanisme dat is bedacht om "rug pulls" te voorkomen: een auteur die eerst goedgekeurde code aanbiedt en er later, ongemerkt, iets kwaadaardigs voor in de plaats zet.

AIR ontdekte dat alle vier de agents die belofte niet waarmaken. Ze vragen git wel om de gepinde commit uit te checken, maar controleren nooit of de working tree ook daadwerkelijk op die commit staat. Git biedt een aanvaller twee manieren om van die blinde vlek gebruik te maken. Bij Claude Code, Codex en GitHub Copilot draait het om een eigenaardigheid in hoe git namen oplost: als er zowel een branch als een commit bestaat met exact dezelfde naam, geeft git voorrang aan de branch en toont het hooguit een waarschuwing dat de naam "ambigu" is - de installatie gaat gewoon door. Een aanvaller die de broncode van een plugin beheert, kan dus een branch aanmaken met precies de 40 tekens lange hash die de marktplaats heeft gepind, die branch tot standaardbranch van de repository maken, en daar kwaadaardige code in zetten. De agent checkt vervolgens "de gepinde commit" uit, krijgt in werkelijkheid de branch te pakken, en meldt keurig dat de installatie geslaagd is op precies de verwachte versie.

Gemini CLI werkt net iets anders, met hetzelfde resultaat. De tool haalt eerst de juiste commit op met git fetch en checkt die vervolgens uit via de verwijzing FETCH_HEAD. Als de aanvaller de standaardbranch van de repository zelf FETCH_HEAD noemt, checkt git die branch uit in plaats van de zojuist opgehaalde, legitieme commit - die wordt stilzwijgend genegeerd. In beide varianten had één simpele extra controle achteraf volstaan: na het uitchecken vragen welke commit er werkelijk in de working tree staat, en de installatie afbreken als dat niet de gepinde hash is. Die controle ontbrak in alle vier de producten.

Wat dit zonder één klik uitvoerbaar maakt, is de automatische update die op de achtergrond draait: bij Claude Code en Codex staat plugin-auto-update standaard aan. Als de marktplaats de gepinde hash van een al geïnstalleerde, vertrouwde plugin ophoogt naar een nieuwe - op zich onschuldige - versie, en de aanvaller heeft die nieuwe hash inmiddels als kwaadaardige branch klaarstaan, dan wordt de bestaande installatie op de achtergrond vervangen. Geen installatiestap, geen melding, niets om achterdocht te wekken.

De bredere context

Plugin4Shell staat niet op zichzelf; het is, zoals AIR het zelf noemt, "het derde bedrijf" in een reeks. Eerder liet hetzelfde team in onderzoek genaamd "The Story of Skills" zien hoe makkelijk het is om een kwaadaardige skill viraal te laten gaan: ze bouwden er zelf een, zagen hem overgenomen worden door duizenden agents, en namen op een gegeven moment de controle over meer dan 26.000 exemplaren. In een vervolgonderzoek, SkillJacking, bleek dat kapers niet eens zelf iets hoeven te publiceren: 925 skills die al in gebruik waren, bleken overgenomen via verlopen domeinen en repository-overnames, met bereik tot 134.000 agents. Nog weer eerder vond het team via "MCPJacking" 155 kaapbare MCP-servers in de officiële marktplaats, eveneens via verlopen domeinen. De rode draad is telkens dezelfde: de veiligheidsbeloften van marktplaatsen - reviewprocessen, pinning, officiële catalogi - blijken telkens weer te rusten op aannames die niet kloppen zodra iemand er specifiek naar op zoek gaat. Plugin4Shell is in die reeks bijzonder omdat het niet draait om het kapen van een repository of het misbruiken van een verlopen domein, maar om het mechanisme dat juist tegen precies dat soort misbruik zou moeten beschermen.

Het past ook in een grotere verschuiving die deze week meermaals in het nieuws kwam: onderzoekers gebruikten Claude om binnen 72 uur bij OpenAI-medewerkers in te breken, en Anthropic-topman Dario Amodei riep zelf op om de ontwikkeling van AI-mogelijkheden tijdelijk te laten inhalen door controle en beveiliging. Coding agents zijn in een paar jaar tijd van experimentele hulpmiddelen veranderd in software die met de rechten van een ontwikkelaar - broncode, cloudreferenties, CI/CD-pipelines - op productiesystemen draait. De marktplaatsen eromheen zijn in diezelfde tijd gegroeid van curiositeiten naar infrastructuur die, zoals AIR het stelt, "miljoenen machines" bedient, zonder dat het beveiligingsmodel eronder evenredig is meegegroeid.

Wat het concreet betekent en voor wie

Iedereen die een van deze vier agents gebruikt met plugins uit een marktplaats loopt risico - en dat is precies wat deze kwetsbaarheid gevaarlijk maakt. Je hoeft geen onvoorzichtige plugins te installeren om kwetsbaar te zijn: het slachtoffer hoeft alleen een plugin te hebben die keurig is beoordeeld en gepind, precies zoals het beveiligingsmodel bedoelt. Organisaties die verder gaan dan wat een communitymarktplaats biedt - die zelf plugins beoordelen en op een gecontroleerde commit pinnen - vertrouwen daarbij juist op het mechanisme dat Plugin4Shell ondermijnt. Pareekh Jain, analist bij Pareekh Consulting, wijst er tegenover InfoWorld op dat bedrijven die deze agents koppelen aan broncode, cloudreferenties of CI/CD-tools het meest kwetsbaar zijn, omdat een plugin met dezelfde rechten draait als de ontwikkelaar die de agent gebruikt. Concreet betekent dat toegang tot broncode, gestolen API-sleutels of cloudreferenties, gewijzigde repositories, en in het slechtste geval een voet tussen de deur bij bredere bedrijfssystemen.

De asymmetrie in de leveranciersreactie maakt het beeld extra ongelijk. Microsoft claimt dat bijna 90 procent van de Fortune 500-bedrijven Copilot gebruikt, en dat is nu net de agent zonder patch. Gemini CLI krijgt sowieso geen fix meer. Bedrijven die vandaag nog een van deze twee gebruiken met plugins van buiten GitHub, kunnen dus niet wachten op een update - ze zullen zelf maatregelen moeten nemen. Jain adviseert te kijken naar ongebruikelijke processen of netwerkverbindingen op machines die deze agents draaien, onverwachte plugin-bestanden, gewijzigde repositories, verdachte git-activiteit en ongebruikelijk gebruik van ontwikkelaars- of cloudreferenties, met EDR-, git-, CI/CD- en cloud-IAM-logs als voor de hand liggende plek om te beginnen zoeken.

Wat overdreven is en wat nog onbekend is

Het beeld is genuanceerder dan "vier grote AI-agents, allemaal open voor overname". GitHub blokkeert al langer branch- en tagnamen die op een 40-tekens hash lijken, en The Hacker News controleerde op 18 september dat elke plugin in Anthropic's community-catalogus én in de standaardcatalogi van Claude Code en Copilot naar een GitHub-repository wijst. Wie plugins alleen uit die standaard, GitHub-gehoste marktplaatsen installeert, loopt dus voor die specifieke branch-naamtruc geen risico - de blootstelling zit vooral bij externe marktplaatsen op Bitbucket of zelf gehoste git-servers, en bij Gemini CLI, waar GitHub's bescherming tegen hash-achtige namen niet overduidelijk ook de naam "FETCH_HEAD" blokkeert. Ook onduidelijk: of het bijwerken van een kwetsbare agent een al gewisselde, kwaadaardige plugin ook weer verwijdert, of alleen toekomstige wissels tegenhoudt - geen van de bronnen geeft daar uitsluitsel over. En hoewel AIR spreekt van "miljoenen kwetsbare agents", is dat een schatting op basis van het aantal gebruikers van deze tools in het algemeen, niet een geteld aantal daadwerkelijk getroffen installaties; er is geen bevestigd geval van misbruik in het wild.

Waar op te letten de komende weken

Drie dingen zijn het volgen waard. Ten eerste: of en wanneer Microsoft alsnog een patch voor GitHub Copilot uitbrengt, gezien de omvang van de Fortune 500-blootstelling die het bedrijf zelf claimt. Ten tweede: of er alsnog een CVE-nummer en officiële bulletins van de vier leveranciers komen, wat doorgaans ook duidelijkheid geeft over de daadwerkelijke ernstscore en eventuele detectierichtlijnen. Ten derde, en breder: AIR heeft dit jaar al drie keer laten zien dat de vertrouwensmodellen achter AI-agent-marktplaatsen rammelen op manieren die niemand vooraf had voorzien. Voor wie klanten adviseert over de inzet van coding agents is de les voorlopig minder een specifieke patch-tabel dan een structureel punt: een SHA-pin, een reviewproces of een "officiële catalogus" is pas een garantie zodra iemand ook daadwerkelijk heeft geprobeerd hem te breken - en bij AI-agent-marktplaatsen is dat tot nu toe zelden gebeurd voordat AIR het deed.

Written by Claude from RSS/Atom sources · all deep dives · podcast