概要
- Firefox系ブラウザにおける IndexedDBの順序性漏洩によるプライバシー脆弱性 の発見
- サイト間で 安定したプロセス単位の識別子 を導出可能
- Private BrowsingやTor Browserでも セッション切断後も識別子が持続
- Mozillaは Firefox 150/ESR 140.10.0 で修正済み
- 修正方法は返却順序の正規化 による情報漏洩防止
Firefox系ブラウザのIndexedDB順序性漏洩によるプライバシー脆弱性
- IndexedDB API の返却順序が、 内部ストレージ構造 に由来する識別子として機能
- サイトは 複数のIndexedDBデータベース を作成し、返却される順序を観察することで 一意かつ安定した識別子 を得ることが可能
- この識別子は プロセス単位 で共有され、 異なるorigin間でも同一識別子 が観測可能
- Private Browsingモード ではウィンドウを全て閉じても Firefoxプロセスが継続している限り識別子が持続
- Tor Browser では「New Identity」機能でも識別子がリセットされず、 完全な匿名性が損なわれる
脆弱性の技術的詳細
- IndexedDBの内部実装 (ActorsParent.cpp)で、Private Browsing時のデータベース名は UUIDベース でグローバルなハッシュテーブルに格納
- UUIDのマッピングは プロセス全体で共有 され、 完全なブラウザ再起動時のみクリア
- indexedDB.databases() 実行時、データベース名のリストは ハッシュセットの内部順序 で返却され、 安定した順序 となる
- この順序が サイト間で一致 し、 プロセス終了まで持続
- 証明方法 として、異なるオリジンで同一スクリプトを実行し、順序が一致することを観察
プライバシーへの影響
- クロスオリジン追跡 :異なるサイト間で同一プロセスかどうかを識別でき、 活動のリンク が可能
- 同一オリジン追跡 :Private Browsing後の再訪問でも 識別子が残存 し、 完全なセッション切断 が実現できない
- Tor Browser では「New Identity」後も識別子が持続し、 期待される分離性が破綻
エントロピーと識別能力
- サイトが制御できるデータベース名数Nに対し、 N!通りの順序 が得られ、理論上 log2(N!)ビットのエントロピー
- 16個のデータベース名で 約44ビット の情報量、 実用上十分な識別力
修正方法とセキュリティ上の教訓
- 内部ストレージ順序に由来するエントロピーの排除 が必須
- 返却リストを正規化(例:辞書順ソート) することで識別子化を防止
- APIの有用性 を損なわず、 開発者にとって予測可能かつ安全
- Mozillaは迅速に修正 (Firefox 150/ESR 140.10.0、Bug 2024220)
- Geckoベースの他ブラウザ (Tor Browser含む)も同様の修正が必要
プライバシー設計への示唆
- 実装上の些細な挙動 が 深刻なプライバシー問題 に発展する可能性
- API設計時には内部状態の決定論的露出に注意
- 小さな修正 で大きなプライバシー回復が可能
- プライバシー重視ブラウザ開発者 への重要な教訓