Contexte et portée de la vulnérabilité
Le SDK officiel MCP Python, utilisé pour interagir avec les services de gestion de comptes Microsoft Cloud Platform, présentait une faille de haute sévérité. Les versions 1.x (de 1.9.1 à 1.29.1) et 2.x (de 2.0.0 à 2.1.1) étaient concernées. La faille permettait à un serveur MCP malveillant de détourner les requêtes d’obtention de token OAuth et d’envoyer le client secret, le code d’autorisation ainsi que la clé de preuve PKCE vers un point de contrôle contrôlé par l’attaquant. Le résultat était la prise de contrôle totale du compte associé aux permissions accordées à l’application.
Mécanisme d’exploitation
Le SDK construit l’URL de redirection en se basant sur le champ redirect_uri fourni par le serveur MCP. Aucun mécanisme de validation de l’origine du serveur n’était appliqué, ce qui autorisait un serveur compromis à remplacer l’URL légitime par une adresse contrôlée. Lors de l’échange du code d’autorisation contre un token d’accès, le SDK transmettait automatiquement le client secret et la clé PKCE dans le corps de la requête HTTPS, sans vérifier que le domaine de destination correspondait à celui attendu. Un attaquant pouvait ainsi récupérer ces secrets et, grâce à la clé PKCE, finaliser l’échange et obtenir un token d’accès valide, ouvrant la porte à toutes les actions autorisées par le scope de l’application.
Correctifs et mesures d’atténuation
Les correctifs ont été publiés dans les versions 1.30.0 et 2.2.0. Ils introduisent deux changements majeurs : (1) la validation stricte du champ issuer dans les fournisseurs ClientCredentialsOAuthProvider et PrivateKeyJWTOAuthProvider, obligeant les développeurs à spécifier explicitement l’URL du service d’autorisation attendu ; (2) le renforcement du processus de construction de l’URL de redirection, qui refuse toute URL ne correspondant pas à la liste blanche configurée. Les développeurs doivent mettre à jour leurs dépendances et ajouter le paramètre issuer= lors de l’instanciation des fournisseurs OAuth afin de « pinner » le service d’authentification.
Implications pour les intégrateurs et bonnes pratiques
Les organisations qui intègrent le SDK MCP Python dans des pipelines d’automatisation ou des applications internes doivent impérativement vérifier la version utilisée. Le maintien d’une version antérieure expose les secrets d’identification à un vol complet, même si le trafic reste chiffré via TLS. En complément de la mise à jour, il est recommandé de restreindre les adresses IP autorisées à communiquer avec les serveurs MCP, d’activer la journalisation détaillée des échanges OAuth et de surveiller les tentatives de redirection vers des domaines non approuvés. Enfin, l’usage de la preuve PKCE doit être conservé, mais uniquement dans le cadre d’un flux d’autorisation où le client secret n’est jamais transmis en clair à un endpoint non vérifié.