NSA: MCP is de nieuwe enterprise control plane — en hij is niet veilig
Security & InfrastructuurDe NSA positioneert MCP niet als "onveilig", maar als een snel volwassen wordende integratielaag waarvan de security maturity achterloopt op de adoptiesnelheid. Het document — CSI_MCP_SECURITY.pdf, 17 pagina's, 25 referenties, classificatie U/OO/6030316-26 — is het eerste grote overheidsadvies over MCP-beveiliging.
De belangrijkste boodschap is scherp: MCP geeft AI-agenten toegang tot tools, data, context en acties, maar het protocol zelf dwingt nog onvoldoende af op identity, autorisatie, token lifecycle, context-isolatie, message integrity, logging en runtime containment. Daardoor verschuift de beveiligingslast volledig naar implementatie, architectuur en operationele governance.
Wat de NSA feitelijk stelt
MCP is volgens de NSA uitgegroeid tot een de facto standaard voor communicatie tussen AI-gedreven diensten. AutoGen Studio, Harvey AI, Agentverse en Copilot zijn slechts enkele voorbeelden van producten die MCP inzetten in business, finance, legal en software development.
Het protocol faciliteert automatische datadeling en taakuitvoering tussen AI-workflows: evaluatie, enrichment, preprocessing en task automation. De NSA waarschuwt dat deze proliferatie sneller gaat dan de ontwikkeling van het security model.
De kernspanning zit in de omkering van het klassieke interactiemodel. In plaats van dat clients alleen data opvragen bij servers, kunnen MCP-servers via agentische flows indirect queries uitvoeren, tools activeren en acties laten plaatsvinden namens clients of gebruikers. Dit creëert nieuwe aanvalspaden die vaak slecht traceerbaar zijn.
"MCP itself cannot enforce these security principles at the protocol level." — MCP Specification
Die ene zin uit de MCP-specificatie vat het probleem samen. De NSA benadrukt dat traditionele controls zoals authenticatie, autorisatie en inputvalidatie nog steeds nodig zijn, maar onvoldoende zijn voor MCP-omgevingen. Agentic AI voegt systemische risico's toe: dynamic tool invocation, impliciete trust-relaties tussen agents, en context sharing waarbij langlevende of overlappende contextvensters data kunnen lekken of verkeerd geïnterpreteerd worden.
De zeven risicoclusters
1. Access control is optioneel of te grofmazig
MCP definieert niet verplicht hoe een sessie aan een identiteit wordt gekoppeld. Clients, servers, proxies en hosts kunnen data verwerken zonder harde access-control-eisen. Veel implementaties missen authenticatie volledig, of hebben geen RBAC/CRUD-semantiek waarmee read, create, update en delete strikt worden gescheiden.
Enterprise-impact: zonder scoping ontstaat "blanket delegation", waarbij een agent meer kan dan de use case vereist. GitHub MCP, filesystem MCP, database MCP, browser MCP, Slack/Teams MCP — allemaal kwetsbaar voor overprivileged access.
2. Serialization en context-injectie
MCP transporteert gestructureerde objecten zoals context, configuratie en payloads. De NSA stelt dat strikte validatie en schema enforcement vaak ontbreken. Serialized content — inclusief prompts of comments — kan executable code of embedded model calls bevatten.
Architecturaal betekent dit: je mag MCP-payloads niet behandelen als "data". Ze zijn potentieel instructief, uitvoerbaar of gedragssturend. Elke MCP-message moet door een schema-, policy-, provenance- en intent-filter.
3. Approval workflows zijn fragiel
Sommige implementaties vragen consent of actiebevestiging, maar capability changes of gewijzigde datatoegang binnen een reeds vertrouwde MCP-server kunnen onopgemerkt blijven. Een eerder goedaardige service kan later toegang krijgen tot gevoelige resources zonder nieuwe geïnformeerde toestemming.
"User clicked allow" is geen voldoende controle. Toestemming moet capability-specifiek, tijdsgebonden, herroepbaar en wijzigingsgevoelig zijn.
4. Token- en sessiebeveiliging
MCP-implementaties gebruiken vaak OAuth-style bearer tokens of session IDs, maar authorization is optioneel en MCP schrijft geen verplicht protocolniveau voor voor refresh, revocation, reuse control, expiratie en rotatie. De NSA noemt expliciet: idempotency is niet gegarandeerd, replay attacks zijn mogelijk.
Enterprise-eis: geen bearer-token passthrough zonder audience binding, short-lived tokens, refresh-token isolatie, token exchange, mTLS waar passend, replay protection en expliciete revocation.
5. Tool invocation path confusion en naming collisions
Sommige orchestrators resolven toolnamen automatisch vanuit publieke registries of lokale modules. Daardoor kunnen naming collisions ontstaan waarbij actor-controlled code wordt geladen of legitieme functionaliteit wordt overschreven.
Dit is supply-chain security in agentische vorm. Toolnamen zijn geen security boundary. Je hebt immutable tool IDs, signed manifests, pinning, allowlists, registry trust policies en provenance nodig.
6. GitHub MCP en repository-exfiltratie
De NSA noemt als concreet voorbeeld dat GitHub MCP-tools blanket access kunnen krijgen namens een gebruiker, met read/write toegang op private én publieke repositories. Dit kan leiden tot uitlezen van private content en publiceren naar publieke repositories zonder expliciete intentie van de gebruiker.
7. Multi-agent poisoning en chained execution
Output van MCP-agents kan door downstream agents worden geïnterpreteerd als executable prompt in plaats van passieve content. Dat maakt cascading prompt injection, data-exfiltratie en control-flow hijacking mogelijk in multi-agent pipelines.
De NSA documenteert specifiek een WhatsApp MCP-exploit: een malicious MCP server naast een trusted MCP server manipuleerde via tool descriptions het client-gedrag, waardoor WhatsApp-berichten werden geëxfiltreerd zonder user notice of approval. Een ander voorbeeld: CVE-2025-49596 — critical RCE in Anthropic MCP Inspector (fixed in 0.14.1).
NSA-aanbevelingen vertaald naar enterprise controls
De NSA geeft tien concrete aanbevelingen. Vertaald naar enterprise architectuur:
| NSA-aanbeveling | Enterprise control | |-----------------|-------------------| | Isolate MCP tools | AppContainers, seccomp, AppArmor, SELinux per tool | | Sign & verify messages | Cryptografische signing binnen JSON-payload, OWASP ASVS V7 | | Data classification zones | Tools groeperen op dataclassificatie — publiek vs. gereguleerd | | Egress filtering | Squid/tinyproxy/DLP voor outbound MCP-connections | | Least privilege | Expliciete deny op filesystem, netwerk, environment variables | | Input/output inspection | Elke tool-output filteren op prompt injection markers | | Comprehensive logging | Parameters, identities, cryptographic hashes per invocation | | Network scanning | MCP Scanner, Ramparts, CyberMCM, Proximity — periodiek scannen | | Server inventory | Alle MCP-agents en tools met versies, patchhistorie, SBOM | | Protocol hardening | Afdwingen wat de spec niet doet — policy gateway tussen client en server |
Praktisch control framework
Voor een omgeving met Linux Server Workstation, Mac Mini control plane, Claude Code, OpenCode, Kilo Code, Codex, Ollama, GitHub en lokale MCP-servers — zoals de DjimIT-infrastructuur — positioneer ik MCP als volgt:
Identity & access
Gebruik per MCP-server een eigen service identity. Geen gedeelde developer tokens. Geen brede GitHub PAT's. Gebruik repo-scoped GitHub Apps, short-lived tokens, OIDC federation waar mogelijk, audience binding, token exchange en revocation. Scheid read-only, write, deploy en admin-flows.
Network
Bind lokale MCP-servers standaard aan 127.0.0.1, niet aan 0.0.0.0, tenzij expliciet achter reverse proxy met authn/authz. Gebruik egress allowlists, DNS logging, DLP of filtering proxy voor externe MCP-calls. Segmenteer dev, personal automation, production-like tooling en sensitive repos.
Runtime
Run MCP-tools containerized of onder systemd hardening, AppArmor/SELinux/seccomp, read-only filesystem waar mogelijk, no-new-privileges, beperkte mounts, beperkte environment variables en resource quotas. Shell-capable MCP-tools apart behandelen als high-risk execution engines.
Tool registry
Introduceer een interne MCP Capability Registry. Elke tool krijgt eigenaar, doel, data-classificatie, permissies, toegestane endpoints, versie, hash/signature, SBOM, updatebeleid en risk rating. Dynamic discovery mag alleen tegen deze registry, niet tegen willekeurige publieke registries.
Policy enforcement
Plaats een MCP policy gateway tussen client en server. Deze gateway valideert schema's, tool IDs, caller identity, data classification, context size, allowed operations, rate limits en approval requirements. Voor high-impact acties (write to repo, send email, publish, deploy, delete, browser automation, database mutation) is step-up approval verplicht.
Observability
Log per invocation: user/session, agent, model, MCP client, MCP server, tool ID, action, parameters hash, approval decision, token audience, repo/resource scope, output hash, latency, en error state. Stuur anomalieën naar SIEM: nieuwe tool, gewijzigde tool description, ongebruikelijke egress, prompt-injection markers, repeated failures, privilege escalation attempts.
Supply chain
Pin MCP-serverversies. Vermijd archived repos tenzij geforkt, geauditeerd en intern onderhouden. Genereer SBOM's. Gebruik dependency scanning, secrets scanning, SAST, container scanning en signed releases. Tool descriptions en manifests moeten versiebeheer en review hebben.
Risicoregister
| Risico | Kans | Impact | Prioriteit | Minimale maatregel | |--------|------|--------|------------|-------------------| | Ongeauthenticeerde lokale MCP-server op netwerk | Hoog | Hoog | Kritiek | Bind aan localhost, firewall, reverse proxy auth | | GitHub MCP met brede repo-rechten | Hoog | Kritiek | Kritiek | Repo-scoped GitHub App, least privilege, write approval | | Tool poisoning via descriptions of metadata | Hoog | Hoog | Kritiek | Signed manifests, allowlist, output filtering | | Prompt injection via web, issue, markdown of logs | Hoog | Hoog | Kritiek | Treat output as untrusted input, policy gateway | | Token replay of sessiehijacking | Middel | Hoog | Hoog | Short-lived tokens, audience binding, nonce, replay cache | | Tool naming collision | Middel | Hoog | Hoog | Immutable tool IDs, registry pinning | | RCE via inspector/dev MCP tools | Middel | Kritiek | Kritiek | No production exposure, patching, sandboxing | | Onvoldoende logging voor incident response | Hoog | Hoog | Kritiek | Invocation audit trail naar SIEM |
Implementatieroadmap: 30-60-90 dagen
Eerste 30 dagen: inventarisatie en containment
- Maak een volledige MCP-inventory van alle lokale, remote en agentgebonden MCP-servers
- Scan op open poorten, 0.0.0.0 bindings, ontbrekende authenticatie, brede tokens en archived dependencies
- Zet alle niet-noodzakelijke MCP-servers uit
- Forceer localhost binding voor development servers
- Verwijder brede GitHub PAT's
- Maak een eerste allowlist van toegestane MCP-tools
Dag 31 tot 60: policy en observability
- Bouw een interne capability registry (eigenaar, versie, permissies, data-classificatie)
- Voeg logging toe voor alle tool calls
- Integreer basis-signalen met SIEM of lokale security telemetry
- Implementeer rate limits, context size limits, schema validation en high-risk action approvals
- Maak aparte profielen voor read-only research, code analysis, code modification, repo write, deployment en browser automation
Dag 61 tot 90: Zero Trust MCP fabric
- Introduceer signed tool manifests, immutable tool IDs, short-lived scoped credentials, OIDC/token exchange
- Outbound filtering en sandboxprofielen per tooltype
- Maak een testset met AgentDojo/AgentHarm-achtige scenario's: indirect prompt injection, tool poisoning, repo exfiltration, recursive task storms, capability drift
- Voeg MCP security gates toe aan CI/CD en golden paths
Strategische conclusie
De NSA-guidance legitimeert een belangrijk architectuurprincipe: MCP is geen "developer convenience layer", maar een nieuwe enterprise control plane voor AI-automatisering. Een MCP-server is functioneel vergelijkbaar met een combinatie van API gateway, plugin runtime, service account, workflow-engine en RPA-agent.
Wie MCP zonder governance inzet, herhaalt de fouten van vroege API's, browser plugins, CI/CD secrets en overprivileged service accounts — maar nu met probabilistische agents die context kunnen interpreteren, combineren en doorgeven.
De juiste richting is niet MCP vermijden. De juiste richting is MCP industrialiseren: interne registry, strict scoping, signed capabilities, sandboxed execution, policy gateway, SIEM-integratie, token lifecycle control en agentic red teaming. Daarmee wordt MCP een bruikbare bouwsteen voor agentic automation, zonder dat het verandert in een onzichtbare exfiltratie- en execution-laag.
Voor de Nederlandse overheid is dit geen theoretische exercitie. BIO2, NIS2, en de EU AI Act vragen om aantoonbare controle over AI-infrastructuren. Een MCP-deployment zonder de NSA-controls is niet alleen onveilig — het is niet compliant.
DjimIT ondersteunt organisaties bij het industrialiseren van MCP: van MCP Security Assessment en capability registry tot Zero Trust MCP fabric. De vraag is niet óf je MCP gebruikt — de vraag is of je weet welke tools je agents écht aanroepen.
AI & Security Intelligence
Wekelijkse nieuwsbrief met AI updates, security alerts en compliance inzichten — direct in uw inbox.
Doorlopend Advies
Wilt u structurele begeleiding op AI, security & compliance?
Met een Advisory Subscription heeft u een externe sparringpartner die meedenkt op strategisch en technisch niveau — zonder de overhead van een fulltime dienstverband. Vanaf €1.500 per maand, maandelijks opzegbaar.
Ontdek Advisory Subscription →