
Эксплойт, подтверждающий концепцию, для CVE-2026-50338: обход аутентификации между эмитентами в серверах ресурсов Spring Cloud Azure B2C. Демонстрирует подделку токенов через регистрацию приложения AAD для доступа к защищённым конечным точкам B2C.
Spring Cloud Azure B2C Resource Server: обход аутентификации между издателями
AadB2cResourceServerAutoConfiguration в spring-cloud-azure-autoconfigure создаёт JwtDecoder, который доверяет шести издателям семейства AAD (login.microsoftonline.com, sts.windows.net, sts.chinacloudapi.cn — v1 и v2 для каждого), унаследованным от AadTrustedIssuerRepository через AadB2cTrustedIssuerRepository.java:30. Он не устанавливает валидатор утверждения tid, а предикат aud использует containsAll (что тривиально истинно для пустых аудиторий).
Злоумышленник, имеющий регистрацию приложения AAD в том же тенанте, создаёт токен client_credentials, у которого iss равен https://sts.windows.net/<tenant>/, а aud совпадает с client-id приложения B2C. Ресурсный сервер B2C принимает его, поскольку издатель AAD входит в доверенный набор, и никакая дополнительная проверка утверждений не отклоняет токен другой системы идентификации.
Это «близнец» CVE-2026-33117 для B2C (ресурсный сервер AAD). PR #49033 исправил путь AAD; путь B2C не затрагивался до PR #49252 (слит 2026-06-02, выпущен в июльском обновлении безопасности 2026 года).
При tenant-id=common принимается токен любого тенанта Entra.
Затронуто: spring-cloud-azure-starter-active-directory-b2c <= 5.19.0. Исправлено в июльском обновлении безопасности 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
Регистрация приложения злоумышленника должна иметь:
msal, requestsspring-cloud-azure-starter-active-directory-b2c <= 5.19.0, в качестве цели| Файл | Описание |
|---|---|
poc.py | Python PoC: создаёт токен AAD, отправляет его на конечную точку B2C и сообщает об обходе |
README.md | Сведения об уязвимости и использовании |
LICENSE | Лицензия GPLv3 |
Этот проект распространяется под лицензией GNU GPLv3.
Он предоставляется для исследований в области защитной безопасности, обучения и авторизованного тестирования. Не используйте этот код против систем или сервисов без явного разрешения владельца.
Несанкционированное использование может нарушать действующее законодательство. Авторы не дают разрешения на тестирование сторонних систем и не несут ответственности за неправомерное использование.
Условия гарантии и ответственности см. в файле LICENSE.