In this article
Prévenir les vulnérabilités de traversée de répertoires dans les gestionnaires de fonctions des serveurs MCP
Le Model Context Protocol (MCP) gagne en popularité en tant que méthode normalisée permettant aux assistants IA d’interagir avec des outils externes et des sources de données. À mesure que l’adoption du MCP progresse, il devient de plus en plus important de protéger les serveurs MCP contre les vulnérabilités potentielles. Des recherches récentes sur la sécurité du MCP menées par Raul Onitza-Klugman, de l’équipe de recherche en sécurité de Snyk, ont mis en évidence les risques liés aux serveurs MCP vulnérables et souligné la nécessité de mettre en place des mesures de sécurité robustes.
Comprendre le MCP et ses implications en matière de sécurité
Le MCP est avant tout un protocole ouvert conçu pour connecter des outils, des services ou des sources de données externes aux grands modèles de langage (LLM). Il sert de passerelle entre les applications d’IA et les ressources auxquelles elles doivent accéder, comme des bases de données locales, des API ou des outils en ligne de commande.
Les serveurs MCP exposent trois principales fonctionnalités : les ressources, les outils et les prompts. Les ressources sont des blocs de données ou des fichiers consultables par les LLM, tandis que les outils sont des fonctions ou des commandes que les LLM peuvent exécuter.
La sécurité des serveurs MCP est essentielle, car ils s’exécutent souvent localement sur l’ordinateur d’un développeur, qui peut contenir des informations sensibles comme des clés d’API, des identifiants et de la propriété intellectuelle. Un serveur MCP vulnérable peut devenir un vecteur d’attaque, entraînant potentiellement des fuites de données, l’exécution de code ou d’autres activités malveillantes.
Comme nous l’avons vu, le sujet de recherche de Raul décrit comment des attaquants ont exploité un serveur MCP AWS et un serveur MCP Markdown pour exfiltrer des données et exécuter des commandes arbitraires au moyen de techniques d’injection indirecte de prompt. Cela montre comment un maillon faible de la chaîne — le code du serveur MCP — peut ouvrir la voie à d’importantes violations de données et à des risques de sécurité.
Partage non sécurisé des ressources dans les serveurs MCP
Les ressources des serveurs MCP permettent d’exposer des données en lecture seule que les LLM peuvent utiliser comme contexte. Par exemple, un serveur MCP peut définir des enregistrements de base de données, l’état d’une application ou d’autres contenus textuels ou binaires en tant que ressources. Ces ressources sont identifiées par des URI uniques et utilisent souvent des schémas personnalisés. Un article précédent sur la création de serveurs MCP Node.js partageant des ressources propose un guide complet sur la mise en œuvre des ressources dans les serveurs MCP.
Code non sécurisé dans la définition des ressources d’un serveur MCP
Des pratiques de programmation non sécurisées dans la définition des ressources d’un serveur MCP peuvent entraîner des vulnérabilités de traversée de chemin. Une vulnérabilité de traversée de chemin survient lorsqu’un attaquant peut modifier un chemin de fichier pour accéder à des fichiers ou à des données sensibles situés hors du répertoire prévu.
Cela peut se produire lorsque les entrées fournies par l’utilisateur ne sont pas correctement nettoyées ou validées. Le problème peut facilement apparaître dans les ressources d’un serveur MCP qui accèdent à des fichiers sur disque pour renvoyer leur contenu depuis le gestionnaire de fonction d’une ressource donnée.
Examinons l’exemple de code Node.js vulnérable suivant :
server.resource(
"pipeline-workflows",
new ResourceTemplate("pipeline-workflows://{name}", { list: undefined }),
async (uri, { name }) => {
const decodedName = decodeURIComponent(name);
let filePath = path.resolve(process.cwd(), '.github/workflows/', `${decodedName}.yaml`);
// check if filepath exists
if (!accessSync(filePath)) {
// then try without the .yaml suffix incase the user provided the full filename
filePath = path.resolve(process.cwd(), '.github/workflows/', decodedName);
}
if (accessSync(filePath)) {
let fileContents = '';
try {
fileContents = readFileSync(filePath, 'utf-8');
} catch (e) {
writeFileSync('/tmp/mcp_log.log', `ERROR READING FILE: ${e}\n`, { flag: 'a' });
}
return {
contents: [{
uri: uri.href,
text: fileContents
}]
};
}
}
);
const transport = new StdioServerTransport();
await server.connect(transport);Dans cet exemple, le filePath est construit à partir d’une entrée fournie par l’utilisateur (decodedName). Si un attaquant peut modifier le paramètre name, il pourrait accéder à des fichiers hors du répertoire prévu et exposer ainsi des données sensibles.
Risques de sécurité liés aux vulnérabilités de traversée de chemin dans les serveurs MCP
Les conséquences d’une vulnérabilité de traversée de chemin dans un serveur MCP peuvent être importantes. Un attaquant pourrait accéder à des fichiers sensibles, comme des fichiers de configuration, des clés SSH ou d’autres données confidentielles. Cela pourrait entraîner d’autres attaques, telles que l’exécution de code ou l’exfiltration de données.
Détecter et corriger les vulnérabilités de traversée de chemin
Snyk Code est un outil de test statique de la sécurité des applications (SAST) qui peut vous aider à détecter et à corriger les vulnérabilités de traversée de chemin dans le code des serveurs MCP.
Une fois que vous avez installé l’extension Snyk pour VS Code, elle fonctionne comme un plug-in d’analyse statique du code, à l’instar d’ESLint. Les analyses sont extrêmement rapides : chaque fois que vous enregistrez un fichier, Snyk recherche les vulnérabilités de sécurité potentielles dans le code.
La capture d’écran ci-dessous montre que Snyk signale désormais, à la ligne 140, le code du serveur MCP qui implémente la fonction server.resource() (issue du SDK TypeScript Model Context Protocol). Elle met clairement en évidence un chemin de code qui serait vulnérable à une attaque par traversée de chemin si une entrée dangereuse était transmise à cette fonction.

