私たちが発見したのは、あなたのすべてのプライベートな Tor アカウントを相互に結びつける安定した Firefox の識別子です。

2026/04/23 2:35

私たちが発見したのは、あなたのすべてのプライベートな Tor アカウントを相互に結びつける安定した Firefox の識別子です。

RSS: https://news.ycombinator.com/rss

要約

日本語訳:

元のサマリーは優れている—it は簡潔で明瞭であり、主要ポイントリストからのすべての主要ポイントを余計な冗談抜きに捉えている。

サマリー:

Firefox ベースのブラウザには、プライバシー上重大な欠陥があり、ウェブサイトがプライベートモードであってもユーザーを一意に追跡できるようになっています。この問題は、

IndexedDB
(ブラウザの保存システム)がデータをどのように順序付けるかという仕組みから生じており、これは永続的な「指紋」を作り出します。この順序付けはブラウザを完全に再起動するまで安定するため、異なるウェブサイトにおいて同様のパターンを観測し、従来のクッキーを使用せずにユーザーのウェブサイトの活動同士をつなげることを可能とします。この脆弱性は、セッションデータを閉じた後で消えるかリセットすると期待して匿名性を維持するためにユーザーが依存している Tor の「新しいアイデンティティ」機能のようなプライバシー保護措置を効果的に回避します。

この欠陥がすべての Firefox 派生版で共有される

Gecko
エンジンに存在することに気づいた Mozilla は、最近のバージョン向けの緊急修正をリリースしました。解決策はデータベースリストの表示方法を標準化し、追跡を可能とした内部の保存パターンを取り除きます。その結果、ユーザーはこれらの指紋を完全にクリアするためにブラウザを再起動する必要があります。それまでの間、プライベートブラウジングモードの信頼性が損なわれ、無関係なウェブサイトがユーザーの一貫したクロスサイト行動を識別できないという根本的な信頼が破られます。

本文

近日、Firefox 系ブラウザに広く影響するプライバシー関連の脆弱性を発見しました。本問題により、IndexedDB から返されるエントリの順序から、ユーザがより強い分離を期待する文脈であっても、プロセスライフサイクル固有の一意で決定論的かつ安定した識別子を導出可能となっています。

すなわち、ウェブサイトは IndexedDB データベースの集合を作成し、返却される順序を確認することで、実行中のブラウザプロセスに対する指紋(フィンガープリント)としてその順序を利用できます。本振る舞いは origin(オリジン)スコープではなくプロセススコープであるため、関連のないウェブサイトが互いに独立して同一識別子を観測し、同じブラウザランタイムにおいてクロスオリジンの活動を追跡・連結することが可能です。Firefox Private Browsing モードでは、プライベートウィンドウがすべて閉じられたとしても Firefox プロセスが実行状態にある限り、識別子は保持され続けます。Tor Browser についても、「New Identity」機能(クッキーや閲覧履歴をクリアし、新しい Tor サーキットを使用する完全リセットと位置づけられています)を行っても安定した識別子が持続することから、ユーザが目指す「前の活動との無関係性を保証する」という設計意図を事実上無効化します。この脆弱性は、ユーザが依存している unlinkability(関連付けの不可能性)に関する分離保証を根本的に損なうものです。

我々は、Mozilla および Tor Project に対して責任ある公開を行い対応しました。Mozilla は迅速に対応し、Firefox 150 と ESR 140.10.0 でパッチを展開しており、詳細は Mozilla Bug 2024220 で追跡されています。根本原因は Gecko の IndexedDB 実装に由来するものであり、そのため Tor Browser も同様に影響を受け、すべての Firefox 系ブラウザに共通する問題となります。

対応策の原理面ではシンプルです:ブラウザは、プロセススコープの状態を反映する内部ストレージの順序を公開すべきではありません。結果を返す前に正規化(例:辞書式ソート)またはソートを行うことでエントロピーを取り除き、当該 API が安定した識別子として機能することを防止できます。

なぜこれが重要なのか

プライベートブラウジングモードやプライバシー重視のブラウザは、ウェブサイトによるユーザの特定を異なる文脈を超えて行う能力を減じることを目的としています。ユーザ一般には以下の二点について期待されています:

  • 共有ストレージまたは明示的なアイデンティティ機構が関与しない限り、関連のないウェブサイト同士は、同一のブラウザインスタンスとやり取りしているかどうかを判別できないはずです。
  • プライベートセッションが終了した際、当該セッションに関連する状態は消滅する必要があります。

