- Empoisonnement — le serveur était malveillant dès le premier jour. Son manifeste semblait bénin ; le comportement dangereux était dans l’implémentation de l’outil, pas dans les portées déclarées.
- Rug-pull — vous lui faisiez confiance, puis il a changé. Un nouvel outil est apparu que l’opérateur du serveur a ajouté discrètement, ou une entrée de registre communautaire a été piratée et mise à jour pour appeler à la maison.
1. Comment l’empoisonnement d’outils MCP atteint vos agents
Chaquetools/call que votre agent émet voyage à travers l’ensemble d’outils
déclaré du serveur MCP. Un serveur empoisonné ou rug-pullé exploite cette
confiance de quelques manières :
| Vecteur | Ce qui se passe |
|---|---|
| Outil non déclaré | Un nouvel outil apparaît dans tools/list que le manifeste du serveur n’avait jamais déclaré. Votre agent le trouve et l’appelle. |
| Entrée de registre piratée | Un listing de registre communautaire est pris en charge ; l’endpoint pointe maintenant vers un serveur contrôlé par un attaquant. |
| Collecte d’identifiants | L’implémentation de l’outil du serveur envoie les entrées collectées vers un hôte externe. |
| Injection de prompt via résultat d’outil | Un outil retourne du texte contrôlé par l’attaquant qui redirige la prochaine action de l’agent. |
2. Les défenses d’OrcaRouter
2.1 Chaque tools/call est évalué par le firewall avant de s’exécuter
Les serveurs MCP se connectent à vos agents via la passerelle MCP du Firewall
à /api/v1/firewall/mcp. La passerelle ne transfère pas un appel d’outil tant
que le moteur firewall ne l’a pas évalué contre votre
politique.
Cela signifie que votre liste blanche est la source de vérité — pas le manifeste
d’outils du serveur. Si un rug-pull ajoute shell.exec et que votre politique
n’a pas de règle le permettant, le verdict est deny et l’appel ne quitte
jamais la passerelle. Le modèle reçoit une erreur d’outil (firewall deny: …)
et peut réagir ; l’outil ajouté par l’attaquant est mort à l’arrivée.
Verdicts que le moteur peut retourner :
| Verdict | Effet |
|---|---|
allow / audit | Appel transféré ; audit journalise également les arguments. |
sanitize | Arguments réécrits avant le transfert. |
deny | Appel bloqué ; le modèle reçoit une erreur d’outil. |
pending_approval | Appel mis en attente ; un humain doit approuver avant qu’il ne continue. |
cap_cost | Plafond de coût appliqué ; appel bloqué s’il le dépasserait. |
2.2 Les capacités auto-détectées sont mises en quarantaine jusqu’à revue
Quand un agent auto-installe une capacité — ou qu’un rug-pull ajoute de nouveaux outils qui n’étaient pas présents quand vous avez enregistré le serveur — le Firewall auto-détecte la nouvelle capacité hors du chemin à chaud, synthétise un manifeste, le scanne et attribue une bande de risque et un mode d’application. Crucialement, les capacités auto-détectées sont toujours mises en quarantaine peu importe le résultat du scan : elles sont maintenues enpending_approval jusqu’à ce qu’un
humain les révise.
C’est ainsi que les rug-pulls sont contenus. Un opérateur ne peut pas ajouter
discrètement un nouvel outil et avoir vos agents qui commencent à l’utiliser —
ces appels sont mis en attente jusqu’à ce que vous inspectiez et approuviez la
nouvelle capacité.
2.3 Le scanning de skills attribue une bande de risque et un mode d’application
Chaque capacité installable — que vous l’ayez enregistrée ou que le Firewall l’ait auto-détectée — est passée dans le scanner de skills. Le scanner exécute des passes déterministes sur le manifeste et les portées déclarées :- prompt_injection — texte de manifeste qui tente de détourner les instructions.
- tool_creep — outils que le manifeste utilise mais ne déclare jamais.
- network_egress — hôtes HTTP(S) en dehors des portées réseau approuvées.
- fs_write_unsafe — accès au système de fichiers en mode écriture en dehors
de
/tmp.
low / medium / high
/ critical) et un mode d’application :
| Mode | Ce qui se passe à l’exécution |
|---|---|
allow | Le skill n’impose rien de son propre chef ; vos règles de politique décident. |
quarantine | Tout verdict non-deny escalade en pending_approval. Un humain doit approuver chaque appel d’outil. |
block | Force deny sur tous les outils de ce skill, peu importe les règles de politique. |
high est automatiquement mis en quarantaine ; critical
est bloqué. Un seul résultat error (ex. tool_creep pour un shell.exec
non déclaré) est suffisant pour bloquer un skill même quand son score numérique
semble bas. Le mode ne s’allège jamais — approuver un skill ne détend jamais
un block établi par un scan récent.
2.4 Les identifiants sont stockés chiffrés
Les secrets d’authentification du serveur sont chiffrés au repos avec une clé de secrets d’espace de travail et injectés par la passerelle au moment du dispatch. Ils n’atteignent jamais le modèle, l’agent ou les arguments de l’appel. Un serveur compromis ne peut pas exfiltrer vos clés API en lisant son propreauth_json.
Liste de vérification pour l’examen d’un serveur MCP tiersAvant d’enregistrer un serveur MCP externe :
- Vérifiez l’identité de l’éditeur — qui contrôle l’URL de l’endpoint ?
- Lisez la source ou le changelog ; recherchez les nouveaux outils ajoutés après la version initiale.
- Vérifiez si le scan de skill retourne des résultats
tool_creepouprompt_injectionà l’enregistrement. - Scopez une règle firewall avec
tool_name_glob: <server>.*surauditoupending_approvaljusqu’à ce que vous ayez un historique d’appels. - Examinez les résultats
network_egress: le manifeste prétend n’avoir besoin que d’un domaine mais les descriptions d’outils en mentionnent d’autres ? - Re-sondez le serveur après toute mise à jour de version en amont (
POST /api/workspace/firewall/mcp_servers/:id/probe) pour faire apparaître les nouveaux outils.
3. Que faire après un rug-pull suspecté
- Désactivez le serveur immédiatement — un serveur désactivé est supprimé
du registre d’exécution et ses identifiants ne sont jamais déchiffrés.
Utilisez
PUT /api/workspace/firewall/mcp_serversavec"enabled": false. - Re-sondez pour faire apparaître les changements —
POST /api/workspace/firewall/mcp_servers/:id/probeexécutetools/listet retourne tous les nouveaux outils apparus depuis votre dernier sondage. - Rescannez l’enregistrement du skill —
POST /api/workspace/firewall/skills/:id/rescanré-exécute le scanner contre le manifeste mis à jour. Si le verdict se dégrade enflaggedoublocked, le Firewall émet un événement dans votre flux. - Examinez la file d’attente
pending_approval— tous les appels mis en attente depuis le rug-pull sont dans la file. Inspectez-les et refusez-les plutôt que d’approuver en masse. - Auditez le journal d’appels — vérifiez la piste d’événements du Firewall pour les appels qui sont passés avant que vous ne détectiez le changement.
4. Associer le scanning de skills avec les règles firewall
Le scanning de skills et les règles firewall sont complémentaires et se composent :- Une règle avec
tool_name_glob: community.*définie surpending_approvalgarantit que vous examinez chaque appel d’un serveur source communautaire, peu importe la bande de risque. - Un skill mis en quarantaine remplace une règle
allow— même si votre politique permethttp.fetchlargement, un skill en quarantaine qui le possède met quand même l’appel en attente. - Utilisez
skill_name_globdans une règle pour scoper des politiques plus strictes aux serveurs non fiables sans affecter vos intégrations de première partie.
5. Menaces associées
- Appels d’outils dangereux — règles pour bloquer les actions d’outils destructrices ou irréversibles peu importe la source.
- Exfiltration de données — règles d’egress qui restreignent où les appels d’outils peuvent envoyer des données.
- Modèle de menace — la surface d’attaque complète qu’OrcaRouter est conçu à défendre.
Firewall : Serveurs MCP
Enregistrez des serveurs MCP derrière la passerelle, sondez leurs outils
et appliquez des verdicts par appel avant qu’un appel n’atteigne le vrai
serveur.
Firewall : Skills
Scannez et évaluez le risque de chaque capacité installable. Mettez en
quarantaine ou bloquez les skills risqués avant que leurs outils ne puissent
s’exécuter.
