
CVE-2026-50338の概念実証エクスプロイト:Spring Cloud Azure B2Cリソースサーバーにおけるクロス発行者認証バイパス。AADアプリ登録を介したトークン偽造により、保護されたB2Cエンドポイントにアクセスすることを実証します。
Spring Cloud Azure B2C リソースサーバー クロス発行者認証バイパス
spring-cloud-azure-autoconfigure 内の AadB2cResourceServerAutoConfiguration は、AadB2cTrustedIssuerRepository.java:30 を介して AadTrustedIssuerRepository から継承された6つのAAD系統の発行者(login.microsoftonline.com、sts.windows.net、sts.chinacloudapi.cn、それぞれv1およびv2)を信頼する JwtDecoder を構築します。tid クレームバリデータはインストールされておらず、aud 述語は containsAll を使用します(空のオーディエンスでは自明的に真となります)。
同一テナント内にAADアプリ登録を持つ攻撃者は、iss が https://sts.windows.net/<tenant>/ で aud がB2CアプリのクライアントIDと一致する client_credentials トークンを発行します。B2Cリソースサーバーは、AAD発行者が信頼済みセットにあり、さらなるクレーム検証がクロスIDシステムトークンを拒否しないため、このトークンを受け入れます。
これは、CVE-2026-33117(AADリソースサーバー)のB2C版です。PR #49033 でAADパスは修正されましたが、B2Cパスは PR #49252(2026年6月2日マージ、2026年7月のセキュリティアップデートでリリース)まで修正されませんでした。
tenant-id=common の場合、任意のEntraテナントのトークンが受け入れられます。
影響を受けるバージョン: spring-cloud-azure-starter-active-directory-b2c <= 5.19.0。
修正: 2026年7月のセキュリティアップデート
(PR #49252)。
pip install msal requests
# 脆弱なSpring Boot B2Cリソースサーバーに対して:
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>
# MSALなし(生のHTTPトークンリクエスト):
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
# 詳細出力(トークンクレームと応答全体):
python3 poc.py ... -v
攻撃者側のアプリ登録には以下が必要です:
msal、requestsspring-cloud-azure-starter-active-directory-b2c <= 5.19.0 を使用するSpring Bootアプリ| ファイル | 説明 |
|---|---|
poc.py | Python PoC: AADトークンを生成し、B2Cエンドポイントに送信、バイパスを報告 |
README.md | 脆弱性の詳細と使い方 |
LICENSE | GPLv3ライセンス |
このプロジェクトはGNU GPLv3の下で公開されています。
防御的なセキュリティ研究、教育、および許可されたテストのために提供されています。所有者から明示的な許可なく、このコードをシステムやサービスに対して使用しないでください。
許可されていない使用は、該当する法律に違反する可能性があります。著者は第三者システムのテストを許可しておらず、誤用について責任を負いません。
保証および責任条件については、LICENSEファイルを参照してください。