4月22日、Fingerprint社が「We Found a Stable Firefox Identifier Linking All Your Private Tor Identities」と題した記事を公開した。この記事では、FirefoxベースのすべてのブラウザでIndexedDBの仕様を悪用してユーザーを特定できる深刻なプライバシー脆弱性について詳しく紹介されている。
プライバシー保護への関心が高まる中、Tor Browserは匿名性を求めるユーザーの重要なツールとなっている。特に「New Identity」機能は完全な匿名性リセットとして信頼されてきた。しかし今回発見された脆弱性は、この前提を根本から覆すものだ。
発見された脆弱性の概要
この脆弱性は、**IndexedDB APIのdatabases()メソッドが返すデータベース名の順序が、内部的な実装に依存した決定論的な順序になっていることに起因する。攻撃者は複数のIndexedDBデータベースを作成し、その返却順序を観察することで、プロセス固有の安定した識別子を生成**できる。
特に問題となるのは、この識別子が以下の特徴を持つことだ:
- オリジン横断で同じ値を持つ - 異なるウェブサイトが同じブラウザプロセスに対して同じ識別子を取得できる
- プロセス生存期間中は安定 - ブラウザプロセスが動作している限り持続する
- プライベートブラウジングモードでも持続 - Firefoxのプライベートウィンドウをすべて閉じても残存する
- Tor Browserの"New Identity"機能も無効化 - 完全なリセットを意図した機能でも識別子が残る
脆弱性の技術的詳細
問題の根本原因は、Firefoxの実装(dom/indexedDB/ActorsParent.cpp)にある。プライベートブラウジングモードでは、データベース名が直接ディスク上の識別子として使用されず、グローバルなハッシュテーブルを介してUUIDベースのファイル名にマッピングされる:
using StorageDatabaseNameHashtable = nsTHashMap<nsString, nsString>;
StaticAutoPtr<StorageDatabaseNameHashtable> gStorageDatabaseNameHashtable;
この実装において、ハッシュテーブルの内部構造に基づく順序がそのままindexedDB.databases()の結果として返される。ソートやキャノニカル化が行われないため、内部実装の詳細が外部に漏洩してしまう。
これはWeb API設計における重要な原則違反でもある。APIは内部実装の詳細を隠蔽し、決定論的で予測可能な動作をするべきだからだ。
識別能力と実証
この手法の識別能力は非常に高い。攻撃者がN個のデータベース名を制御できる場合、理論的にはN!通りの順列が可能で、16個の制御下にあるデータベース名では約44ビットのエントロピーが得られる。これは実用的な数の同時ブラウザインスタンスを区別するのに十分だ。
実証も比較的簡単で、2つの異なるオリジンが以下を実行するだけでよい:
- 固定されたデータベース名のセットを作成
indexedDB.databases()を呼び出し- 返された順序を抽出・表示
影響を受けるFirefoxでは、同一ブラウザプロセスの生存期間中、両方のオリジンが同じ順列を観察する。
プライバシーへの深刻な影響
オリジン間トラッキング
関連性のないウェブサイトが独立して同じ識別子を取得し、同じFirefoxまたはTor Browserプロセスとやり取りしていることを推測できる。これにより、Cookieや他の共有ストレージを使わずにドメイン間でのアクティビティ関連付けが可能になる。
Tor匿名性の根本的破綻
Tor Browserの「New Identity」機能は、Cookieやブラウザ履歴をクリアし、新しいTor回路を使用する完全なリセット機能として設計されている。しかしこの脆弱性により、ユーザーが完全な匿名性のリセットを期待している状況でも識別が継続される。
これはTor Projectが掲げる匿名性の基本原則に対する重大な脅威だ。
修正と今後への教訓
MozillaはFirefox 150およびESR 140.10.0で修正をリリースした。修正方法は概念的にシンプルで、結果を返す前に辞書順ソートなどのカノニカルな順序で返却することで、内部ストレージレイアウト由来のエントロピーの露出を防いでいる。
この脆弱性は、小さな実装の詳細が重大なプライバシー問題を引き起こす可能性を示している。プライバシーに関するバグは、直接的な識別データへのアクセスからだけでなく、内部実装詳細の決定論的な露出からも生じることがある。
セキュリティ担当者にとっては、一見無害に見えるAPIでも、安定したプロセスレベルの状態をリークする場合、サイト横断トラッキングベクターになり得るという重要な教訓だ。特にプライバシー・バイ・デザインの観点から、Web API設計時の慎重な検討が不可欠である。
詳細はWe Found a Stable Firefox Identifier Linking All Your Private Tor Identitiesを参照していただきたい。