
Plugin4Shell: Vier AI-codeeragenten vertrouwden op een pin die ze nooit controleerden
- AnthropicNIEUWAnthropic: Claude Fable 5.22026-11-09$8.00 / $40.00 per 1 mln tokens · 99 tok/s
- orcaNIEUWOrca: OrcaC2 1.02026-11-07212 tok/s
- OrcaNIEUWOrcaCyber: GLM 5.3 Abliterated / Uncensored2026-11-04$3.00 / $5.00 per 1 mln tokens · 123 tok/s
- OrcaNIEUWOrcaCyber: Hy4 Abliterated / Uncensored2026-11-04$0.80 / $1.60 per 1 mln tokens · 230 tok/s
- OrcaNIEUWOrcaCyber: Kimi K3.1 Pro Abliterated / Uncensored2026-11-04$4.00 / $20.00 per 1 mln tokens · 39 tok/s
- OrcaNIEUWOrcaCyber: MiniMax M3.1 Flash Abliterated / Uncensored2026-10-29$0.80 / $1.60 per 1 mln tokens · 129 tok/s
- OrcaOrcaCyber: GLM 5.3 Flash Abliterated / Uncensored2026-10-27$0.80 / $1.60 per 1 mln tokens · 58 tok/s
- OrcaOrcaCyber: Qwen3.8 Flash Next Abliterated / Uncensored2026-10-26$0.80 / $1.60 per 1 mln tokens · 98 tok/s
- OrcaOrcaCyber: MiMo V2.6 Flash Abliterated / Uncensored2026-10-26$0.80 / $1.60 per 1 mln tokens · 40 tok/s
- MoonshotMoonshotAI: Kimi K3.1 Pro2026-10-2447Intelligentie
- OrcaOrcaCyber: DeepSeek V4.1 Flash Abliterated / Uncensored2026-10-23$0.80 / $1.60 per 1 mln tokens · 123 tok/s
- minimaxMiniMax: M3.1 Flash2026-10-1929Intelligentie
- OrcaOrca: OrcaCyber Ultra 1.02026-10-17$5.00 / $10.00 per 1 mln tokens · 104 tok/s
- deepseekDeepSeek: DeepSeek V4.1 Flash 10172026-10-1733Intelligentie
- DeepSeekDeepSeek: DeepSeek V4.1 Flash2026-10-1740Intelligentie
- OrcaOrca: OrcaCyber Zero 1.52026-10-10$3.00 / $7.50 per 1 mln tokens · 62 tok/s
- openaiOpenAI: GPT-6.1 Sol2026-09-2955Intelligentie
- anthropicAnthropic: Claude Sonnet 5.52026-09-2855Intelligentie
- typesafeTypeSafe: Jev 1.132026-09-24$0.04 / $0.00 per 1 mln tokens · 429 tok/s
- OpenAIOpenAI: GPT-6 Luna2026-09-2228Intelligentie
Op 17 september 2026 publiceerde AIR Security, een startup die beveiligingstools voor enterprise-AI-agents bouwt, onderzoek waarin Plugin4Shell wordt beschreven — een zero-click remote code execution-kwetsbaarheid in vier AI-codingagents: Anthropic's Claude Code, OpenAI's Codex, GitHub Copilot en Google's Gemini CLI. De bug zit niet in een van de modellen. Hij zit in de git-checkout die elke agent uitvoert wanneer hij een plugin installeert, en in het feit dat geen van de vier verifieerde dat de code die hij ontving de code was die hij had vastgepind. Twee van de vier hadden een patch op het moment dat het onderzoek openbaar werd. Twee niet. Dit incident is een vermelding in het Orca AI Incident Archive, dat het vastlegt als een kwetsbaarheid met hoge ernst in de toeleveringsketen, waarbij geen misbruik is gemeld.
Wat de agenten eigenlijk verkeerd deden
Elke getroffen agent installeert plugins via een marketplace, en elke marketplace zet een plugin vast op een specifieke git-commit — een SHA van 40 tekens — zodra de plugin is beoordeeld. Die vastzetting vormt het hele beveiligingsmodel: een reviewer keurt één onveranderlijke versie goed, en de agent wordt geacht die versie te blijven draaien, zelfs als de repository erachter later verandert. AIR beschrijft de kwetsbaarheid als een omzeiling van SHA-pinning voor plugins. De agent checkt de exacte commit uit die de marketplace heeft vastgezet, maar verifieert nooit dat de working tree die hij uiteindelijk krijgt, die commit is. In de woorden van de onderzoekers: de agent "checkt de exacte commit uit die de marketplace heeft vastgezet, maar verifieert nooit dat hij daar is terechtgekomen, waardoor een aanvaller die de repo van de plugin beheert, de checkout laat uitkomen op kwaadaardige code terwijl de vastzetting er nog steeds als nageleefd uitziet."
Git vult deze leemte op. Wanneer een naam zowel een geldige branch als een commit-object is, geeft git de voorkeur aan de branch en drukt alleen een waarschuwing over ambiguïteit af. Een aanvaller die de repository van de plugin beheert, maakt een branch waarvan de naam exact de vastgepinde 40-hexadecimale SHA is, laat die naar kwaadaardige code wijzen en maakt er de standaardbranch van de repository van. Een gewone clone haalt die branch vervolgens lokaal binnen onder de SHA-vormige naam, en de daaropvolgende checkout komt bij die branch uit. De vastgepinde commit zelf kan onaangeroerd blijven, zodat niets aan de beoordeelde versie verkeerd lijkt. Volgens AIR moeten twee voorwaarden gelden: de branch met de SHA-naam moet de standaardbranch zijn, omdat een niet-standaardbranch alleen als remote-tracking-ref wordt opgehaald en de checkout anders terugvalt op de echte commit; en de git-host moet een 40-hexadecimale branchnaam accepteren. GitHub wijst zulke namen ronduit af. Bitbucket en zelfgehoste git-servers niet.
Gemini CLI faalde via een andere route. Het haalde de vastgepinde commit op, registreerde die in het FETCH_HEAD-bestand van de repository en voerde daarna een checkout van FETCH_HEAD uit — een checkout die dat bestand niet hoeft te lezen. Een repository waarvan de standaardbranch zelf FETCH_HEAD heet, leidt de checkout om naar door een aanvaller beheerde inhoud en gooit de opgehaalde commit stilzwijgend weg. Het verslag van Cybersecurity News over het mechanisme komt overeen met dat van AIR, inclusief het onderscheid tussen de twee varianten.
Waarom niemand ergens op hoefde te klikken
Dezelfde checkout wordt opnieuw uitgevoerd tijdens automatische plugin-updates op de achtergrond, wat de standaard is in Claude Code en Codex. Dat is wat de aanval zero-click maakt in plaats van slechts stil: wanneer een marktplaats een vastgezette SHA bijwerkt naar een gewone nieuwe versie, voert elke agent die de plugin al heeft geïnstalleerd de checkout opnieuw uit zonder prompt en zonder gebruikersactie. Het punt van AIR is dat het slachtoffer niets achteloos hoeft te installeren. Het slachtoffer moet één plugin hebben geïnstalleerd, van een marktplaats die het vertrouwt, die precies zoals het ontwerp bedoelt is beoordeeld en vastgezet.
Er zijn twee manieren om die positie te bereiken, en geen van beide vereist controle over de marktplaats. In de eerste publiceert een aanvaller een oprecht goedaardige plug-in die de beoordeling doorstaat, een installatiebasis opbouwt, een normale update uitbrengt en pas daarna de kwaadaardig genoemde branch aanmaakt. In de tweede neemt de aanvaller de repository over achter een plug-in die iemand anders heeft geschreven en die de marktplaats al vertrouwt, en pusht vervolgens de kwaadaardige versie naar iedereen die hem heeft geïnstalleerd.
De cijfers achter die twee routes komen uit eerder werk van AIR, niet van Plugin4Shell. In een campagne die het bedrijf The Story of Skills noemt, zegt het dat een plugin die het bouwde zich naar meer dan 26.000 agents verspreidde voordat deze werd teruggetrokken. In SkillJacking meldde het dat 925 skills die al actief in gebruik waren, waren overgenomen van hun oorspronkelijke beheerders en 134.000 agents bereikten. De kop van AIR bij het Plugin4Shell-bericht beweert "miljoenen agents getroffen"; het onderzoek geeft geen aantal blootgestelde installaties, en geen enkele derde partij heeft er een gepubliceerd.
De tijdlijn, en waar de oplossingen zijn beland

