Aller au contenu
Guide

Shadow MCP : le problème d’entreprise pour lequel personne n’a budgétisé

| 8 min read

Les employés connectent des serveurs MCP non autorisés à Claude et Cursor. Une règle de passerelle, une requête d'inventaire et un modèle de politique pour prendre de l'avance.

Dark network lines representing shadow traffic and MCP detection
Photo by Markus Spiske on Unsplash

Autrefois, le Shadow IT signifiait qu'un responsable marketing chargeait Dropbox. Shadow SaaS signifiait une équipe produit s'inscrire à Figma sur une carte de crédit personnelle. Les deux étaient contenus : les outils fonctionnaient dans un navigateur , touchait des données que l'utilisateur pouvait déjà voir et ne pouvait pas dépasser la limite de l'onglet. MCP fantôme brise ce confinement. Un employé bascule un serveur MCP communautaire vers Cursor ou Claude Desktop, et désormais un agent peut lire les clés SSH, exécuter des commandes shell et parler à la production bases de données via les informations d'identification ambiantes de l'utilisateur.

Cloudflare Gateway a livré des règles compatibles MCP en avril 2026. Zscaler et Netskope ont suivi dans un délai d'un mois. semaine. Les outils ont rattrapé leur retard parce que les équipes de sécurité de l'entreprise ont commencé à le demander. Cet article couvre les quatre choses à faire ce trimestre : comprendre le modèle de menace, développer la détection, expédier un script d'inventaire, obtenez une liste blanche et publiez une politique de trois pages.

Pourquoi Shadow MCP est pire que Shadow SaaS

Un onglet SaaS malveillant dans un navigateur s'exécute dans un bac à sable. Il ne peut pas lire la clé privée SSH de l'utilisateur. Il ne peut pas générer de shell. Il ne peut pas ouvrir une connexion TCP à votre Postgres de production. Celui du navigateur la politique de même origine et le bac à sable du système d'exploitation assurent le confinement.

Un serveur MCP s'exécute en dehors du navigateur. Claude Desktop et Cursor génèrent des serveurs stdio en tant qu'enfants processus sur la machine de l'utilisateur avec les autorisations de l'utilisateur. Un serveur HTTP MCP se connecte à quelles que soient les informations d'identification que l'utilisateur colle. L'agent appelle ensuite les outils de ce serveur dans le cadre de sa boucle normale. Du point de vue du système d'exploitation, l'appel à l'outil est l'ouverture par l'utilisateur d'un fichier ou exécuter une commande.

Différence concrète : un serveur communautaire GitHub MCP extrait d'un package npm aléatoire et ajouté à ~/.cursor/mcp.json peut exfiltrer n'importe quoi dans ~/.ssh/, chaque .env fichier sous votre répertoire personnel et tout le contenu de tout dépôt que l'utilisateur a vérifié. L'utilisateur l'a approuvé une fois. L'agent ne demande plus jamais. Un voleur basé sur un navigateur l'outil ne peut rien faire de tout cela.

Ajoutez une difficulté supplémentaire : le VPN de l'utilisateur. Si l'ordinateur portable est sur le VPN d'entreprise lorsque l'agent s'exécute, le serveur MCP hérite de cette position réseau. Services internes, bases de données intermédiaires et les points de terminaison des métadonnées deviennent tous accessibles. Le serveur n’avait besoin d’hameçonner personne. Il a juste attendu pour que le VPN se connecte.

Trouver Shadow MCP sur votre réseau

La détection fonctionne sur trois couches : le point de terminaison, la passerelle de sortie et le DNS. Tu veux un signal des trois car chacun détecte un mode de défaillance différent.

Sur le point final, surveillez les processus enfants générés par Claude Desktop ou Cursor. Les deux clients invoquez les serveurs stdio en tant que sous-processus avec des noms de processus parents connus. Votre EDR (CrowdStrike, SentinelOne, Defender for Endpoint) peut alerter sur n'importe quelle arborescence de processus enracinée à Claude.app, Cursor.app, ou claude-code. Filtrer vers le ceux que vous avez approuvés ; signaler tout le reste.

