Faille critique dans le SDK Python officiel MCP permet aux serveurs malveillants de dérober des jetons OAuth
30 septembre 2026 · 3 min de lecture
Également publié en Svenska
Une faille dans le SDK Python officiel MCP permet à un serveur malveillant de tromper une application utilisant le SDK en lui faisant remettre les informations d'authentification OAuth. L'avertissement a été publié par les mainteneurs du SDK.
Les versions affectées ont envoyé le secret client, le code d'autorisation et la preuve PKCE à un point d'extrémité contrôlé par l'attaquant. La correction est incluse dans les versions 1.30.0 et 2.2.0.
Le protocole de contexte modèle (MCP) est une norme ouverte permettant aux applications d'IA de se connecter à des outils et données externes. Le SDK concerné est le paquet Python officiel pour créer des serveurs et des clients MCP.
Avec les informations volées, l'attaquant peut demander un jeton d'accès valide au service d'authentification réel. Cycode, la société de sécurité qui a signalé la faille, a démontré cet échange dans un test et a indiqué que le jeton obtenu possède les mêmes autorisations que l'application.
Le secret client est durable, il continue de fonctionner jusqu'à ce qu'il soit modifié. La gravité est élevée (7.5) pour les fournisseurs fonctionnant sans intervention humaine, et de 6.5 pour les fournisseurs interactifs où un utilisateur doit approuver la connexion.
Le mécanisme de vol décrit par Cycode montre qu'un serveur malveillant peut rediriger le client vers un service d'autorisation contrôlé par l'attaquant. Le client envoie alors le secret, le code d'autorisation et la preuve PKCE à cet endpoint hostile.
La preuve PKCE, conçue pour empêcher la réutilisation d'un code d'autorisation volé, est ainsi remise à l'attaquant, ce qui contourne cette protection.
Dans le cas interactif, l'utilisateur voit toujours la page d'authentification légitime, ce qui rend l'attaque difficile à détecter.
Les applications concernées utilisent le SDK comme client MCP via HTTP avec l'un des fournisseurs OAuthClientProvider, ClientCredentialsOAuthProvider, PrivateKeyJWTOAuthProvider ou le fournisseur RFC7523OAuthClientProvider déprécié, et peuvent se connecter à un serveur non contrôlé tout en possédant des informations d'authentification.
Les correctifs concernent les versions 1.30.0 et 2.2.0. Dans ces versions, le client vérifie le service d'authentification attendu avant de récupérer des détails et rejette toute réponse différente.
Pour ClientCredentialsOAuthProvider et PrivateKeyJWTOAuthProvider, il faut également spécifier issuer=" afin de lier les informations d'authentification au service attendu. Sans cette option, le client continue de suivre le serveur indiqué par le serveur MCP.
Dans la version 1.30.0, l'avertissement apparaît sous forme de message de dépréciation standard, masqué par défaut en Python, ce qui peut le faire passer inaperçu.
Après la mise à jour, il faut réinitialiser les enregistrements OAuth stockés, car les anciens ne sont pas liés à un service d'authentification. Si une connexion à un serveur non fiable a eu lieu, il faut faire pivoter le secret client et révoquer les jetons.
Aucune attaque confirmée n'a été rapportée à ce jour, et aucune attribution CVE n'a été attribuée au moment de l'avertissement.
La mise à jour a été annoncée le 7 septembre dans les notes de version, puis l'avertissement officiel est paru le 28 septembre, le même jour où Cycode a publié son analyse.
Les parties concernées sont les fournisseurs OAuth sans intervention humaine et les clients MCP interagissant avec des serveurs non contrôlés.