セキュリティ
午前2時、あなたのティーンエイジャーは何をしているでしょうか。
Faavと名乗る16歳のセキュリティ研究者が、Microsoftの分析サービス「Titan」に認証の欠陥を発見しました。この欠陥により、Faavは管理者権限を取得し、有効な認証情報なしで不正にSQLクエリを送信できました。さらに、推定17.3兆行が格納された分析データベースにも到達できる可能性がありました。
Titanは社内向けの分析プラットフォームで、Redmondはウェブインターフェースへのアクセスを Microsoftの従業員に限定しています。Faavは自作のAIハッキングボット「Antares」の支援を受け、Azure Cloud Servicesのホスト経由でTitanのAPIにアクセスできることを突き止めました。TitanがログイントークンのSignatureを検証していなかったためです。
Microsoftはその後APIを封鎖し、研究の報奨としてFaavに5,000ドルのバグバウンティを支払いました。Faavによると、突破口が開けたのは10日間にわたる認証エラーとの格闘の末でした。金曜日の宿題を終えて再びこの問題に取り組み、土曜日の午前1時過ぎにようやくTitanの管理者としてSQLを実行できたといいます。
「午前2時でした」と、Faavは調査結果をまとめたブログ記事で述べています 。「叫びたい、せめて声に出して何か言いたいと思いましたが、両親は眠っていました。だから、ただ座って17,333,335,124,315という数字を見つめ、計算をもう一度確かめました」
Faavはまた、Microsoftの要請を受けてブログ記事を書き直し、一部の節や数値を削除したうえで、影響についての表現も公開前に修正したと明かしています。
「Faavが報告した調査結果を検証する機会をいただいたことに感謝します」と、MicrosoftはFaavのブログ向けに提供した声明で述べています。「Faavの報告と協調的な脆弱性開示のおかげで、サービスを強化し、お客様をよりよく保護できました。Microsoft Bug Bountyプログラムの規約に沿った安全なセキュリティ研究を高く評価しており、今後もFaavと協力していくことを楽しみにしています」
少年とボット
調査が始まったのは8月25日、AntaresがTitanの公開APIを見つけたときです。その後10日間、Faavとボットは、サービスのJSON Web Token(JWT)認証チェックと、メールアドレス形式のユーザープリンシパル名(UPN)を試し続けました。そして最終的に、Titanのローカルユーザー検索に到達できる無署名トークンを発見しました。ただし、Titanが認識するUPNは見つかりませんでした。
9月5日の早朝、Faavは無署名トークンのUPNを、メールアドレス形式のIDからadminに変更しました。TitanはこれをローカルのユーザーIDとして認識し、管理者ロールを持つローカルユーザーID 1に解決して、SQLの実行を許可しました。Faavは教訓を次のようにまとめています。
TitanはJWTの内容(テナント、オーディエンス、アプリID、ユーザー)を検証していましたが、あらゆる認証チェックで最も重要な署名の検証だけは行っていませんでした。認証チェックは、すべてのドアにキーカードリーダーが付いているのに、どのキーカードでもどの部屋も開いてしまうホテルのようなものでした。アクセス制御のロジックがアプリ内にすべて存在していても、欠けていたたった一つの要素がそれを無意味にしていたのです。この記事を読んでいる開発者(あるいはコーディングエージェント)の方へ。認証を構築する際は、何よりもまず署名を検証すること。これがこの記事で最も重要な教訓です。
これによりFaavはTitanのプラットフォームメタデータデータベースにアクセスでき、アプリケーションのテーブルを直接クエリできるようになりました。メタデータには次の情報が含まれていました。
-
約25,000件のアカウントおよびメールレコード
-
17,990件の従業員メールレコード
-
15,001件の従業員組織レコード
-
355件のデータベース構成
-
20,979件の仮想データセットSQL定義
-
24,569件のダッシュボード、425,891件のチャート、27,347件のデータセット定義
Titanのユーザーおよび利用状況ディレクトリには、従業員の役職、部署、管理階層が含まれていました。Faavは、これらがソーシャルエンジニアリング攻撃に悪用され得ると指摘しつつ、「ただし、それを試したり実証したりはしていません」と付け加えています。
FaavはBingの分析サンプルも見つけ、検索情報、識別子、国や州レベルといった大まかな位置情報を含む2行をテストしました。Faavによると、位置情報の値に正確なユーザーの所在地は含まれていませんでした。
17.3兆行のデータ
そして大当たりを引きます。アーカイブされた構成にあった56個のルーティング値をテストしたところ、30個がまだ有効だったのです。「各ルーティング値はバックエンド構成を指し、各構成には1つ以上のデータベースが含まれていました。そのため、有効な30個の値は24の構成を経由して、9,863種類のテーブル名にまたがる17個の接続済み分析データベースに解決されました」と、このバグハンターは書いています。
合計は約17.3兆行に達します。Faavによれば、これはメタデータから算出したストレージの推定値で、履歴データ、重複データ、派生データも含まれている可能性が高いといいます。「それでも、かなり大きな数字であることに変わりはありません」
9月6日から9月8日にかけて、Microsoftは10代のFaavにテストの中止を求め、バグバウンティ調査以外の不正行為がないことを確認するため、IPアドレスの提供を要請しました。
その翌日、Redmondはエンドポイントを封鎖し、Faavに対して、報告を受けて「残存するリスクに対処するため、ただちに調査と修復を行った」と伝えました。Microsoftは9月17日、Faavの功績に対して5,000ドルを支払いました。®