AIR zegt dat het de kwetsbaarheid in mei 2026 heeft gevonden met werkende proof-of-concept-exploits tegen alle vier de agents, en die de volgende maand onder gecoördineerde openbaarmaking aan elke leverancier heeft gemeld. Anthropic bevestigde de oplossing in Claude Code 2.1.179 op 17 juni. Google vertelde AIR op 4 augustus dat er geen oplossing zou worden uitgebracht, omdat Gemini CLI wordt uitgefaseerd. Codex 0.146.0 werd op 12 augustus geverifieerd als opgelost. Microsoft heeft geen oplossing uitgebracht voor GitHub Copilot.
De patchversies zijn de enige openbare bevestiging dat het gebrek echt bestond in de twee producten die het hebben verholpen. De gepubliceerde changelogvermelding van Anthropic voor 2.1.179 noemt het omgaan met wegvallende verbindingen, WSL2-scrollen, sandbox-glob- en interfacefixes, en vermeldt geen pinning, pluginverificatie of een beveiligingsfix van welke aard dan ook. The Hacker News deed dezelfde observatie, volgens het verslag van The Next Web. Op het moment van publicatie van het onderzoek was er geen CVE-identifier toegewezen, en de onderzoeksnotitie van de Cloud Security Alliance over het gebrek herhaalt dat er geen identifier bestond drie maanden nadat de leveranciers waren geïnformeerd.
Vier leveranciers, drie verschillende antwoorden