本問題はこの二つの期待をすべて崩壊させます。ウェブサイトにはクッキー、localStorage、あるいは明示的なクロスサイト通信チャンネルを必要とせず、ブラウザ自身の内部ストレージの振る舞いに依存して、API で返却されるデータベース名の順序から大容量の識別子を導出すれば十分です。

  • 開発者の方へ:プライバシーに関するバグが常に直接の特定データへのアクセスから生じるわけではないことを示す有用な教訓となります。ときに、内部実装詳細の決定論的な暴露から生じます。
  • セキュリティおよび製品利害関係者の方へ:核心は単純です:一見無害な API でも、安定したプロセスレベルの状態を漏らすと、クロスサイトトラッキングのベクトルとして機能し得ます。

IndexedDB と
indexedDB.databases()
は何ですか?

IndexedDB はクライアント側で構造化データを保存するためのブラウザ API です。Web アプリケーションはオフライン対応、キャッシュ、セッション状態、およびその他のローカルストレージ要件のためにこれを活用します。各オリジンは一つ以上の名前付きデータベースを作成でき、オブジェクトストアや大量のデータを保持できます。

indexedDB.databases()
API は、現在の実装において可見なデータベースに関するメタデータを受信者(origin)に返します。実際の運用では、開発者が既存のデータベースを点検、ストレージ使用量をデバッグ、またはアプリケーション状態を管理するためにこれを多用します。

通常のプライバシー期待に従うと、当該 API で返される結果の順序そのものが特定情報を運ぶべきではありません。データベースメタデータの中性な、正規化された、あるいは他の非機密性の表現を反映すべきです。今回発見された問題は、すべての Firefox 系ブラウザにおいて返却される順序が全くもって中立的ではないことに起因しています。

indexedDB.databases()
がなぜ安定した識別子となったか

すべての Firefox Private Browsing モードで、

indexedDB.databases()
はデータベースメタデータを、データベース作成の順序からではなく、内部ストレージ構造から派生した順序で返します。関連する実装は
dom/indexedDB/ActorsParent.cpp
にあります。

Private Browsing モードでは、データベース名が直接ディスク上の識別子として使用されません。代わりに、グローバルなハッシュテーブルを介して UUID ベースのファイル名ベースにマッピングされます:

using StorageDatabaseNameHashtable = nsTHashMap<nsString, nsString>;
StaticAutoPtr<StorageDatabaseNameHashtable> gStorageDatabaseNameHashtable;

マッピング処理は、

OpenDatabaseOp::DoDatabaseWork()
内で呼ばれられる
GetDatabaseFilenameBase()
内で実行されます。
aIsPrivate
が真である場合、ウェブサイトが提供するデータベース名は生成された UUID に置き換えられ、グローバルな
StorageDatabaseNameHashtable
に格納されます。このマッピングは以下の特性を持ちます:

  • キーのみでデータベース名の文字列によってインデックス化される
  • IndexedDB QuotaClient のライフサイクル全体に持続する
  • すべてのオリジン間で共有される
  • Firefox が完全に再起動された場合にのみクリアされる

その後、

indexedDB.databases()
が呼ばれると、Firefox は
GetDatabasesOp::DoDatabaseWork()
で呼び出される
QuotaClient::GetDatabaseFilenames(...)
によってデータベースファイル名を収集し、それらを
nsTHashSet
に挿入します。反復前にソートは実行されません。最終的な結果順序は、ハッシュセットの内部バケットレイアウトを反復することで決定されます。

UUID マッピングは Firefox プロセスのライフサイクル全体に安定しており、かつハッシュテーブル構造および反復順序が内部レイアウトに対して決定論的であるため、返却される順序は生成された UUID 値、ハッシュ関数の動作、ハッシュテーブル容量、挿入履歴という要素の決定論的な関数となります。この順序はタブ間、プライベートウィンドウ間でも維持され、Firefox の完全な再起動のみでリセットされます。重要なのは、UUID マッピングとハッシュセット反復がオリジンスコープではなくプロセススコープであることです。

問題の再現

簡潔な概念検証例だけでも振る舞いを示せます。異なる二つのオリジンが同一スクリプトをホストし、それぞれ:

  • 固定されたセットの名前付きデータベースを作成する
  • indexedDB.databases()
    を呼び出す
  • 返却された順序を抽出して出力する

影響を受ける Firefox Private Browsing および Tor Browser ビルドでは、同じブラウザプロセスのライフサイクル全体にわたり両方のオリジンが同一の置換(permutation)を観測します。ブラウザを再起動すると置換は変化します。

