~/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 weet, 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 die open aan het internet hingen, 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 werkt ook de andere kant op. 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 laat iemand honderden bestaande git-tags naar kwaadaardige code wijzen, 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 onderweg alsnog invult, inclusief wat die maatregel niet afdekt. Het gat dat je sandbox bruikbaar maakt gaat over de week waarin er twee sandboxes 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 van 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 in zoekt er geen van bevat, en hoe je vooraf afspreekt waarvoor je iemand wakker maakt.
De tweede machine die je code draait
Je laptop is niet de enige plek waar je code wordt uitgevoerd, en bij die andere plek zit niemand. Je CI-runner beveiligen als een agent je workflow schrijft is deze gids toegepast op de pipeline: waarom de hardening-adviezen die iedereen herhaalt, stilzwijgend van één platform uitgaan, wat een runner zonder ook maar één credential nog steeds waard is voor een aanvaller, en de tabel in Anthropics eigen documentatie waaruit blijkt dat de beperkingen van een repository in een headless run wegvallen, terwijl de code die diezelfde repository aanlevert gewoon draait.
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 afgestompt oordeelsvermogen kost zodra het commando dat je plakt vergiftigd is.
De reactie van de industrie verdient een eigen dosis argwaan, en daar is de wapenwedloop om je vertrouwen voor: beveiligingsproducten die worden verkocht met een 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, voelbaar binnen één werkdag. Allebei zijn het argumenten om de regie over je data terug te nemen en om meer grip op je server te krijgen.
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
Je CI-runner beveiligen als een agent je workflow schrijft
Je eigen forge en runner draaien is in 2026 een verdedigbare keuze. Alleen schrijft niemand op hoe je je CI-runner beveiligt op het platform waar je naartoe verhuisde, en een permissiemodel dat om een dialoog heen is gebouwd, overleeft de stap naar een pipeline niet.
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.