Una falla en el SDK de SAP Cloud para Python puede enviar las credenciales de cliente OAuth2 de una aplicación a un servidor controlado por un atacante, según informó SAP en un aviso de seguridad el 13 de octubre. La vulnerabilidad afecta a aplicaciones multiinquilino en SAP Business Technology Platform (BTP) que utilizan el SDK, el cliente oficial de Python de SAP para los servicios de BTP. Para explotarla, un atacante debe poder controlar el subdominio del inquilino, el nombre que la aplicación pasa al SDK para indicar a qué inquilino corresponde una solicitud.
La falla está registrada como CVE-2026-89111 y tiene una puntuación CVSS de SAP de 10.0 sobre 10. El aviso señala la versión 0.45.2, publicada el 21 de agosto, como la corrección.
El SDK gestiona la autenticación de esos servicios con las credenciales de cliente de la aplicación, un ID de cliente y un secreto de cliente. La versión 0.45.2 añadió una comprobación que rechaza cualquier subdominio de inquilino que no sea un nombre simple.
The Hacker News descubrió que seis versiones posteriores no aplican esa comprobación en todos los casos. Las versiones 0.53.0 a 0.55.0, publicadas entre el 10 y el 18 de septiembre, la omiten cuando una aplicación llama al módulo del servicio Destination del SDK. La versión 0.53.0 trasladó ese módulo a un nuevo código compartido para solicitar tokens, y ese código no incluía la comprobación. La versión 0.55.1 la añadió allí el 18 de septiembre.
Pasar un subdominio de inquilino que contiene delimitadores de URL ahora genera un ValueError inmediatamente en lugar de enrutar silenciosamente las credenciales a un endpoint controlado por el atacante, según las notas de la versión 0.55.1.
The Hacker News ejecutó las propias pruebas de SAP para la comprobación el 13 de octubre, contra el código fuente de todas las versiones desde la 0.45.1 hasta la 0.58.4 y de las tres versiones 0.36. Las seis versiones fallaron 9 de las 11 pruebas que SAP añadió con la versión 0.55.1. Esa versión y las 11 posteriores pasaron las 11.
Hasta el 13 de octubre, el aviso no enumera ninguna versión superior a la 0.45.2 como afectada. Ni el aviso ni las notas de la versión indican si las seis versiones entran dentro del CVE-2026-89111.
Dos versiones de la línea anterior 0.36 también carecen de la comprobación. Las versiones 0.36.1 y 0.36.2 se publicaron el 4 y el 10 de septiembre, después de la corrección de agosto, y fallaron las pruebas que SAP escribió para ella. Ambas están dentro del rango de versiones inferiores a 0.45.2 del aviso.
Qué hacer
Las versiones 0.45.2 a 0.52.2 y 0.55.1 a 0.58.4 contienen la comprobación. La versión 0.58.4 era la más reciente en PyPI, el índice de paquetes de Python, el 13 de octubre.
Actualizar dentro de la línea 0.36 no añade la comprobación. Ninguna de sus tres versiones la contiene.
Las aplicaciones que aún no pueden actualizarse pueden comparar cada subdominio de inquilino con una lista de sus inquilinos registrados antes de pasarlo al SDK, según indica SAP en el aviso.
La falla solo importa cuando una aplicación pasa un subdominio de inquilino al SDK. La corrección de agosto cubrió tres módulos: Agent Gateway, Destination y Document Management Service.
El aviso no dice si las aplicaciones que ejecutaron una versión sin la comprobación deben reemplazar sus credenciales de cliente.
Cómo funciona la falla
Cuando una aplicación pasa un subdominio de inquilino, el SDK solicita un token de acceso para ese inquilino. Para ello, toma la URL del token de la configuración de la aplicación y reemplaza parte de ella con el subdominio del inquilino.
Las versiones sin la comprobación utilizaban cualquier valor que se les diera. Luego, el SDK enviaba el ID de cliente y el secreto de cliente de la aplicación a la URL resultante para solicitar el token.
Un atacante que controle el subdominio del inquilino puede dirigir esa solicitud a su propio servidor, según SAP.
La comprobación solo acepta un nombre único formado por letras, dígitos y guiones, de hasta 63 caracteres. Cualquier otro valor detiene la solicitud con un error.
SAP etiqueta la falla como falsificación de solicitud del lado del servidor (SSRF), una debilidad en la que se puede hacer que un servidor envíe una solicitud a un destino no previsto.
Lo que un atacante podría hacer con las credenciales depende de lo que el cliente de la aplicación tenga permitido hacer. El aviso no lo especifica.
Corregido en agosto, divulgado en octubre
El código sin comprobación estuvo en el SDK desde su primera versión en PyPI, el 16 de marzo.
Las notas de la versión de agosto enumeran la corrección bajo "Bug Fixes" y no mencionan seguridad. "Anteriormente, los valores no válidos se usaban silenciosamente para construir una URL malformada", dicen las notas.
El aviso se publicó 53 días después. Acredita a un usuario de GitHub llamado SunandM por informar la falla y no reporta ningún ataque.



















Deja una respuesta