Azure AD の “appsettings.json” ファイルに注意:誤った公開より ClientId/ClientSecret などが漏洩

Azure AD Vulnerability Leaks Credentials, Lets Attackers Deploy Malicious Apps

2025/09/02 gbhackers — Azure Active Directory (Azure AD) の認証情報を取り込んだ ASP.NET Core の “appsettings.json” ファイルが公開されると、深刻な攻撃ベクターが発生し、ユーザー組織のクラウド環境への鍵を攻撃者に渡すことになり得る。先日に実施された、Resecurity HUNTER チームによるサイバー・セキュリティ評価において、公開されている “appsettings.json” ファイルにより、Azure AD アプリケーションの ClientId と ClientSecret が公開されていることが判明した。したがって、Microsoft の OAuth 2.0 エンドポイントに対して直接認証を行う攻撃者は、信頼されたアプリケーションとして振る舞えるようになる。

重大度の高い影響

漏洩した ClientId と ClientSecret を悪用する攻撃者は、クライアント認証情報フローを介して OAuth 2.0 トークンを要求し、Bearer トークンを取得することで、Microsoft Graph API へのアクセス許可を取得する。したがって、それぞれのアプリケーションに割り当てられた Graph 権限に基づくトークンにより、攻撃者は以下の不正なアクションを可能にする。

  • SharePoint/OneDrive/Exchange Online からの機密データの窃取。
  • Azure AD におけるユーザー/グループ/ディレクトリなどのロールの列挙。
  • 権限昇格または永続化を目的とした Graph API 呼び出しの悪用。
  • テナント内における悪意のアプリケーションのデプロイ。

このファイルは、アクセス制御なしで提供されていたので、脅威アクターによる自動スキャンなどでシークレットが収集され、クラウド・アカウントへの侵害やデータ窃取に加えて、本番環境サービスでの横展開などが可能だった。

appsettings.json
appsettings.json

この脆弱性は、クラウド・ネイティブ・アプリの典型的な不備である、ミスコンフィグレーションや不適切なシークレット管理に起因する。ローカルの開発においては、ClientId/ClientSecret/ストレージキー/データベースパスワードなどの機密値が、プレーンなコンフィグ・ファイルに保存されることが多い。このような問題は、以下の場合に発生する。

  • サーバが静的ファイルを提供するようにミスコンフィグレーションされ、誤って JSON コンフィグが公開される。
  • デプロイ・パイプラインの内部コンフィグ・ファイルが、アクセス制限なしの状態で、本番環境にプッシュされる。
  • 安全な保管庫である Azure Key Vault/AWS Secrets Manager を回避する開発チームにより、シークレットがハードコードされる。
  • 定期的なセキュリティ・テストやコード・レビューが実施されないため、誤って公開されたファイルが見過ごされる。
  • 内部ファイルは “誰にも見つからない”という、前提に基づく機密性への過度の依存があり、自動クロール・ツールの存在を無視している。
漏洩の分析

ASP.NET Core アプリケーションでは、”appsettings.json” が主要なコンフィグ・ファイルであり、接続文字列/API キー/クラウド認証情報/ログ設定/機能フラグなどが取り込まれている。そして AzureAd セクションには、Instance/TenantId/ClientId/RedirectUri/ClientSecret などのフィールドが格納されている。

Response

これらの値が公開されてしまうと、それらを足掛かりとする攻撃者が、正規のアプリケーションに成りすますようになる。

  1. トークンの取得:漏洩した ClientId と ClientSecret を悪用する攻撃者は、Azure AD の /oauth2/v2.0/token エンドポイントに POST を送信し、Bearer トークンを取得する。
  2. ユーザーの列挙:それらのトークンを悪用する攻撃者は、GET https://graph.microsoft.com/v1.0/users を呼び出し、すべてのテナント・ユーザーを一覧表示した上で、名前/メールアドレス/オブジェクト ID を収集する。
  3. 権限の付与:後続の GET https://graph.microsoft.com/v1.0/oauth2PermissionGrants により、侵害したアプリが保持する権限が明らかになる。
  4. グループの列挙:GET https://graph.microsoft.com/v1.0/groups を呼び出すと、組織グループが公開され、高権限クラスター内のターゲットとして、グローバル管理者などが浮かび上がる。

これらの機能により、攻撃者が可能にするものには、データ窃取/権限昇格に加えて、永続アクセスのための不正アプリケーション登録や、クラウド・リソースの改竄などがある。

ユーザー組織にとって必要なことは、厳格なファイル・アクセス制御の実施/公開ホスティングからのコンフィグ・ファイルの除外/堅牢なシークレット管理プラクティスの導入である。

さらに、シークレットの安全な保管庫への移行/漏洩した資格情報に対する自動スキャンの統合/定期的なペンテストの実施/Graph への最小限の権限の適用などにより、このような漏洩のリスクを大幅に軽減できる。