Introduction

Récemment, nous avons scanné plus de 50 serveurs MCP open-source sur GitHub, et les résultats ont été plus alarmants que prévu. Nous avons constaté que 72% de ces serveurs présentaient au moins une vulnérabilité critique ou de haute gravité, et 38% contenaient des clés API ou des secrets codés en dur.

Contexte Technique

Les serveurs MCP (Model Context Protocol) sont de plus en plus utilisés comme moyen standard pour les assistants IA pour interagir avec des outils externes. Cependant, la plupart de ces serveurs sont écrits rapidement, avec un focus sur la fonctionnalité plutôt que la sécurité. Ils manquent souvent de couches de défense telles que les pare-feu, les limiteurs de taux, le middleware d'authentification et les systèmes de détection d'intrusion.

Les serveurs MCP ont souvent accès à des ressources sensibles comme le système de fichiers local, l'exécution de commandes shell, les requêtes réseau et les connexions de base de données. Lorsqu'un modèle IA appelle un outil MCP, les paramètres proviennent de l'interprétation du modèle de la requête de l'utilisateur, ce qui signifie que les entrées sont imprévisibles par conception.

Analyse et Implications

Nous avons développé un outil de scan de sécurité pour les serveurs MCP pour détecter ces vulnérabilités. Notre analyse a révélé que plus de 60% des fonctions d'outils n'avaient aucune validation d'entrée, et que de nombreux serveurs utilisaient des méthodes dangereuses comme os.system avec shell=True ou des appels directs à os.popen sans validation.

Les attaques de type injection de commandes shell sont particulièrement critiques, car elles permettent à un attaquant d'exécuter des commandes arbitraires sur le serveur. De même, l'utilisation de subprocess avec shell=True ou l'appel direct à os.system avec des entrées utilisateur non validées peut conduire à des vulnérabilités graves.

Perspective

Pour remédier à ces problèmes, il est essentiel de mettre en œuvre des mesures de sécurité robustes pour les serveurs MCP. Cela inclut l'utilisation de listes de commandes autorisées, la validation des entrées utilisateur, et l'évitement de l'utilisation de méthodes dangereuses comme os.system ou subprocess avec shell=True. De plus, il est crucial de stocker les clés API et les secrets de manière sécurisée, en utilisant des variables d'environnement ou des gestionnaires de secrets.

Enfin, il est important de réaliser que la sécurité des serveurs MCP est une question qui concerne tout le monde, et que les développeurs doivent prendre des mesures proactives pour protéger leurs applications et leurs utilisateurs contre les menaces potentielles.