Faavとして知られる16歳のセキュリティ研究者が、Microsoftの社内分析サービス「Titan」に存在する重大な認証の欠陥を公表しました。この欠陥を悪用すれば、攻撃者は17兆3,000億行が保存されているとみられる環境に対し、管理者権限のSQLクエリを実行できた可能性があります。
ただし、顧客データの流出が確認されたわけではありません。Faav氏は、想定される影響はあくまで仮定の話だと説明しています。同氏はテストをメタデータ、テーブルの説明、そして厳密に範囲を絞った1行のサンプルに限定したということです。
同氏はこの問題をMicrosoft Security Response Center(MSRC)に報告しました。MSRCは数日以内に、影響を受けるAPIエンドポイントを封鎖しています。
TitanのWebインターフェースは「VPN REQUIRED」と表示されるページの背後で保護されていました。しかし、バックエンドのAPIは、別のAzureホスト型エンドポイントを通じて、インターネットから直接アクセスできる状態でした。
公開されていたSwaggerドキュメントには、複数のAPIルートが掲載されていました。その中には、生のSQLクエリを処理できるエンドポイント/v2/Queryも含まれています。
このAPIはAzure ADのベアラートークンを想定していました。しかしTitanは、JSON Web Token(JWT)に含まれるテナントID、オーディエンス、アプリケーションID、ユーザークレームといった項目は検証していたものの、トークンが信頼できる ID プロバイダーによって正規に発行されたことを証明する暗号署名は検証していなかったと報告されています。
この欠陥により、研究者は署名のないJWTを示すalg: none設定を使って、偽のトークンを作成できました。upnクレームをadminに書き換えたところ、Titanはこの値をローカルの管理者アカウントとして解決し、送信されたSQLクエリを実行したとされています。
この欠陥は、危険な認証のアンチパターンを浮き彫りにしています。それは、トークンの署名を検証する前に、信頼できないトークンのクレームを検証してしまうことです。アプリケーションが先に暗号的な完全性を確認しない限り、トークンのテナント、オーディエンス、ユーザー名といった項目は信頼できません。
Faav氏は、アーカイブされたTitanの設定ファイルから復元した過去のルーティング値56件をテストしました。その結果、30件が依然として有効でした。これらの値は24件の設定を経由して、17台のClickHouse分析データベースに接続していました。データベースには、9,863件の一意なテーブル名が含まれていました。
研究者は、system.tables.total_rowsやアクティブなsystem.partsなどのデータベースメタデータを用いて、アクセス可能だった環境には17,333,335,124,315行が含まれていたと推定しました。
ただし、この数字を、ユーザー、顧客、流出レコードがそれぞれ17兆3,000億件あったという意味に解釈してはなりません。この推定値には、過去のレコード、重複データ、レプリカ、派生した分析データセットが含まれている可能性が高いためです。研究者は、データを大量に抜き出したことも、顧客の個人を特定できる情報(PII)にアクセスしたこともないと強調しています。
メタデータからは、約25,000件のアカウントおよびメールレコード、17,990件の従業員メールレコード、15,001件の従業員組織レコード、数千件のダッシュボードとデータセットの定義、接続先データベースの構成情報が露出していたと報告されています。
Faav氏はまた、Bingの分析パーティションから1行のサンプルを2件取得しました。これは、そうしたデータに技術的に到達できることを確認するためです。同氏によると、自ら開発したAIハッキングアシスタント「Antares」が、8月25日に、公開されていたTitanのAPIを最初に発見したということです。
このシステムは、サブドメインの列挙、APIスキーマの調査、認証動作のテストを行いました。そして、改変したJWTクレームをTitanがどう処理するかを段階的に突き止めていきました。
自動化された処理は途中で行き詰まりました。upnクレームを、メールアドレス形式の一般的なEntra IDとして扱っていたためです。そこでFaav氏が手動で介入し、決定的なテストに至りました。クレームの値をadminに変更したのです。この結果は、人間の直感と自動化された偵察を組み合わせることが脆弱性研究で有効であることを示しています。
Microsoftは調査中のテスト停止を求め、9月9日にAPIエンドポイントを封鎖しました。同社は9月17日、この研究者に5,000ドルの報奨金を支払いました。また、協調的な情報開示がサービスの堅牢化に役立ったとしています。
開発者にとっての教訓は明快です。アプリケーションは、トークン内のクレームを信頼する前に、JWTの署名を暗号的に検証しなければなりません。テナントの検証、オーディエンスのチェック、ロールの照会を行っても、それらの値を運ぶトークン自体を攻撃者が偽造できるなら、安全性は確保できません。
16,000以上のSOCチームがANY.RUNを活用し、脅威調査を効率化して手作業を削減しています。チームで試してみる
翻訳元: https://cyberpress.org/16-year-old-researcher-finds-microsoft-flaw/