
Exploit de prueba de concepto para CVE-2026-50338: bypass de autenticación entre emisores en servidores de recursos de Spring Cloud Azure B2C. Demuestra la falsificación de tokens mediante el registro de aplicaciones de AAD para acceder a endpoints protegidos de B2C.
Omisión de autenticación entre emisores en el servidor de recursos de Spring Cloud Azure B2C
AadB2cResourceServerAutoConfiguration en spring-cloud-azure-autoconfigure
construye un JwtDecoder que confía en seis emisores de línea AAD
(login.microsoftonline.com, sts.windows.net, sts.chinacloudapi.cn, v1 y
v2 cada uno) heredados de AadTrustedIssuerRepository a través de
AadB2cTrustedIssuerRepository.java:30. No instala ningún validador de
reclamación tid, y el predicado aud usa containsAll (verdadero
vacuoso en audiencias vacías).
Un atacante con un registro de aplicación AAD en el mismo inquilino crea un
token client_credentials cuyo iss es https://sts.windows.net/<tenant>/
y cuyo aud coincide con el client-id de la aplicación B2C. El servidor de
recursos B2C lo acepta porque el emisor AAD está en su conjunto de confianza
y ninguna validación de reclamación adicional rechaza el token de sistema
de identidad cruzada.
Esta es la contraparte B2C de CVE-2026-33117 (servidor de recursos AAD). El PR #49033 corrigió la ruta AAD; la ruta B2C no se tocó hasta el PR #49252 (fusionado el 02-06-2026, publicado en la actualización de seguridad de julio de 2026).
Con tenant-id=common, se acepta cualquier token de cualquier inquilino de
Entra.
Afectado: spring-cloud-azure-starter-active-directory-b2c <= 5.19.0.
Corregido en la actualización de seguridad de julio de 2026
(PR #49252).
pip install msal requests
# Contra un servidor de recursos Spring Boot B2C vulnerable:
python3 poc.py \
--target http://localhost:8080/profile \
--tenant-id <TENANT_ID> \
--client-id <ATTACKER_APP_CLIENT_ID> \
--client-secret <ATTACKER_APP_SECRET> \
--victim-api <B2C_APP_CLIENT_ID>
# Sin MSAL (solicitud de token HTTP cruda):
python3 poc.py \
--target http://localhost:8080/profile \
--tenant-id <TENANT_ID> \
--client-id <ATTACKER_APP_CLIENT_ID> \
--client-secret <ATTACKER_APP_SECRET> \
--victim-api <B2C_APP_CLIENT_ID> \
--no-msal
# Salida detallada (reclamaciones completas del token y respuesta):
python3 poc.py ... -v
El registro de aplicación atacante necesita:
msal, requestsspring-cloud-azure-starter-active-directory-b2c
<= 5.19.0 como objetivo| Archivo | Descripción |
|---|---|
poc.py | PoC en Python: genera token de AAD, lo envía al endpoint B2C, reporta la omisión |
README.md | Detalles de la vulnerabilidad y uso |
LICENSE | Licencia GPLv3 |
Este proyecto se publica bajo la GNU GPLv3.
Se proporciona para investigación de seguridad defensiva, educación y pruebas autorizadas. No utilice este código contra sistemas o servicios sin permiso explícito del propietario.
El uso no autorizado puede violar la ley aplicable. Los autores no otorgan permiso para probar sistemas de terceros y no son responsables por el uso indebido.
Consulte el archivo LICENSE para los términos de garantía y responsabilidad.