Snyk accélère la correction des problèmes de sécurité en offrant ce type de gain de productivité aux développeurs directement dans leur environnement de développement intégré.
Mieux encore, Snyk peut également corriger ce problème de sécurité ! Vous avez peut-être remarqué l’annotation de ligne « Corriger ce problème : traversée de chemin » ; voici à quoi ressemble la correction automatique de Snyk en pratique :

Comment commencer à utiliser Snyk Code
Téléchargez votre plug-in Snyk pour IDE, c’est gratuit !
Snyk Code utilise une analyse avancée propulsée par l’IA (appelée IA symbolique) pour détecter les problèmes de sécurité potentiels dans le code, notamment les vulnérabilités de traversée de chemin. En intégrant Snyk Code à votre workflow de développement, vous pouvez détecter et corriger de manière proactive les vulnérabilités de sécurité avant qu’elles ne deviennent une menace.
Cet outil analyse le code de votre serveur MCP (ou tout autre code que vous ou le LLM générez) afin de détecter les problèmes de sécurité potentiels. Il fournit des rapports détaillés et des recommandations de correction. Vous pouvez l’intégrer à votre IDE ou à votre pipeline CI/CD pour repérer les problèmes de sécurité dès les premières étapes du développement.
Bonnes pratiques pour sécuriser les serveurs MCP
Pour prévenir les vulnérabilités de traversée de chemin dans les serveurs MCP, suivez ces bonnes pratiques de programmation sécurisée :
Validez et nettoyez les entrées fournies par l’utilisateur afin d’éviter que des données malveillantes servent à construire des chemins de fichiers.
Générez correctement les chemins en utilisant des conventions sûres et sécurisées afin d’éviter les attaques par traversée de chemin (vous pouvez vous inspirer de CVE antérieures, comme files-bucket-server et static-dev-server).
Appliquez des pratiques de programmation sécurisée lors de la définition des ressources d’un serveur MCP, notamment en utilisant des listes d’autorisation et une gestion adéquate des erreurs.
Intégrez un outil SAST comme Snyk Code à votre workflow de développement pour détecter et corriger les vulnérabilités de sécurité potentielles.
Quelles sont les prochaines étapes pour la sécurité du MCP ?
À mesure que le MCP évolue, il est essentiel de rester informé des risques de sécurité potentiels et des bonnes pratiques pour protéger les serveurs MCP. Pour approfondir le sujet, consultez les ressources suivantes :
Exploiter les serveurs MCP vulnérables à l’injection de commandes
Snyk Learn : cours sur la traversée de chemin
Ne sous-estimez pas les attaques par injection de prompt. Je vous recommande vivement de lire comment l’injection de prompt peut exploiter le texte d’un PDF et contourner la technique du LLM utilisé comme juge.
En donnant la priorité à la sécurité et en suivant les bonnes pratiques, vous pouvez préserver l’intégrité de vos serveurs MCP et les protéger contre d’éventuelles vulnérabilités.
Vous souhaitez en savoir plus sur l’analyse MCP ? Découvrez Snyk Labs dès aujourd’hui ou accédez à l’incubation MCP Scan de Snyk et Invariant Labs.
Découvrez Snyk Labs
Votre espace dédié aux dernières recherches et expérimentations en sécurité de l’IA.