À la sortie, filtrez le trafic HTTP. MCP sur Streamable HTTP contient un en-tête distinctif (mcp-protocol-version) et un type de contenu distinctif (application/json-rpc-2). Cloudflare Gateway, Zscaler et Netskope correspondent tous les deux. Voici la règle Cloudflare Zero Trust pour bloquer les MCP non autorisés tout en autorisant votre hébergeurs agréés :

Sur DNS, votre résolveur voit les recherches d'hôtes de serveur MCP de communauté avant toute connexion HTTPS s'ouvre. Insérez la liste blanche approuvée dans votre filtre DNS (Cisco Umbrella, NextDNS, Cloudflare Gateway DNS) comme seules destinations MCP autorisées. Toutes les autres recherches correspondant à un nom connu Le flux de registre MCP reçoit un bloc et un ticket.

Pour les serveurs stdio installés par npm, votre agent DLP de point de terminaison peut surveiller les packages correspondant *-mcp-*, @modelcontextprotocol/*, ou tout paquet déclarant un mcp entrée dans son package.json bin champ. Cela attrape le installez l'événement avant que l'utilisateur connecte le serveur au curseur.

Créez un inventaire MCP en un après-midi

La détection vous indique lorsqu'un nouveau serveur apparaît. L'inventaire vous indique ce qui est déjà installé. Expédiez un script, exécutez-le via votre MDM (Jamf, Intune, Kandji) et publiez les résultats dans un rapport point final. Un après-midi de travail, vous savez alors quelles machines ont quels serveurs.

Le script lit les deux fichiers de configuration utilisés par chaque client majeur. Claude Desktop garde sa config à ~/Library/Application Support/Claude/claude_desktop_config.json sur macOS et %APPDATA%\Claude/claude_desktop_config.json sous Windows. Le curseur conserve sa configuration à ~/.cursor/mcp.json. Les deux fichiers sont du JSON simple avec un mcpServers les noms de serveur de mappage d'objets aux commandes, arguments, URL et variables d'environnement.

Le hachage compte. Les fichiers de configuration changent lorsqu'un utilisateur ajoute un serveur, fait pivoter une clé ou extrait un modèle d'équipe. Stockez le SHA-256 de l'ensemble du fichier et alertez sur toute modification que vous n'avez pas poussée. Le les noms de variables d'environnement (pas les valeurs) figurent également dans le rapport ; vision GITHUB_PERSONAL_ACCESS_TOKEN répertorié sous un serveur communautaire est son propre signal.

Exécutez le script quotidiennement. Introduisez la sortie dans votre inventaire d'actifs existant (Snipe-IT, ServiceNow, ou une table Postgres). Créez un tableau de bord qui affiche : les nouveaux serveurs cette semaine, les serveurs sur plus de N machines et serveurs dont le hachage de configuration a changé. Ces trois vues couvrent la plupart de ce que vous allez il faudra demander plus tard.

Ajoutez à la liste blanche les serveurs en qui vous avez confiance

L'inventaire vous montre ce qui est installé. Une liste verte indique ce qui est autorisé. Refus par défaut, tous les serveur examiné, chaque approbation expirant. Versionnez le fichier dans Git pour que l'historique des approbations soit vérifiable.

Trois choses rendent cette liste blanche utile. Premièrement, chaque entrée a un ticket de révision et une expiration ; les approbations ne durent pas éternellement. Deuxièmement, les serveurs stdio incluent les arguments autorisés, donc un postgres-mcp binaire approuvé avec --readonly ne peut pas être réexécuté avec accès en écriture sans nouvel avis. Troisièmement, les portées sont nommées et explicites ; une couche de contrôle ultérieure peut les faire respecter.

L'intégration d'un nouveau serveur à la liste blanche nécessite deux vérifications automatisées avant l'examen humain. Tout d’abord, vérifiez la posture TLS de l’hôte du serveur. Un serveur servant MCP sur HTTP en texte brut, ou avec un certificat expirant dans 10 jours, ou HSTS manquant, n'est-il pas candidat :

Deuxièmement, inspectez les en-têtes de réponse. Vous voulez un HSTS avec un âge maximum long, un raisonnable content-type, et un mcp-protocol-version en-tête qui correspond à ce que le le serveur dit qu'il prend en charge dans son manifeste. La dérive entre l’en-tête et le manifeste est un signal d’alarme :

Exécutez les deux contrôles dans le cadre du ticket d’admission. En cas d'échec, le ticket se ferme automatiquement avec le raison de l'échec. Le réviseur ne voit que les serveurs qui ont réussi les bases.

La politique MCP de trois pages dont chaque entreprise a besoin

La politique n'a pas besoin d'être longue. Il doit répondre à cinq questions : qu'est-ce qui est approuvé, qui approuve les nouveaux serveurs, que peut faire chaque rôle, comment le surveiller et que se passe-t-il quand quelque chose ne va pas. Un petit tableau fait plus de travail qu’un document de 30 pages que personne ne lit.

Zone Politique Contrôle
Serveurs approuvés Seuls les serveurs de la liste verte YAML peuvent s'exécuter sur des appareils d'entreprise ou toucher aux données d'entreprise. Blocage DNS + sortie, règle de processus EDR, fichier de liste d'autorisation poussé par MDM, expiration de l'approbation de six mois.
Processus de révision Security Platform examine toutes les nouvelles demandes de serveur. Data Platform cosigne tout serveur ayant accès à la base de données. Signatures légales sur les serveurs qui traitent des données réglementées. Examinez le modèle de ticket, les vérifications TLS et en-tête automatisées, le SLA publié de cinq jours ouvrables.
Limites de portée Les ingénieurs disposent par défaut de serveurs de données en lecture seule. L'accès en écriture nécessite un deuxième approbateur. Les références de production sont interdites ; utilisez la mise en scène ou un jeton étendu. Ensembles de listes d'autorisation par rôle poussés via MDM, clés API limitées avec durée de vie courte, étendues d'application de passerelle d'authentification.
Surveillance Chaque appel d'outil via un serveur approuvé atterrit dans le journal d'audit. Les tentatives de serveur non approuvées déclenchent une alerte dans les 15 minutes. Audit de passerelle vers Kafka et SIEM, différences d'inventaire quotidiennes, alertes de dérive de hachage du fichier de configuration.
Réponse aux incidents Un serveur MCP compromis est traité comme une intégration API compromise. Révoquez les clés du serveur, mettez en quarantaine les points de terminaison concernés, examinez les journaux d'audit pour la fenêtre d'exposition. Runbook documenté, rotation d'astreinte, table trimestrielle comprenant un scénario MCP.
Exceptions Les exceptions temporaires nécessitent l'approbation du RSSI, une expiration de 30 jours et un plan de suivi écrit. Modèle de ticket d'exception, entrées de liste blanche à expiration automatique, examen hebdomadaire des exceptions.
Débarquement Lorsqu'un employé quitte l'entreprise, ses configurations MCP sont effacées avec celles des autres états de l'entreprise. Toutes les clés qu’ils détenaient font l’objet d’une rotation dans les 24 heures. Action d’effacement MDM, runbook de rotation des clés, journal d’audit du dernier accès par clé.

Points clés à retenir

  • Les capacités MCP dépassent les capacités SaaS. Un serveur MCP communautaire lit SSH clés, exécute des commandes shell et hérite de votre position VPN. Traitez-le comme un privilégié intégration, pas comme un onglet de navigateur.
  • La détection nécessite trois couches. Règles de processus EDR, filtres HTTP de passerelle activés mcp-protocol-versionet la liste blanche DNS couvrent différents modes de défaillance.
  • Inventaire en une après-midi. Un script Python de 60 lignes lit les deux configurations fichiers que chaque client majeur utilise, les hache et les publie sur un point de terminaison de reporting. Exécutez-le quotidiennement via MDM.
  • Liste d'autorisation de refus par défaut, expirations courtes. Chaque serveur a un ticket de révision et une expiration de six mois. Utiliser /v1/ssl/check et /v1/headers/inspect comme portes d'admission automatiques.
  • Un tableau vaut mieux qu'une politique de 30 pages. Serveurs approuvés, processus d'examen, portée limites, surveillance, réponse aux incidents, exceptions, exclusion. Sept lignes, une page, publiées dans le wiki d'ingénierie.

Le propre serveur MCP de Botoi sur api.botoi.com/mcp est un exemple de l'apparence d'un serveur une fois qu'il est prêt pour votre liste verte : TLS 1.3, HSTS, clés API étendues, limites de débit par clé et 49 outils organisés avec annotations. Vous pouvez vérifier vous-même la posture avec les deux boucles ci-dessus avant de l'ajouter, ou vérifiez le Page de configuration MCP et le Documents sur l'API pour la liste complète des outils.

FAQ

Qu'est-ce qui compte comme serveur MCP à des fins d'inventaire ?
Les serveurs stdio et HTTP comptent. Un serveur stdio est un processus enfant que Claude Desktop ou Cursor génère à partir d'une entrée de fichier de configuration ; il n'y a aucune empreinte réseau jusqu'à ce que l'agent le démarre, mais il a la même surface de capacités. Un serveur HTTP réside sur une URL à laquelle le client se connecte via Streamable HTTP ou SSE. Votre inventaire doit couvrir les deux, ce qui signifie lire les fichiers de configuration sur le point de terminaison et surveiller la sortie des signatures de trafic MCP.
Puis-je bloquer entièrement MCP sur les réseaux d’entreprise sans faire appel aux agents agréés ?
Oui. Bloquez tout par défaut au niveau de la passerelle de sortie, puis ajoutez à la liste autorisée les noms d'hôtes spécifiques sur lesquels vivent vos serveurs MCP approuvés. Les serveurs stdio approuvés ne touchent pas du tout le réseau (ils communiquent avec leurs API de support via HTTPS normal, que vous contrôlez déjà). Vous perdez l’expérimentation MCP communautaire sur les appareils d’entreprise, ce qui est le problème. Les développeurs peuvent toujours utiliser des machines personnelles en dehors du VPN pour l'exploration.
En quoi Shadow MCP diffère-t-il du risque d’injection rapide ?
L'injection rapide est un attaquant qui incite un modèle à faire quelque chose que son opérateur ne voulait pas. Shadow MCP est l'opérateur lui-même qui effectue le câblage selon une capacité non révisée. Acteur de menace différent, contrôle différent. Les défenses contre l'injection rapide (confirmation de l'outil, sandboxing, filtrage de sortie) n'aident pas si l'outil n'a jamais été censé être là. Vous avez besoin d'un inventaire et d'une liste blanche en plus des défenses au niveau du modèle.
Le blocage nécessite-t-il une mise à niveau du pare-feu de nouvelle génération ?
Non. Le filtrage DNS et l’inspection de sortie de la couche HTTP en couvrent la majeure partie. Cloudflare Gateway, Zscaler et Netskope proposent tous des règles compatibles MCP à partir d'avril 2026. Pour les applications sur site, vous pouvez filtrer sur l'en-tête MCP-Protocol-Version ou sur le type de contenu application/json-rpc-2 avec n'importe quel proxy L7. Squid, Envoy et HAProxy gèrent tous cela. Le plus dur n’est pas le filtre ; il s'agit de maintenir la liste blanche.
Quelle piste d'audit MCP me fournit-elle dès le départ ?
Presque aucun. Le protocole définit les appels et les réponses des outils, mais n'exige pas que le serveur ou le client les enregistre. Claude Desktop conserve des journaux locaux ; Le curseur l’est moins. Les serveurs communautaires n’enregistrent souvent rien. Si vous avez besoin d'une piste d'audit qui survit à l'examen des incidents, vous l'instrumentez vous-même côté serveur ou placez une passerelle devant qui écrit des journaux structurés. Ne comptez pas sur le client pour détenir les preuves.

Commencez a construire avec botoi

150+ endpoints API pour la recherche, le traitement de texte, la generation d'images et les utilitaires pour developpeurs. Offre gratuite, sans carte bancaire.