概念的には出力はこのようになります:

作成時:

a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p

リストされた順序:
g,c,p,a,l,f,n,d,j,b,o,h,e,m,i,k

重要な点は、正確な順序そのものではなく、以下の事実です:

  • 順序は元の作成順序と一致しない
  • 関連のないオリジン間でも同一の順序が観測される
  • プライベートウィンドウがすべて閉じられた後でも、リロードや新しいプライベートウィンドウを開いた後も維持される
  • 新しい順序を得るにはブラウザ全体を再起動する必要がある

これはプライバシー観点から望ましくない挙動です。

プライバシーへの影響

本問題により、単一のブラウザランタイム内でクロスオリジン追跡と同ソース追跡が両方可能になります。

クロスオリジンの影響

関連のないウェブサイトは互いに独立して同一識別子を導出でき、「同じ Firefox または Tor Browser プロセスとやり取りしている」と推測できます。これによりクッキーや他の共有ストレージを介さずにドメイン間での活動を連結することが可能になります。

同ソースの影響

Firefox Private Browsing モードでは、Firefox プロセス自体が実行状態にある限り、プライベートウィンドウがすべて閉じられた後も識別子は維持されます。つまり、サイトはあたかも新鮮なプライベートセッションであるように見える後続の訪問を認識できます。Tor Browser では、安定した識別子がブラウザプロセス内の「New Identity」による分離を事実上無効にし、本来互いに完全に隔離されるべきセッションをウェブサイトが連結することを可能にします。

なぜ Tor Browser で特に深刻なのか

Tor Browser は、クロスサイトリンク可能性を減らしブラウザインスタンスレベルのアイデンティティを最小化することを意図的に設計されています。安定したプロセスライフサイクル固有の識別子は、この設計目標に直ちに反します。たとえそれがプロセス再起動までしか持続しなくても、アクティブな使用時に unlinkability を弱めるのに十分です。

エントロピーとフィンガープリント能力

シグナルは単に安定しているだけでなく、高い容量を持ちます。サイトが N のデータベース名を制御する場合、観測可能な置換の数は N! であり、理論的エントロピーは log₂(N!) です。16 つの制御名の場合、理論空間は約 44 ビットです。これは実践的に存在する同時実行のブラウザインスタンス数を区別するのに十分以上の情報量です。

内部ハッシュテーブルの動作により到達可能な置換数が若干低下することはありますが、セキュリティストーリーに本質的な変更はありません。暴露された順序には、強力な識別子として機能するには十分に多くのエントロピーが提供されています。

対応策

適切な対応策は、内部ストレージレイアウトから派生するエントロピーを公開し続けることをやめることです。最もきれいな緩和策は、辞書式ソートなど正規化された順序で結果を返すことです。これは API の開発者利便性を維持しつつ、フィンガープリントシグナルを除去します。各呼び出しごとに出力をランダム化する手法でも安定した順序を隠せますが、ソートの方が単純で予測可能であり、開発者が論じやすい方法です。

セキュリティエンジニアリングの観点から、理想的な対応策は:

  • 概念的に複雑さが低い
  • 互換性リスクが最小限
  • プライバシーリークを直接的に排除する

というものでしょう。

責任ある公開

我々は、Mozilla および Tor Project に対して責任ある公開を行いました。Mozilla は Firefox 150 と ESR 140.10.0 で対応パッチを展開しており、詳細は Mozilla Bug 2024220 で追跡されています。この振る舞いは Gecko の IndexedDB 実装に由来するため、Tor Browser を含めた下流の Gecko ベースブラウザも独自の緩和策を適用しない限り影響を受けます。

プライバシーのための構築

この脆弱性は、小さな実装詳細が有意なプライバシー問題を生み出すことを示しています。影響は重大です。関連のないウェブサイトは同じブラウザランタイム内でクロスオリジンの活動を連結でき、識別子がユーザが予想するより長く残るためプライベートセッションの境界も弱体化します。

良いニュースは、対応策がシンプルで有効であることです。結果を返す前に正規化することで、ブラウザはこのエントロピー源を除去し、期待されるプライバシー境界を回復できます。これはまさに注目すべき問題の類型です:微妙であり見落としやすく、かつプライバシー敏感なブラウザ機能の開発にとって極めて示唆に富んでいます。

同じ日のほかのニュース

一覧に戻る →

2026/04/23 5:27

