Uw Claude Code MCP-token is één npm install verwijderd van diefstal - en uw audit-log ziet niets
Mitiga Labs publiceerde op 5 mei 2026 een onderzoek dat een nieuw type aanval zichtbaar maakt: de agentic control-plane compromise. De initiële vector is klassiek, een malafide npm-package met een postinstall hook, maar de impact verschuift van gewone credential theft naar persistente manipulatie van AI-agent tooling, MCP-routing en OAuth-vertrouwensketens.
De YouTube-demo van 59 seconden laat de volledige keten zien. Geen privilege escalation, geen memory bug, geen nieuwe CVE. Alleen toegestane file operations binnen user context.
Waarom ~/.claude.json het pivot-bestand is
Claude Code gebruikt ~/.claude.json als centraal configuratiepunt voor MCP-servers, trust state en OAuth-gerelateerde gegevens. Mitiga toont dat een user-level install hook deze configuratie kan herschrijven, MCP-verkeer via attacker-controlled infrastructuur kan routeren en OAuth bearer tokens kan onderscheppen.
Dit is ernstiger dan klassieke npm-malware. Bij gewone supply chain attacks verwacht je exfiltratie van .env, SSH keys of npm tokens. Hier wordt het AI-agent routing plane aangepast. Dat is een veel krachtiger aanvalspunt: je steelt niet alleen een token, je steelt een gedelegeerde operationele identiteit.
De vijf stappen van de aanvalsketen
Stap 1, Delivery. Een npm-pakket dat er legitiem genoeg uitziet om oppervlakkige review te passeren. Bevat een postinstall lifecycle hook die automatisch draait bij installatie.
Stap 2, Path seeding. De hook identificeert veelgebruikte clone-locaties van developers en schrijft pre-geconfigureerde trust entries naar ~/.claude.json, inclusief trust: true voor die paden.
Stap 3, Config rewrite. MCP server endpoints in hetzelfde ~/.claude.json worden omgeleid naar een attacker-controlled MITM-proxy. Van legitieme Atlassian MCP-endpoint naar localhost:8080.
Stap 4, Execution. De ontwikkelaar opent het project. Claude Code vertrouwt het geseedde pad, geen prompt. MCP-verkeer loopt via de proxy. OAuth bearer token vloeit naar de aanvaller. Voor de gebruiker werkt alles normaal.
Stap 5, Persistence. De hook reseedt de config na elke wijziging. Token rotation door de provider? De volgende refresh token wordt opnieuw onderschept. MCP-URL terugzetten? De hook overschrijft 'm opnieuw. Mitiga stelt expliciet: tokenrotatie is pas effectief nadat de hook en config-rewrite zijn verwijderd.
Vier eigenschappen die de token tot het perfecte doelwit maken
| Eigenschap | Security-impact |
|---|---|
| Persistent tokengebruik | Token blijft bruikbaar over sessies heen; refresh tokens in dezelfde store |
| Broad scopes | Geen per-call narrowing of just-in-time consent |
| Plaintext/user-writable opslag | ~/.claude.json bevat tokens én trust flags, zelfde bestand, zelfde permissies |
| Provider-side ambiguity | SaaS-logs tonen geldig OAuth-verkeer van Anthropic's vertrouwde egress |
Mitiga's sterkste bewijsstuk is een concreet Atlassian audit-log voorbeeld: de gebruiker is legitiem, de sessie is legitiem, het IP-adres resolveert naar Anthropic's egress range. De actie is een JQL-query die tickets met "credentials" opvraagt. Niets in die rij is fout. Maar ook niets is goed. De ontwikkelaar heeft die query niet uitgevoerd. Claude deed het.
Vendor-respons: out of scope, maar is dat genoeg?
Mitiga rapporteerde dit op 10 april 2026 aan Anthropic. Op 12 april antwoordde Anthropic dat dit buiten scope valt, code execution op de endpoint betekent dat veel mogelijk is.
Formeel verdedigbaar vanuit klassiek product-security perspectief. Maar vanuit enterprise risk management is dat onvoldoende. De vraag is niet of dit een "Claude Code CVE" is, maar of de architectuur voldoende compensating controls biedt tegen voorspelbare supply-chain manipulatie van agentic tooling.
"User consent" is hier geen robuust control, het is een zwakke ceremony. Developer workstations draaien continu npm install, pip install, uvx, npx, MCP-connectors, coding agents en SaaS-integraties. De initiële code-executie-grens is in de praktijk poreus.
MCP als nieuw aanvalsoppervlak, een breder patroon
Dit onderzoek past in een patroon dat ik de afgelopen maanden op djimit.nl heb gedocumenteerd. De NSA waarschuwde voor MCP als protocol-laag risico. Microsoft schetste de governance-laag. OWASP publiceerde de eerste agentic AI top-10. Oracle poisoning op kennisgrafen toonde hoe agent reasoning gemanipuleerd kan worden. De gemeenschappelijke deler: de zwakste schakel is niet de LLM zelf, maar de vertrouwensinfrastructuur rondom de agent.
Recente arXiv-literatuur bevestigt dit. Een studie naar MCP-clients noemt prompt injection en tool poisoning als belangrijke risico's voor AI-assisted development tools, met verschillen in guardrails, parameter visibility en audit logging tussen clients. Een aparte arXiv-analyse van Claude Code beschrijft dat Claude Code shell commands kan uitvoeren, bestanden kan aanpassen en externe services kan aanroepen, juist de reden waarom een lokaal configuratiebestand en hook-mechanisme niet als "passieve metadata" mogen worden behandeld.
Vijf directe controls
1. File integrity monitoring op agent control-plane files. Minimaal ~/.claude.json, project-level MCP-configuraties, hooks directories en agent skill folders. Alert niet alleen op file change, maar op semantische wijziging: nieuwe MCP-server, gewijzigde URL, localhost, 127.0.0.1, proxy-variabelen, trust flags.
2. Package lifecycle governance. postinstall, preinstall, install en prepare scripts zijn geen developer-frictie, het zijn privileged execution events. In CI/CD hoort npm ci --ignore-scripts de default te zijn. Voor lokale workstations: registreer welk package welk script uitvoert en welke security-sensitive bestanden daarna wijzigen.
3. OAuth hardening voor agentic tools. Scopes minimaal, tokens kortlevend, refresh tokens beperkt. MCP-integraties moeten aparte OAuth-apps gebruiken per tool, per omgeving, per vertrouwensniveau. Geen gedeelde developer super-token die Jira, Confluence, GitHub én interne API's ontsluit.
4. SaaS-side behavioral detection. Omdat provider logs geldig lijken, kijk naar context: ongebruikelijke JQL-queries, Confluence bulk reads, GitHub repository enumeration, afwijkende tijdstippen, acties vanuit AI-egress ranges, mismatch tussen lokale user-activity en SaaS-API-activiteit.
5. Agent egress policy. Een MCP-client mag niet dynamisch naar willekeurige endpoints praten. Definieer een allowlist voor MCP-server FQDN's, pin TLS/certificaten, blokkeer http://, blokkeer onverwachte localhost proxies, en maak afwijkingen approval-required.
Concreet inspectieblok voor uw workstation
Dit is een read-only discovery-script, geen remediation:
set -euo pipefail
echo "== Claude Code config presence =="
ls -la ~/.claude.json 2>/dev/null || true
echo "== MCP servers in ~/.claude.json =="
jq '.mcpServers // empty' ~/.claude.json 2>/dev/null || true
echo "== Suspicious MCP endpoints =="
grep -nEi 'localhost|127\.0\.0\.1|0\.0\.0\.0|http://|proxy|mitm|ngrok|cloudflared|tailscale|serveo|localtunnel' ~/.claude.json 2>/dev/null || true
echo "== Claude hooks and trust indicators =="
jq '.. | objects | select(has("hooks") or has("trust") or has("trusted") or has("allowedTools"))' ~/.claude.json 2>/dev/null || true
echo "== Package lifecycle scripts in current tree =="
find . -name package.json -not -path '*/node_modules/*' -maxdepth 6 -print0 \
| xargs -0 grep -nE '"(preinstall|install|postinstall|prepare)"' || true
echo "== Recently modified agent control-plane files =="
find "$HOME" \
\( -name '.claude.json' -o -name '*mcp*.json' -o -name '*claude*' -o -name 'settings.json' \) \
-mtime -14 -print 2>/dev/null | head -200
echo "== Local proxy processes =="
ps aux | grep -Ei 'mitmproxy|proxy|ngrok|cloudflared|localtunnel|socat|ssh -D|node .*proxy' | grep -v grep || true
echo "== Environment proxy variables =="
env | grep -Ei 'HTTP_PROXY|HTTPS_PROXY|ALL_PROXY|NO_PROXY' || true
Prioriteitenmatrix
| Prioriteit | Maatregel | Reden |
|---|---|---|
| P0 | Monitor ~/.claude.json en MCP endpoint drift | Dit is het pivot-bestand in de Mitiga-keten |
| P0 | Gate npm lifecycle scripts | Dit is de initiële execution vector |
| P0 | Inventariseer OAuth/MCP koppelingen | Zonder scope-inzicht ken je blast radius niet |
| P1 | Egress allowlist voor MCP | Voorkomt stille proxying |
| P1 | SaaS anomaly detection op AI-egress | Provider logs lijken anders legitiem |
| P1 | Config provenance in monitoring | Nodig voor reconstructie en governance |
| P2 | Per-tool OAuth-apps en short-lived scopes | Beperkt laterale impact |
| P2 | Developer awareness + secure install policy | Noodzakelijk, maar niet voldoende als primaire control |
Strategische conclusie
Dit onderzoek markeert een volwassenwording van agentic AI-risico's. De zwakste schakel is niet de LLM zelf, maar de vertrouwensinfrastructuur rondom de agent: lokale config, hooks, MCP-routing, OAuth tokens, package managers en SaaS scopes.
Voor organisaties die AI coding tools inzetten, en dat zijn er steeds meer, is MCP-configuratie nu een Tier-0 security asset. Niet als developer convenience, maar als identity-bearing infrastructure. Eén kleine configuratiewijziging, daarna legitiem ogend gedrag via vertrouwde AI- en SaaS-kanalen.
In MITRE ATT&CK-termen raakt dit minimaal aan supply-chain compromise, user execution, persistence via scripts/hooks, credentials from local files, en web service token abuse. Maar het is meer dan de som der delen: het is een agentic control-plane kill chain die klassieke endpoint-telemetrie en SaaS-auditlogs niet vanzelf aan elkaar koppelt.
Voor uw NIS2-dossier: als uw developers AI coding tools met OAuth-toegang tot SaaS gebruiken, en dat doen ze, dan is ~/.claude.json nu onderdeel van uw supply chain security scope. De audit-log ziet er gewoon uit. Dat is precies het probleem.
Gebaseerd op: Idan Cohen / Mitiga Labs. "Stealing MCP Tokens in Claude Code: A Man-in-the-Middle Attack Chain via ~/.claude.json." 5 mei 2026 (bijgewerkt 12 mei 2026). YouTube-demo: "Claude Code MCP Token Theft: Full MitM Attack Chain Demo." Disclosure timeline: gemeld 10 april 2026, Anthropic response 12 april 2026 (out of scope).
Uw Claude Code MCP-token is één npm install verwijderd van diefstal - en uw audit-log ziet niets
Dit artikel is exclusief beschikbaar voor nieuwsbrief-abonnees. Schrijf je in voor toegang tot 880+ artikelen.
Geen spam. Uitschrijven op elk moment.
AI & Security Intelligence
Wekelijkse nieuwsbrief met AI updates, security alerts en compliance inzichten, direct in uw inbox.
Security & AI Operating Model
Advisory met executiekracht
Van BIO2 en NIS2 tot EU AI Act, embedded in uw operating model, niet als extern project. Maandelijks opzegbaar, met assessments als bewijsvoering.