MCP en security | Blog

~/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.