Apple、警察による iPhone の消去されたチャットメッセージの抽出を可能にしていたバグの修正を提供。

## Japanese 翻訳: Apple は緊急に重要なソフトウェア更新をリリースし、iOS 18 およびそれ以前のバージョンを実行する iPhone と iPad(すべてを含む)で、Signal や WhatsApp のような暗号化アプリから削除されたメッセージを法執行機関のフォレンジックツールが抽出できるという深刻なセキュリティ欠陥を修正しました。この脆弱性は、ユーザーがメッセージを削除してもデバイス上で最大 1 ヶ月間キャッシュとして保持され、削除されない通知データが原因でした。これにより、「セットして忘れましょう」という設計思想を持つ危険人物向け自動削除タイマーにもかかわらず、法執行機関(FBI を含む)は押収されたデバイス上の私的チャットを再構築することができました。この問題は Signal 社長メレディス・ホイッターによって確認され、当初は404 Mediaによって開示されました。問題の核心は、削除対象としてマークされた通知が予期せずにデバイス上に保持されたことです。OS 全体のアップグレードを必要とせず、即時のリスクを軽減するために、Apple は該当デバイスに修正をバックポートし、不可欠なプライバシー保護を回復するとともに、将来的なフォレンジック攻撃を防ぐためにモバイルセキュリティプロトコルにおけるより厳格なデータキャッシュ管理の必要性を強調しました。

2026/04/20 0:19

微小画面向けの 5 ピクセル×5 ピクセルのフォント。

## Japanese Translation: 最も重要な示唆は、AVR128DA28 などのリソース制約の厳しい 8 ビットマイクロコントローラ向けに最適化された、非常に効率的で手作業によるフォント設計にあります。lcamtuf の `5x6 font-inline.h` に基づき、ZX Spectrum のスタイルに触発されたこのアプローチは、ベクトルフォント(メガバイト規模のデータを必要とするため)が失敗したり、限られた RAM を備えたデバイス上で文字列長の計算時に整数溢れ問題を引き起こしたりする記憶制約を解決します。このフォントは合計 350 バイトで完結しており、標準的な 128x64 OLED などコンパクトなディスプレイに適合します。主要な設計判断はグリッド寸法に集中しており、5x5 グリッドが "E" や"M"や"W"のような個別の文字を損なうことなく完全な可読性を維持するための最小サイズであることが特定されました。一方、より小さなグリッドではフォント数の大幅な減少と可読性の低下を引き起こし(例:3x5 に落とすと特定の形状が失われ、3x3 未満では文字セットが単純なコードに縮小されます)。この定幅形式はプログラミングを簡素化し、画面内の文字列長が予測可能(文字数の 6 倍)になります。これにより、厳格にストレージ制限を受けたハードウェア上でもファームウェアは軽量かつ信頼性が保たれます。プロジェクトのソースには、2026 年 4 月に開発された `mcufont.h` および`test.c` と関連するピクセルアートフォントリポジトリが含まれています。

2026/04/23 2:51

過剰編集とは、必要以上のコード改変を行うモデルの動作を指します。

## Japanese Translation: 大規模 AI コードツールは頻繁に、単純なエラー(例えば、オフバイワンエラーの修正)に対して機能するコードを不必要に広範に書き換えるという深刻な「過剰編集問題」を抱えています。「より多くのテストを書く」という既存のアドバイスはこの問題を検出できず、その理由としては、不要な構造的変更がなされたとしてもテストスイートはパスし続ける点、および標準的な指標では元アーキテクチャに対する忠実性の不足を捉えられない点が挙げられます。最近の研究では、コード構造を維持するための特定の指示を用いることでこの問題を実効的に軽減できることが示されており、また監督微調整(SFT)がドメイン外への一般化に失敗するのと異なり、コーディング能力を損なわずに良好に一般化する全リニューアランスレーニング(RL)や、バグのある報酬関数を用いた RL 微調整も同様に有効であることが示されています。LoRA 微調整といった高度な技術では、フル RL のパフォーマンスにほぼ匹敵しつつ fewer な調整だけで実現でき、これらの改善への軽量なアプローチを提供します。結局のところ、これら戦略を採用することで開発者は、AI コードアシスタントの信頼性を確保し、破壊的な書き換えではなく最小限かつ高品質な更新を行う方向へと誘導できます。

私たちが発見したのは、あなたのすべてのプライベートな Tor アカウントを相互に結びつける安定した Firefox の識別子です。 | そっか~ニュース