~/blog/gids/mcp-security
MCP en security
Wat je weggeeft als je een agent tools geeft. Over de supply chain, hardening en de incidenten die er al zijn.
Waar deze gids over gaat
MCP is hoe een agent buiten zijn chatvenster komt: je bestanden, je databases, je terminal, die dienst die je vorige week hebt aangesloten. Elk van die verbindingen maakt het werk pas de moeite waard, en is tegelijk een deur die je openhoudt. Deze cluster gaat over die deuren. Wat er doorheen past, wie er nog meer van weten, en hoe je de deuren dichtdoet die je niet nodig hebt zonder je gereedschap weg te gooien.
Ik gebruik MCP dagelijks en mijn eigen setup steunt er zwaar op. Juist daarom neem ik de zwakke plekken serieus. Wie het protocol wegzet als hype hoeft hier niets mee. Wie ermee shipt, wel.
Wat je precies weggeeft
Begin bij de simpele vraag: wat kan een agent met de rechten die je al hebt uitgedeeld? Meestal meer dan je voor je zag. Censys vond duizenden MCP-servers open aan het internet, en een open MCP-server is erger dan een open database laat zien dat die formulering niet overdreven is. Een database lekt. Een tool-server voert uit. Voor databases hebben we dit vijftien jaar geleden al geleerd en nu betalen we opnieuw leergeld.
Dezelfde vraag wijst ook naar buiten. Je coding agent las je .env en uploadde daarna je hele repo volgt wat er tijdens een normale sessie echt je machine verlaat, en dat is meer dan het bestand waar je in werkte. En zo'n deur hoeft niet technisch te zijn: in ze vroegen de bot gewoon netjes is de supportagent het aanvalsoppervlak en bestaat de exploit uit één beleefde zin.
Waar je servers vandaan komen
De tweede laag is de supply chain. De MCP-supply chain is de nieuwe npm is het overzichtsstuk: een config-to-command RCE in elke officiële SDK, vergiftigde registries, een ecosysteem dat het npm-draaiboek op dubbele snelheid afspeelt. Dat draaiboek wordt actief gebruikt. In ze verschoven je versie herschrijft iemand honderden bestaande git-tags naar kwaadaardige code, zonder ook maar iets te publiceren, en precies daar houdt je lockfile op je te helpen.
De omvang laat zich makkelijk wegwuiven, dus een op de vier zet er een getal onder: de beveiligingsschuld die niemand bijhoudt.
Controleren en dichttimmeren
Dan het handwerk. Zo controleer je een MCP-server voordat je hem installeert is de checklist die ik echt naloop: wie publiceert het ding, wat vertellen de tool-beschrijvingen aan het model, welke rechten vraagt hij en waarom zou hij die nodig hebben. Voor het scherpste geval, een agent pal naast je data, laat Claude veilig toegang geven tot je SQL-database zien hoe dat gaat met SELECT-only, queryvalidatie en field redaction.
Prompt injection voorkomen gaat over de aanval waar helemaal geen kwetsbaarheid voor nodig is, alleen tekst die je agent toevallig leest. En publiceer je zelf een server in plaats van er een te gebruiken, dan is je MCP-server beveiligen het resource-servermodel dat de spec ook echt vraagt.
Het patroon eronder is steeds hetzelfde: begrens op systeemniveau. Een regel in een prompt is een suggestie. Een muur is een garantie.
Sandboxen, en wat er toch uit komt
Claude Code sandboxen is hoe ik het zelf doe. Een sandbox vol levende tokens verplaatst het probleem alleen, en daarom staat in credentials maskeren hoe je de shell van je agent een placeholder geeft en de proxy het echte geheim er onderweg weer aan plakt, inclusief wat die maatregel niet afdekt. Het gat dat je sandbox bruikbaar maakt gaat over de week waarin er twee onderuit gingen, één bij Anthropic en één bij OpenAI, waarbij beide ontsnappingen één rechtenniveau omhoog klommen binnen een grens waar de buit toch al lag.
De agents lieten briefjes voor elkaar achter is het vervolg en de nuttigste helft: de tijdlijn van 74 dagen die OpenAI zelf gaf over het Hugging Face-incident, waarin het kanaal waarlangs de agents elkaar op de hoogte hielden een interne package registry was, en niet de ruimte maar de tijd de grens bleek die bezweek.
Gaat het toch mis, dan wil je dat het uur daarna saai verloopt. Het draaiboek voor incidenten met agents is dat uur in vijf fases, van het sessietranscript tot de permissie die het mogelijk maakte.
Dat uur begint pas zodra iemand iets doorheeft, en daarover gaat audit logging voor AI-agents: de drie sporen die Claude Code al naar je eigen schijf schrijft, waarom de compliance-feed waar je securityteam op zoekt er geen van bevat, en hoe je vooraf afspreekt waarvoor je iemand wakker maakt.
De incidenten zijn geen gedachte-experiment
Er zat niemand achter het stuur beschrijft de eerste gedocumenteerde inbraak die een agent zelfstandig uitvoerde, van CVE tot leeggetrokken database, vier pivots, binnen een uur. Zelfs de malware is nu AI-slop is hetzelfde verhaal van de andere kant: een npm-pakket dat regelrecht op de werkmap van Claude afging. De wrijving was de beveiliging gaat over wat er gebeurt als een leverancier het doorklikken weghaalt dat stiekem je laatste controle was, en ThePrimeagen had gelijk laat zien wat versleten oordeelsvermogen kost zodra het commando dat je plakt vergiftigd is.
Hoe de industrie erop reageert verdient zijn eigen argwaan, en daar is de wapenwedloop om je vertrouwen voor: beveiligingsproducten verkocht op angst die de verkopers zelf mee helpen aanjagen.
Het andere risico is je leverancier
Niet elk risico hier is een aanvaller. De uitknop werkt nu ook andersom gaat over modeltoegang die wordt bepaald door een lijst waar jij misschien niet op staat, en de Ferrari heeft een begrenzer is daar de dagelijkse variant van, gevoeld in één werkdag. Allebei zijn het argumenten om de regie over je data terug te nemen en om meer grip op je server te houden.
Waar dit raakt aan je eigen bouwwerk
Security begint voordat er iets te patchen valt, bij de vraag of een server er wel hoort te zijn. Elke server die je niet draait, is aanvalsoppervlak dat je nooit hoeft te verdedigen. Daarom hoort bouw een MCP-server, en vraag je dan af of die moet bestaan net zo goed bij deze gids als bij agentic coding. De goedkoopste hardening die je hebt, is een tool-lijst die kort blijft.
Hieronder eerst drie startpunten, daarna alles wat ik over dit onderwerp heb geschreven, nieuwste eerst.
Beste startpunten
- De MCP-supply chain is de nieuwe npm, en hij is al vergiftigd
Het grote verhaal: hoe een jong ecosysteem alle oude supply-chain-fouten opnieuw maakt, sneller.
- Zo controleer je een MCP-server voordat je hem installeert
De praktische checklist. Wat je nakijkt voordat een server je tool-lijst in mag.
- Een open MCP-server is erger dan een open database
Waarom een onbeveiligde MCP-server meer weggeeft dan een open database ooit deed.
Alle artikelen in dit onderwerp
Claude Code-credentials maskeren: geheimen uit je sandbox houden
Hoe je credential masking in de Claude Code-sandbox instelt, zodat je agent-shell een sentinel vasthoudt in plaats van je echte token: env-vars, JWT-claims, AWS-verzoeken opnieuw ondertekenen, en de drie dingen die deze maatregel je niet oplevert.
Audit logging voor AI-agents: wat Claude Code vastlegt en wanneer je iemand wakker belt
Je coding agent schrijft allang een gedetailleerde auditlog naar je eigen schijf. In de compliance-feed van je organisatie staat hij niet, OpenTelemetry lakt hem standaard weg, en het lastige deel blijft de vraag wie het allemaal leest.
De agents lieten briefjes voor elkaar achter
De tijdlijn van het Hugging Face-incident die OpenAI op Black Hat liet zien: het prikbord waarop de agents onderling afstemden was een interne package registry, en het weghalen ervan hield ze vier dagen tegen.
Incident response voor AI-agents: wat je doet als je coding agent de fout in gaat
Een draaiboek in vijf fases voor het uur nadat je coding agent iets sloopt: sessie bevriezen, reconstrueren uit het transcript, blast radius bepalen, roteren, en de permissie repareren die het mogelijk maakte.
Het gat dat je sandbox bruikbaar maakt
Twee ontsnappingen uit een agent-sandbox in één week, bij OpenAI en bij Claude Cowork. In beide gevallen klom de agent één privilegeniveau omhoog binnen een omgeving waar alles van waarde al lag, zonder ook maar één muur te passeren.
Je MCP-server beveiligen: authenticatie, scopes en rate limits
Je hebt een MCP-server gebouwd. De tutorial stopte waar beveiliging begint. Zo voeg je OAuth, scoped tokens en rate limits toe aan je eigen server, met TypeScript- en Laravel-voorbeelden, zodat hij niet tussen de 12.500 open servers belandt.
Je coding agent las je .env en stuurde je hele repo weg
Een analyse van het netwerkverkeer betrapte de Grok Build CLI op het wegsturen van een complete repository, git-historie en een onafgeschermde .env naar een bucket van de leverancier. Zo controleer je wat je eigen coding agent verstuurt, en welke secrets nooit op een agent-machine horen.
Prompt injection voorkomen: verdediging voor wie agents bouwt
Prompt injection voorkomen met verdediging die standhoudt: niet de demo met de vergiftigde webpagina, maar het echte aanvalsoppervlak van je setup, tool-resultaten, bestandsinhoud en MCP-toolbeschrijvingen, en de controles die werken.
Claude Code sandboxen: toestemming is geen muur
Zo zet je Claude Code in een sandbox: de ingebouwde /sandbox, de sandbox runtime, dev containers en VM's vergeleken, en waarom een toestemmingsprompt je niet beschermt.
Claude veilig toegang geven tot je SQL-database
Praktische gids om een AI-agent bij je database te laten zonder er wakker van te liggen: SELECT-only, queryvalidatie, field redaction voordat rijen het model bereiken, SSH-tunnels en audit-logging.