完全な開示:第三(および第四)の「Azure」サインインログバイパスが発見されました
概要
- Azure Entra IDのサインインログバイパス脆弱性の詳細解説
- GraphNinjaとGraphGhost、さらにGraphGoblinなど複数のバイパス手法の紹介
- バイパス手法の利用で完全なトークン取得やログ記録の回避が可能だった事例
- Microsoftによる対策と、それまでのリスク
- KQLクエリによる検知方法や今後の注意点も解説
Azure Entra ID サインインログバイパスの全貌(2023-2026)
- 2023年以降、Azure Entra IDにて4件のサインインログバイパス脆弱性を発見
- いずれも認証試行がログに記録されず、管理者による侵入検知が困難となる問題
- GraphNinja:他テナントIDを指定し、パスワード検証のみ実施、ログ記録回避
- GraphGhost:無効なClient ID指定で認証フロー失敗、パスワード検証は実施、ログには失敗のみ記録
- GraphGoblin:scopeパラメータに同一値(例:openid)を大量指定し、SQLカラム長をオーバーフローさせてログ記録を失敗させる手法
- いずれもOAuth2 ROPCフローを利用し、curlなどで簡単に再現可能
主要バイパス手法一覧
| 名称 | 報告日 | 修正日 | 概要 | |--------------|-------------|-------------|-------------------------------------------------------| | GraphNinja | 2023年8月 | 2024年5月 | 外部テナントID指定でパスワード検証、ログ非記録 | | GraphGhost | 2024年12月 | 2025年4月 | 無効Client IDで認証失敗、パスワード検証は実施、ログ非記録| | GraphGoblin | 2025年 | (修正済) | scopeパラメータの繰り返し指定によるSQLオーバーフロー |
GraphNinja・GraphGhostの技術概要
-
GraphNinja
- 認証エンドポイントに他テナントのGUIDを指定してPOST
- 成功/失敗ログがどちらのテナントにも記録されない
- パスワード検証の可否のみ取得可能、トークンは取得不可
-
GraphGhost
- 無効なClient IDを指定し、パスワード検証後に認証フロー失敗
- 管理者には単なる失敗ログとしてしか見えず、成功したパスワード推測は不可視
- トークンは取得不可、パスワード検証結果のみ判別可能
GraphGoblinの詳細
- scopeパラメータに同じ値(例:openid)を1万回以上繰り返し指定
- 例:
scope=openid openid openid ...(1万回以上)
- 例:
- Azureの認証APIはscope値のバリデーションを形式のみで実施
- scope値がSQLのカラム長を超えることでログ記録用INSERTが失敗
- 結果としてサインインログに一切記録されず、完全なトークンを取得可能
- 攻撃者は痕跡を残さずアカウント乗っ取りが可能となる重大リスク
実証例(curlコマンド)
export TENANT_ID="[tenant-guid-goes-here]"
curl -X POST "https://login.microsoftonline.com/${TENANT_ID}/oauth2/v2.0/token" \
-H "Content-Type: application/x-www-form-urlencoded" \
--data-urlencode "client_id=f05ff7c9-f75a-4acd-a3b5-f4b6a870245d" \
--data-urlencode "client_info=1" \
--data-urlencode "grant_type=password" \
--data-urlencode "username=ユーザー名" \
--data-urlencode "password=パスワード" \
--data-urlencode "scope=$(for num in {1..10000}; do echo -n 'openid ';done)"
原因推測
- SQLカラム長のオーバーフローによるINSERT失敗が主因と考察
- scope値の形式バリデーションは十分でも、内容の繰り返しや長さ制限が不十分
- Microsoft内部のセキュリティレビューやテストケースの網羅性に課題
実際のログ検証
- 通常の失敗ログ・成功ログとGraphGoblinバイパス利用時のログを比較
- GraphGoblin利用時のみ完全にログが記録されていないことを確認
- Log Analyticsでも該当イベントが一切記録されていないことを証明
Microsoftの対応
- 2026年時点で全てのバイパスは修正済
- 追加のバリデーションやログ記録強化が実施済み
- 今後も新たなバイパス手法が発見される可能性に注意
管理者・SOC向けアドバイス
- KQLクエリ等で不審な認証フローやログギャップを監視
- 例:連続するCorrelation IDや時刻でログ抜けを検出
- サインインログの整合性確認と異常値の分析を定期的に実施
- Microsoftのセキュリティアドバイザリや脆弱性情報を継続チェック
今後の課題と備え
- クラウド認証基盤のログ信頼性確保が最重要課題
- 過去のバイパス事例から学び、未知の脆弱性への備え強化
- ユーザー教育と多層防御の徹底