Google ging verder dan alleen weigeren te patchen. Het heeft Gemini CLI afgeschaft, wat betekent dat bestaande installaties blootgesteld blijven zolang mensen ze blijven draaien. Het advies is om te migreren naar Antigravity, de nieuwere agentische ontwikkelomgeving, die volgens AIR niet door de aanval wordt bereikt, omdat er geen SHA-pinning voor marketplace-plugins is om te omzeilen.
Het standpunt van GitHub is weer anders. Een woordvoerder van GitHub vertelde The Register dat het platform gebruikers niet toestaat branch- of tagnamen te maken die op commit-SHA's lijken, en dat "deze maatregel ervoor zorgt dat de gemelde kwetsbaarheid niet op GitHub kan worden misbruikt." AIR betwist niet het bestaan van die maatregel, maar de reikwijdte ervan: marketplaces kunnen op andere platforms zoals Bitbucket worden gehost, zeiden de onderzoekers tegen The Register, en GitHub Copilot ondersteunt nog steeds marketplaces van die platforms, dus de variant met branch-namen blijft bereikbaar voor Copilot-gebruikers. AIR zegt ook dat de eigen documentatie van Anthropic Bitbucket en zelfgehoste git als geldige marketplace-backends vermeldt; de huidige marketplace-documentatie van Anthropic beschrijft het toevoegen van een marketplace via een git-repository-URL, niet alleen via GitHub. Microsoft reageerde niet op het verzoek om commentaar van The Register, en AIR zei dat het sinds het melden van het probleem in juni geen reactie van Microsoft had ontvangen, waarbij het wees op de hoeveelheid meldingen die het bedrijf verwerkt.
Dit is een meningsverschil over de breedte van de blootstelling, niet over de vraag of de bug bestaat. De mitigatie van GitHub is een beperking op hostniveau; de bevinding van AIR is dat de controle binnen de agent moet plaatsvinden, omdat de pin aan de clientzijde wordt bepaald.
Wat is vastgesteld, en wat niet
• Vastgesteld: het mechanisme. Het artikel van AIR geeft de exacte git-commando's, de resolutieregel waarbij ref boven object gaat, de twee voorwaarden waaraan de branch-truc moet voldoen, en de afzonderlijke FETCH_HEAD-variant voor Gemini CLI. The Register, Help Net Security, Cybersecurity News, InfoWorld en The Next Web melden het allemaal op dezelfde manier.
• Vastgesteld: twee gepatchte versies. Anthropic bevestigde Claude Code 2.1.179 op 17 juni 2026 en OpenAI's Codex 0.146.0 werd op 12 augustus 2026 als opgelost geverifieerd, volgens de openbaarmakingstijdlijn van AIR.
• Vastgesteld: twee producten hadden op het moment van openbaarmaking geen patch. Google zal Gemini CLI niet patchen en faseert het uit; Microsoft heeft nog geen Copilot-fix uitgebracht.
• Niet vastgesteld:onafhankelijke reproductie. Elk gepubliceerd verslag voert terug op AIR's eigen blogpost, en de onderzoeksnotitie van de Cloud Security Alliance beschrijft expliciet geen technische validatie door derden of onafhankelijke reproductie van de exploit. Om die reden beoordeelt het archief de betrouwbaarheid van dit record als B.
• Niet vastgesteld: hoeveel installaties daadwerkelijk zijn blootgesteld. "Miljoenen" is de karakterisering van AIR in de kop, geen gemeten aantal.
• Niet vastgesteld: of het bijwerken van een getroffen agent een plug-in verwijdert die al is vervangen, of alleen de volgende vervanging voorkomt. Geen gepubliceerde bron lost dit op.
• Niet vastgesteld: enig gebruik in de praktijk. Geen enkele bron in het dossier meldt exploitatie, aftasten of infrastructuur van aanvallers, en het archief registreert werkelijke schade als onwaar. Dat is een gebrek aan rapportage, niet het bewijs dat er niets is gebeurd.
Een controle door een derde partij beperkt het praktische beeld wel. The Next Web, dat de controles van The Hacker News samenvat, meldt dat plug-ins in Anthropic's communitycatalogus en in de standaardcatalogi van Claude Code en Copilot verwijzen naar GitHub-repositories, en dat automatisch bijwerken standaard aan staat, vooral voor die ingebouwde marktplaatsen. Omdat GitHub branch-namen in de vorm van een SHA weigert, is de variant met de branch-naam moeilijker bereikbaar voor gebruikers die bij de standaardcatalogi blijven. Die redenering geldt niet voor de FETCH_HEAD-variant van Gemini CLI, die er niet van afhangt hoe de host branches benoemt.
Hoe een fix eruit moet zien

