
Proof-of-concept exploit para CVE-2026-50338: bypass de autenticação entre emissores em servidores de recursos Spring Cloud Azure B2C. Demonstra a falsificação de tokens via registro de aplicativo AAD para acessar endpoints B2C protegidos.
Bypass de autenticação entre emissores no Resource Server B2C do Spring Cloud Azure
AadB2cResourceServerAutoConfiguration em spring-cloud-azure-autoconfigure constrói um JwtDecoder que confia em seis emissores da linha AAD (login.microsoftonline.com, sts.windows.net, sts.chinacloudapi.cn, v1 e v2 de cada) herdados de AadTrustedIssuerRepository via AadB2cTrustedIssuerRepository.java:30. Ele não instala nenhum validador da claim tid, e o predicado aud usa containsAll (vacuamente verdadeiro em audiências vazias).
Um atacante com um registro de aplicativo AAD no mesmo tenant gera um token client_credentials cujo iss é https://sts.windows.net/<tenant>/ e cujo aud corresponde ao client-id do aplicativo B2C. O resource server B2C o aceita porque o emissor AAD está no seu conjunto de emissores confiáveis e nenhuma validação adicional de claims rejeita o token oriundo de outro sistema de identidade.
Este é o equivalente B2C do CVE-2026-33117 (resource server AAD). O PR #49033 corrigiu o caminho AAD; o caminho B2C não foi alterado até o PR #49252 (mesclado em 2026-06-02, lançado na Atualização de Segurança de julho de 2026).
Com tenant-id=common, o token de qualquer tenant do Entra é aceito.
Afetado: spring-cloud-azure-starter-active-directory-b2c <= 5.19.0.
Corrigido na Atualização de Segurança de julho de 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
O registro de aplicativo do atacante precisa de:
msal, requestsspring-cloud-azure-starter-active-directory-b2c
<= 5.19.0 como alvo| Arquivo | Descrição |
|---|---|
poc.py | PoC em Python: gera token AAD, envia ao endpoint B2C, relata o bypass |
README.md | Detalhes da vulnerabilidade e uso |
LICENSE | Licença GPLv3 |
Este projeto é distribuído sob a GNU GPLv3.
Ele é fornecido para pesquisa de segurança defensiva, educação e testes autorizados. Não use este código contra sistemas ou serviços sem permissão explícita do proprietário.
O uso não autorizado pode violar a legislação aplicável. Os autores não concedem permissão para testar sistemas de terceiros e não são responsáveis pelo uso indevido.
Consulte o arquivo LICENSE para os termos de garantia e responsabilidade.