Hoe andermans repository Claude Code kan kapen: 7 beschermingsregels
MarkdownVier gedocumenteerde indirecte promptinjectieroutes via repositories, GitHub-inhoud, Sentry-events en MCP-metadata, met primaire bronnen en grenzen van inperking.
Lees het volledige artikel
Kernpunten
Gepubliceerd onderzoek illustreert vier indirecte injectieroutes: installatie-instructies, GitHub-inhoud, telemetrie en MCP-toolmetadata. De rapporten verschenen op verschillende datums en betreffen verschillende clients en machtigingsinstellingen. Hieronder staan primaire bronnen en praktische inperkingsmaatregelen; geen instellingenbestand garandeert immuniteit.
Ailoot-documentatie: API, sleutels en installatie.
Vier gedocumenteerde routes van onvertrouwde tekst naar agentacties
Kernpunten
Deze voorbeelden betreffen verschillende onderzoeksperioden en clientconfiguraties, geen vier ontdekkingen in één periode van twee weken. Ze illustreren hoe onvertrouwd materiaal toolgebruik kan beïnvloeden; implementatiefouten, beschikbare inloggegevens en uitvoeringsrechten bepalen de uitkomst.
Formeel heet dit indirecte promptinjectie: een schadelijke instructie komt niet rechtstreeks van jou, maar via gegevens die de agent verwerkt terwijl hij een taak uitvoert — een vreemde README, een foutmelding, een GitHub-reactie of een antwoord van een externe dienst. Je mag de term meteen na deze alinea weer vergeten; vanaf hier gebruik ik gewone taal.
Vier onderzoeksvoorbeelden die hieronder worden besproken:
- Een repository die er onschuldig uitziet, kan veranderen in een reverse shell.
- De titel van een Pull Request kan drie verschillende AI-agents tegelijk kapen.
- Een agent kan een vals foutrapport van Sentry accepteren in plaats van een echt rapport.
- Een MCP-toolbeschrijving kan verborgen instructies bevatten die agentgedrag beïnvloeden; invloed hangt van model en opzet af.
Hoe verandert de README van een onschuldige repository in een reverse shell?
Kernpunten
0DINs proof of concept van 25 juni 2026 toont dit: je kloont een gewone repository en vraagt Claude Code om die uit te voeren — het volgt de installatie-instructies. Een fout bij de eerste uitvoering stelt een opdracht voor om het probleem te “verhelpen”, die in werkelijkheid het DNS-record van de aanvaller opzoekt en een reverse shell start. De aangehaalde bron demonstreert de techniek en stelt niet vast hoe vaak die bij echte incidenten is gebruikt.
De werking is zo ontworpen dat geen enkele afzonderlijke laag verdacht lijkt:
- Je kloont een gewone repository en vraagt Claude Code om die uit te voeren.
- De repository haalt een Python-pakket binnen dat is ontworpen om bij het eerste gebruik te mislukken.
- De foutmelding stelt beleefd de opdracht
python3 -m axiom initvoor als “oplossing”. - De opdracht
initvoertsetup.shuit. - Het script vraagt een DNS TXT-record op (doorgaans gebruikt voor domeingerelateerde notities, maar het veld accepteert willekeurige tekst). De aanvaller zet er een met base64 gecodeerde opdracht in (een manier om gegevens om te zetten in gewone tekst zonder spaties of speciale tekens) en geeft die rechtstreeks door aan bash.
- De waarde van het DNS-record kan op elk moment worden gewijzigd — zo krijgt de aanvaller een interactieve reverse shell met jouw gebruikersrechten en toegang tot alle geheimen op de machine.
De gedemonstreerde payload werd tijdens uitvoering uit DNS opgehaald; alleen repositorybytes scannen onthulde die uiteindelijke payload dus niet. Dat bewijst niet dat elke scanner of runtimecontrole machteloos is: inspectie van opgehaalde inhoud, procesbewaking en netwerkbeperkingen kunnen de keten zichtbaar maken of onderbreken. De bron is een proof of concept, geen meting van de frequentie van echte incidenten.
Hoe kaapte een Pull Request-titel drie verschillende AI-agents?
Kernpunten
Het onderzoeksrapport Comment and Control, gepubliceerd op 15 april 2026 en bijgewerkt op 4 mei, documenteert afzonderlijke GitHub-tekstinjectieroutes in Claude Code Security Review, Gemini CLI Action en Copilot Agent. Een verlaagde ernstscore bewijst niet dat de hele injectieklasse is verholpen; het rapport beschrijft leveranciersreacties en een specifieke Claude-toolbeperking.
Het onderzoek beschrijft deze routes en reacties; dit is een historisch rapport, geen controle van elke actuele productversie:
| Agent | Hoe de aanval binnenkwam | Wat uitlekte | Huidige status |
|---|---|---|---|
| Claude Code Security Review | PR-titel rechtstreeks in de systeemprompt ingevoegd zonder opschoning | ANTHROPIC_API_KEY, GITHUB_TOKEN | Onderzoek meldt ps-beperking en documentatiewijzigingen; ernst op 20 april 2026 naar None gewijzigd |
| Gemini CLI Action | Een nepsectie “Trusted Content” in een reactie omzeilde de veiligheidsinstructies | GEMINI_API_KEY | Google voegde afzonderlijke beveiligingsprompts toe aan de systeemprompt |
| GitHub Copilot Agent | Payload verborgen in een onzichtbare HTML-opmerking in Markdown | GITHUB_COPILOT_API_TOKEN, COPILOT_JOB_NONCE | GitHub beschouwt dit als een architecturale beperking, niet als een bug |
Tussen de eerste en de laatste melding in deze bekendmakingscyclus verstreken bijna vijf maanden (de eerste melding over Claude Code was van 17 oktober 2025; de laatste bugfix voor GitHub Copilot was van 9 maart 2026). De ernstwijziging en maatregelen uit het rapport bewijzen geen volledige sluiting van elke mogelijke payload. De PoC-repository van het onderzoek documenteert de aangetoonde Claude-route; voer de aanvalspayload niet op echte systemen uit. Voor jou zit de waarde in het aanvalspatroon zelf: niet-geverifieerde gegevens van GitHub komen bij de agent binnen, de agent voert opdrachten uit en geheimen lekken via datzelfde GitHub — de aanvaller heeft geen externe server nodig.
Twee analyses zijn genoeg om het patroon te zien: elke nieuwe bevinding afzonderlijk oplossen is niet haalbaar; kwetsbaarheden van dit type duiken elke twee weken op. Beveiligingsregels expliciet vastleggen in CLAUDE.md en settings.json in plaats van ze in je hoofd te houden, is onderdeel van context engineering: stel ze één keer in en ze werken automatisch in elke nieuwe Claude Code-sessie, zonder herinneringen. Drie pijlers werken samen: AI-kloon + Tweede Brein + Context Engineering — deze combinatie verandert Claude Code van een uitvoerder die alles vertrouwt in een agent met expliciete regels.
Kan een vals Sentry-foutrapport je agent overnemen?
Kernpunten
Een aangetoonde techniek werkt als volgt: een aanvaller stuurt een valse foutgebeurtenis naar Sentry; de agent vraagt via MCP een lijst met issues op, ontvangt de kwaadaardige gebeurtenis tussen de legitieme gebeurtenissen en voert de ingebedde opdracht uit als “stap om het probleem op te lossen”. Het Agentjacking-rapport van Tenet, bijgewerkt op 17 juni 2026, meldt 85% exploitatie over gecontroleerde validatierondes en meer dan 100 agentuitvoeringen, waaronder Claude Code, Cursor en Codex. Het noemt een Claude Code 2-1-161-opname van 2 juni, maar publiceert geen volledige modellenlijst, reproduceerbaar harnas, exacte noemer of uitsplitsing per client. Behandel 85% als gezamenlijke waarneming van de onderzoekers, niet als compromiskans van elke huidige installatie.
Voor de aanval is alleen een Sentry DSN-sleutel nodig — een openbare identificatiecode die veel projecten rechtstreeks in clientcode opnemen:
De werking is eenvoudig: een ontwikkelaar vraagt de agent om openstaande Sentry-fouten te bekijken; de agent vraagt ze op via de MCP-server, ontvangt een kwaadaardige gebeurtenis tussen de echte gebeurtenissen en leest de ingebedde opdracht als een vertrouwde instructie om de fout op te lossen — want formeel is dat precies de taak die hij kreeg.
Tenet meldt dat bestaande controles in de testomgevingen niet waarschuwden. Dat bewijst geen spoorloze uitvoering in elke implementatie: agent-/toollogs, endpointtelemetrie en netwerkregistraties kunnen latere acties vastleggen. De aanval begint via extern ingediende telemetrie en hangt daarna af van effectieve tools en machtigingen.
Hoe kunnen MCP-toolbeschrijvingen agentgedrag beïnvloeden?
Kernpunten
Toolmetadata kunnen instructies bevatten die het model beïnvloeden, maar hebben niet automatisch de autoriteit van een systeemprompt. MCPTox, voor het eerst ingediend op 19 augustus 2025, evalueert toolvergiftiging bij realistische MCP-tools en meldt gevoeligheid die per model en opzet verschilt. De waarneming dat krachtigere modellen gevoeliger kunnen zijn geldt binnen die benchmark, niet als universele wet.
De formulering van Microsoft is de nauwkeurigste die ik over dit onderwerp heb gevonden:
Tool poisoning houdt in dat een instructie in de beschrijving van een onschuldige tool wordt verborgen, waardoor de agent ernaar handelt.
De MCPTox-resultaten beschrijven de modellen en toolopzet van die benchmark. Trek uit een specifieke weerbaarheidsscore geen universele conclusie dat nauwkeuriger instructies volgen altijd tot meer kwetsbaarheid leidt; beoordeel de gebruikte instellingen en test eigen grenzen.
Wat hebben deze aanvallen gemeen en wat kan detectie missen?
Kernpunten
Elk van de vier bevindingen maakt gebruik van dezelfde blinde vlek: de agent maakt geen onderscheid tussen “gegevens om te analyseren” en “instructies om op te volgen”. Een scan van alleen de repository kan payloads missen die later via tools of netwerkgegevens binnenkomen. Detectie blijft nuttig, maar moet het hele uitvoeringspad meenemen. Combineer die met beperkingen op bestanden, inloggegevens, tools en netwerktoegang in plaats van alleen op herkenning door de agent te vertrouwen.
De conclusie geldt voor alle vier bevindingen: je kunt niet vertrouwen op “de code ziet er normaal uit” — elke afzonderlijke stap in een aanval is echt onschuldig. Beperk effectieve agentmogelijkheden en inspecteer voorgestelde acties; detectie en inperking behandelen verschillende delen van de aanval.
Welke beveiligingen heeft Claude Code al — en waarom zijn ze niet voldoende?
Kernpunten
Claude Code heeft ingebouwde beveiligingen: het analyseert de volledige prompt op verdachte instructies, gebruikt aparte contextvensters voor webcontent, controleert het vertrouwen wanneer het voor het eerst in een nieuwe map wordt gestart en bij het verbinden met MCP-servers. Maar de vlag --dangerously-skip-permissions, die veel mensen gebruiken om vervelende toestemmingsvragen uit te zetten, schakelt al deze beveiligingen tegelijk uit.
Anthropic erkent het probleem rechtstreeks in zijn documentatie, in plaats van het te verbergen:
Promptinjectie is een techniek waarbij een aanvaller probeert de instructies van een AI-assistent te overschrijven of te wijzigen door schadelijke tekst in te voegen. Claude Code bevat verschillende beveiligingen tegen deze aanvallen.
Volgens de documentatie analyseert de agent de volledige prompt op verdachte instructies, keurt curl en wget niet automatisch goed, houdt webcontent in een apart contextvenster zodat die niet met het hoofdvenster wordt vermengd, en vereist een vertrouwensbevestiging wanneer je hem voor het eerst in een nieuwe codebase start of verbinding maakt met een nieuwe MCP-server.
Maar Anthropic noemt een harde beperking zonder omhaal:
De modus bypassPermissions biedt geen bescherming tegen promptinjectie of onbedoelde acties.
Als je Claude Code ooit uit irritatie hebt gestart met --dangerously-skip-permissions, zodat het “ophoudt je lastig te vallen met vragen”, heb je alle mechanismen uitgeschakeld die precies de vier hierboven besproken aanvallen hadden kunnen stoppen. Ik laat deze vlag bewust uitgeschakeld, ook wanneer Claude Code voor de tiende keer in een sessie opnieuw iets vraagt — het is vervelend, maar die vragen vormen de grens tussen “de agent heeft verdachte tekst gelezen” en “de agent heeft die uitgevoerd”. Een verstandige instelling voor iemand die niet programmeert, is de standaardmachtigingsmodus (default of acceptEdits) met de sandbox ingeschakeld: gewone bestandsbewerkingen gebeuren zonder extra vragen, terwijl terminalopdrachten fysiek niet buiten de sandbox kunnen komen, zelfs als de agent is misleid.
Hoe schakel je de sandboxmodus in en dicht je het gat dat standaard openblijft?
Kernpunten
De opdracht /sandbox in een Claude Code-sessie beperkt waar de agent kan schrijven en met welke domeinen hij contact kan maken. Op macOS werkt dit direct; voor Linux en WSL2 zijn de pakketten bubblewrap en socat vereist. Een belangrijk detail: standaard blokkeert de sandbox niet het lezen van bestanden zoals ~/.ssh — daarvoor moet je apart een instelling inschakelen.
Om dit permanent voor alle projecten in te schakelen, wijzig je één instelling in ~/.claude/settings.json:
{
"sandbox": { "enabled": true }
}
Standaard kunnen opdrachten in de sandbox alleen schrijven naar de projectwerkmap en de tijdelijke map van de sessie. Netwerktoegang loopt via een proxy — er zijn geen domeinen vooraf toegestaan, en Claude Code vraagt om bevestiging wanneer het voor het eerst contact maakt met een nieuw domein. Anthropic zegt dat dit het aantal toestemmingsvragen sterk vermindert — met 84% volgens interne metingen van het bedrijf — omdat de sandbox sommige veilige gevallen zelf afhandelt in plaats van het elke keer aan jou te vragen.
Het gat dat de standaardinstellingen openlaten: de sandbox beperkt standaard schrijven, maar voorkomt niet dat bestanden zoals ~/.aws/credentials en ~/.ssh worden gelezen. Dat zijn precies de bestanden en omgevingsvariabelen waarop de eerdere analyses gericht waren. Dicht dat gat met een apart blok in hetzelfde bestand:
{
"sandbox": {
"enabled": true,
"credentials": {
"files": [
{ "path": "~/.aws/credentials", "mode": "deny" },
{ "path": "~/.ssh", "mode": "deny" }
],
"envVars": [
{ "name": "GITHUB_TOKEN", "mode": "deny" },
{ "name": "NPM_TOKEN", "mode": "deny" }
]
}
}
}
Het punt is dat zelfs als de reverse shell uit de eerste analyse binnen de sandbox opent, deze variabelen en bestanden fysiek uit de procesomgeving worden verwijderd voordat die start — er blijft niets over om te stelen.
Welke permissions.deny-regels moet je vandaag toevoegen?
Kernpunten
permissions.deny in settings.json blokkeert specifieke acties op regelniveau in plaats van de bedoeling te analyseren — en Anthropic garandeert uitdrukkelijk dat een deny-regel altijd voorrang heeft op een allow-regel. Deny-regels beperken overeenkomende toolacties, maar zijn geen toegangsgrens op OS-niveau; indirecte opdrachten en andere tools vereisen eigen controles.
Een minimale set voor iemand die niet programmeert, die de belangrijkste doelen van alle vier aanvallen tegelijk afdekt:
{
"permissions": {
"deny": [
"Read(~/.ssh/**)",
"Read(~/.aws/credentials)",
"Read(.env)",
"Bash(curl *)",
"Bash(wget *)",
"Bash(sudo *)"
]
}
}
Volgens de Claude Code-documentatie hebben deny-regels altijd voorrang op allow-regels. Dus zelfs als jij (of de agent zelf) elders per ongeluk ruimere toegang toestaat, wordt een specifieke deny-regel nog steeds als eerste toegepast. Deze regelvoorrang geldt voor overeenkomende toolverzoeken. Ze bewijst niet dat een geheim via elk kindproces of elke tool onbereikbaar is; gebruik ook afgedwongen bestands- en omgevingsbeperkingen.
Claude Code heeft ook een auto-modus, waarin een apart classificatiemodel acties controleert voordat ze worden uitgevoerd — het is niet hetzelfde model dat met jou praat. Standaard blokkeert het onder andere precies het patroon “code downloaden en meteen uitvoeren” (curl | bash). Anthropic waarschuwt uitdrukkelijk dat dit een onderzoeksmodus is die het aantal vragen vermindert, maar op zichzelf geen veiligheid garandeert — beschouw het als een extra laag, niet als vervanging van de sandbox en permissions.deny.
Hoe controleer je een repository en MCP-server voordat je ze aan je agent toevertrouwt?
Kernpunten
Controleer de leeftijd, commitgeschiedenis en herkomst van de link voordat je Claude Code vraagt een vreemde repository uit te voeren. Gebruik voor het installeren van een MCP-server alleen betrouwbare bronnen en onthoud dat Anthropic zelf externe servers niet op veiligheid controleert. Beide controlelijsten kosten een paar minuten en dekken precies de toegangspunten die in alle vier hierboven besproken aanvallen werden gebruikt.
Voor repositories is dit een korte controlelijst voordat je ze aan de agent overdraagt:
- Begin niet meteen met installeren via een link in een e-mail, post of recensie van een onbekende bron.
- Als de installatie een fout oplevert met de instructie “voer opdracht X uit om het op te lossen”, lees dan wat X werkelijk doet voordat je Claude Code toestemming geeft die uit te voeren.
- Controleer de leeftijd en commitgeschiedenis van de repository, niet alleen het aantal sterren — nieuw aangemaakte repositories kunnen gemakkelijk van nepreviews worden voorzien.
- Is de repository onbekend, voer de installatie dan uit in een virtuele machine, niet op je werkcomputer met echte sleutels. Dit is de aanbeveling van Anthropic voor het werken met externe diensten.
Anthropic's standpunt over MCP-servers staat openlijk beschreven:
We raden aan om je eigen MCP-servers te schrijven of servers van providers te gebruiken die je vertrouwt. Anthropic beoordeelt connectors aan de hand van de criteria voor opname voordat ze aan de directory worden toegevoegd, maar voert geen beveiligingsaudits uit en beheert zelf geen MCP-server.
Dat betekent dat jij verantwoordelijk bent voor het controleren van MCP-servers van derden, niet het platform waarop je ze hebt geïnstalleerd. Sommige teams — vooral beveiligingsstart-ups — bouwen hier al tools voor: MCP-configuratiescanners die zoeken naar vergiftigde beschrijvingen en tool-“pinning”, waarbij de hash van een beschrijving bij de eerste installatie wordt opgeslagen en latere wijzigingen worden gemeld. Deze technologieën zijn nieuw, dus het is te vroeg om er als enige bescherming op te vertrouwen — maar ze zijn het volgen waard, vooral als je MCP-servers met productieomgevingen verbindt. Voor zulke verbindingen kun je elke pakketversie vastpinnen en de vingerafdruk van toolbeschrijvingen in een auditlog vastleggen.
7 beschermingsregels: de controlelijst voor vandaag
Kernpunten
Alles in deze gids komt neer op zeven concrete acties: drie wijzigingen in één settings.json-bestand (sandbox, credentials, permissions.deny) en vier gewoonten voor het werken met code, fouten en MCP-servers van anderen. Geen ervan vereist speciale kennis — de hele controlelijst kost minder dan 20 minuten.
- Schakel de sandboxmodus in (
/sandboxof"sandbox": {"enabled": true}in~/.claude/settings.json) en voeg eencredentials-blok toe dat het lezen van~/.sshen~/.aws/credentialsverhindert. - Voeg
permissions.deny-regels toe voor het lezen van geheimenbestanden en voor gevaarlijke bash-opdrachten (curl,wget,sudo) — deny heeft altijd voorrang op allow. - Gebruik nooit
--dangerously-skip-permissionsvoor vreemde of niet-geverifieerde code — het schakelt alle beveiligingen tegelijk uit, ook de beveiligingen die precies deze aanvallen hadden kunnen stoppen. - Laat Claude Code niet automatisch een “oplossingsopdracht” uit een foutmelding uitvoeren — lees eerst wat die werkelijk doet.
- Installeer MCP-servers alleen van bronnen die je vertrouwt en onthoud dat Anthropic ze niet namens jou op veiligheid controleert.
- Splits sessies op basis van machtigingen: één sessie werkt met je persoonlijke gegevens en ziet geen externe gegevens; een tweede onderzoekt e-mails, repositories en tickets van anderen, maar heeft geen toegang tot geheimen; een derde publiceert extern, en alleen wat je persoonlijk hebt goedgekeurd. Ik houd dit in mijn eigen projecten strikt aan: een sessie met toegang tot betalingssleutels leest nooit willekeurige externe tickets of repositories, en een sessie die code van anderen analyseert, ziet helemaal geen geheimen. Meng deze rollen niet in één chat.
- Houd Claude Code en verbonden automatiseringsscripts bijgewerkt — de meeste hiaten die hier worden besproken, waren al gedicht met patches toen deze gids werd gepubliceerd, en nieuwe hiaten worden op vergelijkbare wijze verholpen.
Wat nu?
Geen van deze lagen biedt een garantie — Anthropic zegt zelf eerlijk dat geen enkele bescherming volledige immuniteit biedt. Ik verwacht niet dat Claude Code zelf een truc in een foutmelding of issue-reactie herkent. Voor mij maken de sandbox en permissions.deny deel uit van de manier waarop ik projectcontext beheer: wat de agent ziet, wat hij standaard vertrouwt en wat er gebeurt wanneer hij een fout maakt.
Bronnen
- 0DIN: Clone This Repo and I Own Your Machine (25 juni 2026)
- Comment and Control: onderzoeksrapport (15 april 2026; bijgewerkt 4 mei)
- Tenet Threat Labs: Agentjacking (bijgewerkt 17 juni 2026)
- MCPTox: primaire benchmark voor toolvergiftiging
- Claude Code Docs - Machtigingsmodi
- Anthropic Engineering - Claude Code-sandboxing
- Claude Code Docs - Machtigingen
- Claude Code Docs - Aanbevolen beveiligingspraktijken
- Claude Code Docs - Model Context Protocol (MCP)
- Analyse van een verwante kwetsbaarheid in de GitHub Action van Claude Code
- Claude Code zo configureren dat het je project niet van de ene op de andere nacht kapotmaakt
- Claude Code MCP-servers: 7 kant-en-klare configuraties en installatie stap voor stap
- Vibe-codingbeveiliging: voorkomen dat je door AI gebouwde applicatie wordt gehackt
Heb je toegang tot neurale netwerken via Ailoot nodig, neem dan een kijkje bij Ailoot.
Meer details
Vragen en antwoorden
Voorspelt het gemelde succespercentage van 85% het risico van mijn huidige configuratie?
Nee. Het is Tenets gezamenlijke resultaat uit gecontroleerde validatierondes, zonder volledige openbare modellenlijst, reproduceerbaar harnas of exacte noemer. Tools, goedkeuringen, inloggegevens en netwerktoegang van jouw agent bepalen welke acties mogelijk zijn.
Waarom is alleen de gekloonde repository scannen onvoldoende?
De uiteindelijke payload kan later via een foutrapport, toolmetadata of opgehaalde DNS-inhoud binnenkomen. Bekijk het hele uitvoeringspad en beperk inloggegevens, bestanden, tools en netwerktoegang; scanners en deny-regels alleen bewijzen geen volledige inperking.