MoyenneCVE-2026-116686
SDK Python Model Context Protocol : Le client a extrait des URLs $ref choisies par le serveur lors de la validation des résultats d'outils par rapport aux schémas de sortie
Exploitable dans des cas précis ou avec un impact limité : à corriger à la prochaine mise à jour.
- Sévérité
- Moyenne6.5 / 10
- Publiée le
- 2026 d’octòbre 27
- Mise à jour
- 2026 d’octòbre 27
L'avis
Traduction automatique de l'avis officiel. En cas de doute, l'avis d'origine, plus bas, fait foi.
Résumé
Dans les versions affectées, lorsqu'un serveur MCP connecté déclarait un outputSchema pour un outil, le client du SDK validait chaque résultat de call_tool avec le solveur par défaut de jsonschema, qui extrait tout $ref qu'il ne peut pas résoudre localement en ouvrant l'URL. Un serveur pouvait donc placer une référence http://, https:// ou file:// dans le schéma de sortie d'un outil et faire en sorte que le client :
- demande cette URL, ou lire ce fichier local, depuis la propre position réseau du client à chaque appel de l'outil (le contenu n'était utilisé que comme schéma et n'était jamais renvoyé au serveur), et
- blocage : l'extraction s'exécutait de manière synchrone sur la boucle d'événements sans timeout, de sorte qu'une cible qui acceptait la connexion puis se taisait gelait chaque session dans le processus aussi longtemps qu'elle maintenait la connexion.
Suis-je affecté ?
Oui, si votre application utilise le SDK en tant que client MCP (ClientSession sur n'importe quel transport, ClientSessionGroup, ou le Client 2.x) et appelle des outils sur des serveurs que vous ne contrôlez pas entièrement. Il n'y avait aucun paramètre pour désactiver la validation.
Versions affectées : 1.10.0 à 1.29.1, et 2.0.0 à 2.1.1.
Non affecté : les applications qui ne construisent que des serveurs. Si rien dans votre code n'utilise ClientSession, ClientSessionGroup ou la classe Client 2.x, vous n'êtes pas affecté.
Correction
Mettez à jour vers mcp 1.30.0 (1.x) ou 2.2.0 (2.x) ou une version ultérieure. Le client résoud désormais les références uniquement dans le document de schéma envoyé par le serveur (plus les métaschémas JSON Schema standard), de sorte que la validation des résultats n'effectue aucun accès réseau ou fichier. Un outil dont le schéma de sortie pointe en dehors de son propre document échoue au moment de l'appel avec RuntimeError (Invalid schema for tool ...); les références intra-document telles que #/$defs/... fonctionnent comme avant.
Jusqu'à ce que vous puissiez mettre à jour, n'appellez des outils que sur des serveurs de confiance. Comme solution partielle de secours, sautez les outils dont le outputSchema contient un $id, ou un $ref / $dynamicRef qui ne commence pas par #.
Composants touchés
| Composant | Versions touchées | Corrigé en |
|---|---|---|
| mcpPython (pip) | >= 2.0.0, < 2.2.0 | 2.2.0 |
| mcpPython (pip) | >= 1.10.0, < 1.30.0 | 1.30.0 |
Vous utilisez une version touchée ? Passez à la version corrigée, puis redéployez.