De door AIR aanbevolen oplossing is één assertie: los na checkout de commit op die daadwerkelijk in de working tree aanwezig is en breek af tenzij deze gelijk is aan de vastgezette SHA. De onderzoekers benadrukken dat er naar de opgeloste HEAD moet worden gekeken in plaats van naar de ref die is aangevraagd, omdat juist dat onderscheid is waar de Gemini CLI-variant doorheen glipt, en dat dit binnen de agent moet draaien, omdat de pin aan de clientzijde wordt opgelost en geen enkele marktplaats de garantie kan afdwingen die zij adverteert.
Praktisch advies voor teams die deze agents inzetten, ontleend aan AIR, Cybersecurity News en het analistencommentaar in InfoWorld:
• Werk Claude Code bij naar 2.1.179 of later en Codex naar 0.146.0 of later. Bijwerken is de enige volledige tegenmaatregel wanneer er een patch bestaat.
• Schakel automatische plugin-updates uit op elke agent waarvoor geen patch beschikbaar is. Daarmee wordt de kwetsbaarheid teruggebracht van zero-click naar een handmatige herinstallatie, wat eerder een beperking van de blootstelling is dan een oplossing.
• Stap over van Gemini CLI in plaats van te wachten op een patch waarvan Google heeft gezegd dat die er niet komt.
• Controleer de plugininventaris en beperk marketplacebronnen waar mogelijk. AIR merkt op dat een marketplace de branch-namevariant kan afzwakken door alleen hosts toe te staan die SHA-vormige namen weigeren, in feite alleen GitHub, maar dat dit hosts verbiedt die de agents officieel ondersteunen en niets doet voor de Gemini-variant.
• Beschouw het werkstation als de blootstellingsgrens. Plugins erven de machtigingen van de agent, dus een geslaagde exploit bereikt broncode, SSH-sleutels, cloudreferenties, CI/CD-tokens en interne repositories met de eigen autoriteit van de ontwikkelaar. Pareekh Jain, principal analyst bij Pareekh Consulting, vertelde InfoWorld dat beveiligingsteams EDR-, git-, CI/CD-, cloud-IAM- en authenticatielogs moeten onderzoeken op ongebruikelijke processen, onverwachte pluginbestanden, gewijzigde repositories en verdachte git-activiteit — en voegde eraan toe dat deze stappen het risico verkleinen zonder de onderliggende fout te verhelpen, die hij toeschrijft aan code van de leverancier. "Ondernemingen kunnen controles rond plugingebruik invoeren," vertelde hij InfoWorld, "maar ze kunnen geen fout verhelpen in de manier waarop de coderingsagent de code valideert die hij uitcheckt."
Waarom een pinningbug degene was die ertoe deed
SHA-pinning was het antwoord van de industrie op precies het soort overname dat AIR al had aangetoond: als een openbare repository wordt gecompromitteerd, blijft de agent de geauditeerde hash draaien in plaats van op te halen wat de aanvaller ook heeft gepusht. Plugin4Shell breekt de hash niet. Het laat zien dat de agents de pin resolveerden naar een branchnaam die slechts op de hash leek, en het resultaat nooit vergeleken. Alles stroomafwaarts van die aanname — reviewprocessen, interne allowlists, het vertrouwen dat ontwikkelaars in een gepinde versie stellen — erft de fout.
Wat het dossier niet ondersteunt, is de bewering dat er iets is weggenomen. Dit is een kwetsbaarheid die is gevonden en in twee van de vier gevallen verholpen; geen enkele bron daarin meldt een inbraak, en de producten waarvoor geen patch is uitgebracht, wachten nog steeds. De open vraag is de minst bevredigende: voor iedereen die een plugin op een niet-gepatchte agent heeft uitgevoerd, is er geen gepubliceerde manier om te bepalen of de code die werd uitgevoerd de code was die zij hadden goedgekeurd.
