Grave fallo en el SDK de Python para MCP expone credenciales OAuth a servidores maliciosos
Una vulnerabilidad en el SDK oficial de Python para MCP permite que servidores maliciosos roben credenciales OAuth, incluidos secretos de cliente y claves PKCE, de los clientes afectados.
Traducido automáticamente del original en inglés.
Una grave vulnerabilidad de seguridad en el SDK oficial de Python para Model Context Protocol (MCP) permite que servidores MCP maliciosos roben credenciales OAuth de los clientes conectados. El fallo, revelado el 28 de septiembre de 2026, afecta a las versiones 1.9.1 a 1.29.1 y 2.0.0 a 2.1.1, lo que habilita a los atacantes a interceptar secretos de cliente, códigos de autorización y claves de prueba PKCE.
Qué ocurrió
Los mantenedores del SDK de Python para MCP emitieron una advertencia de seguridad después de que investigadores de Cycode demostraran cómo un servidor malicioso podría engañar a una aplicación para que entregue datos sensibles de autenticación. Cuando un cliente MCP intenta iniciar sesión, solicita al servidor conectado la ubicación de su servidor de autorización. En las versiones afectadas, el SDK no validaba estrictamente esta respuesta.
Un servidor malicioso podría dirigir al cliente a un endpoint controlado por el atacante o proporcionar detalles de inicio de sesión que parecieran legítimos pero que redirigieran las credenciales a otro lugar. Como consecuencia, el cliente enviaría su secreto de cliente de larga duración, su código de autorización de un solo uso y su clave de prueba PKCE al atacante. Con estas credenciales, el atacante podría solicitar un token de acceso válido al servicio de inicio de sesión real, obteniendo los permisos que tenía la aplicación original.
La gravedad del fallo depende del proveedor de OAuth utilizado. Para proveedores máquina a máquina que operan sin intervención humana, el riesgo se califica como alto con una puntuación de 7.5. Para proveedores interactivos que requieren el inicio de sesión del usuario, la puntuación es de 6.5, aunque el usuario aún aprueba el inicio de sesión en una página que parece genuina. No se había asignado ningún CVE hasta el 29 de septiembre de 2026, y no se han reportado exploits activos en entornos reales.
Cómo funciona
El problema central radica en cómo el SDK maneja el descubrimiento del servidor de autorización. Durante el flujo de OAuth, el cliente confía en el servidor MCP para especificar dónde enviar las solicitudes de autenticación. Las versiones vulnerables del SDK no verificaban si el servidor de autorización especificado coincidía con el emisor esperado antes de enviar las credenciales.
Esta falta de validación permitía que un servidor malicioso redirigiera el intercambio de credenciales. Incluso con PKCE (Proof Key for Code Exchange), diseñado para evitar la reutilización del código de autorización, la protección quedaba anulada porque el cliente entregaba voluntariamente la clave de prueba al atacante. Esto permitía al atacante completar el proceso de intercambio de tokens como si fuera el cliente legítimo.
Detalles clave
- Versiones afectadas: SDK de Python para MCP 1.9.1–1.29.1 y 2.0.0–2.1.1.
- Versiones corregidas: Actualice a la versión 1.30.0 para la línea 1.x o a la 2.2.0 para la línea 2.x.
- Proveedores vulnerables: OAuthClientProvider, ClientCredentialsOAuthProvider, PrivateKeyJWTOAuthProvider y el obsoleto RFC7523OAuthClientProvider.
- Configuraciones no afectadas: Los servidores MCP construidos con el SDK, los clientes stdio locales y los clientes que adjuntan sus propios tokens no son vulnerables.
- Requisito de configuración: Para ClientCredentialsOAuthProvider y PrivateKeyJWTOAuthProvider, actualizar únicamente no es suficiente; los desarrolladores también deben pasar el parámetro
issuer=para vincular el cliente a un servicio de inicio de sesión específico. - Acción post-actualización: Limpie los registros de clientes OAuth almacenados tras la actualización, ya que los registros antiguos no están vinculados a un servicio de inicio de sesión específico.
Por qué importa
Para los ingenieros que construyen agentes de IA o integran herramientas externas mediante MCP, esta vulnerabilidad representa una falla significativa en el límite de confianza. El estándar MCP está diseñado para conectar aplicaciones de IA con diversas fuentes de datos y herramientas, involucrando a menudo servidores de terceros. Si su aplicación actúa como cliente MCP conectándose a servidores no confiables o semi-confiables, corre el riesgo de exponer credenciales de larga duración que pueden otorgar acceso persistente a sus servicios.
La sutileza de la solución añade complejidad operativa. Simplemente actualizar el SDK no protege completamente las aplicaciones que usan ciertos proveedores de OAuth a menos que el parámetro issuer esté configurado explícitamente. Dado que Python oculta las advertencias de obsolescencia por defecto, muchos desarrolladores podrían pasar por alto la instrucción crítica de añadir este parámetro, dejando sus aplicaciones vulnerables incluso después de actualizar. Esto destaca la necesidad de revisar cuidadosamente las configuraciones de autenticación al adoptar nuevos estándares como MCP.
Qué puede hacer
- Actualice inmediatamente a la versión 1.30.0 o 2.2.0 del SDK de Python para MCP.
- Si utiliza ClientCredentialsOAuthProvider o PrivateKeyJWTOAuthProvider, asegúrese de que el parámetro
issuer=esté establecido en su servicio de inicio de sesión esperado. - Migre desde el obsoleto RFC7523OAuthClientProvider, ya que carece por completo de la opción
issuer=. - Limpie todos los registros de clientes OAuth almacenados una vez tras la actualización para eliminar entradas no vinculadas.
- Rote los secretos de cliente y revogue los tokens existentes en su servicio de inicio de sesión si existe cualquier posibilidad de que su cliente se haya conectado a un servidor no confiable.
- Active las advertencias de obsolescencia de Python en sus entornos de desarrollo y preproducción para detectar problemas de configuración tempranamente.



