
Proof-of-concept exploit per CVE-2026-50338: bypass di autenticazione cross-issuer nei server di risorse Spring Cloud Azure B2C. Dimostra la contraffazione di token tramite registrazione di app AAD per accedere a endpoint B2C protetti.
Spring Cloud Azure B2C Resource Server Cross-Issuer Authentication Bypass
AadB2cResourceServerAutoConfiguration in spring-cloud-azure-autoconfigure costruisce un JwtDecoder che considera attendibili sei issuer di tipo AAD (login.microsoftonline.com, sts.windows.net, sts.chinacloudapi.cn, ciascuno nelle versioni v1 e v2) ereditati da AadTrustedIssuerRepository tramite AadB2cTrustedIssuerRepository.java:30. Non installa alcun validatore per il claim tid, e il predicato aud utilizza containsAll (che è banalmente vero su audience vuote).
Un attaccante con una registrazione dell'app AAD nello stesso tenant crea un token client_credentials il cui iss è https://sts.windows.net/<tenant>/ e il cui aud corrisponde al client-id dell'app B2C. Il server delle risorse B2C lo accetta perché l'issuer AAD è nel suo insieme fidato e nessuna ulteriore validazione dei claim respinge il token di sistema cross-identity.
Questa è la controparte B2C di CVE-2026-33117 (server delle risorse AAD). La PR #49033 ha corretto il percorso AAD; il percorso B2C non è stato toccato fino alla PR #49252 (mergiata il 2026-06-02, rilasciata nell'aggiornamento di sicurezza di luglio 2026).
Con tenant-id=common, viene accettato il token di qualsiasi tenant Entra.
Affetto: spring-cloud-azure-starter-active-directory-b2c <= 5.19.0. Corretto nell'aggiornamento di sicurezza di luglio 2026 (PR #49252).
pip install msal requests
# Against a vulnerable Spring Boot B2C resource server:
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>
# Without MSAL (raw HTTP token request):
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
# Verbose output (full token claims and response):
python3 poc.py ... -v
La registrazione dell'app attaccante necessita:
msal, requestsspring-cloud-azure-starter-active-directory-b2c <= 5.19.0 come bersaglio| File | Descrizione |
|---|---|
poc.py | PoC Python: conia token AAD, invia all'endpoint B2C, segnala il bypass |
README.md | Dettagli della vulnerabilità e utilizzo |
LICENSE | Licenza GPLv3 |
Questo progetto è rilasciato sotto la GNU GPLv3.
È fornito per ricerca sulla sicurezza difensiva, educazione e test autorizzati. Non utilizzare questo codice contro sistemi o servizi senza permesso esplicito del proprietario.
L'uso non autorizzato potrebbe violare le leggi applicabili. Gli autori non concedono il permesso di testare sistemi di terze parti e non sono responsabili per un uso improprio.
Vedi il file LICENSE per i termini di garanzia e responsabilità.