1 ポイント 投稿者 GN⁺ 18 일 전 | 1件のコメント | WhatsAppで共有
  • Mozilla の Add-ons API を使って、84,000 以上の Firefox 拡張機能をすべて収集・インストールした大規模実験を実施
  • スクレイピングにより 84,235 個のユニークな拡張機能を確保、総容量は 49.3GB、データセットは Hugging Face で公開
  • インストールの過程で、フィッシング・スパム・PUA(潜在的に不要なアプリ) など、さまざまな悪性拡張機能が多数見つかった
  • 最終的に 84,194 個の拡張機能のインストールに成功したが、ブラウザーは事実上使用不能であることが確認された
  • この実験は、Firefox 拡張機能エコシステムの 規模・品質・セキュリティ問題を総合的に示した事例 と評価できる

すべての Firefox 拡張機能をインストールする実験

  • Firefox 用 84,000 以上の拡張機能をすべて収集・分析・インストールした大規模実験
  • Mozilla の 公開 Add-ons API を通じて拡張機能一覧をスクレイピングし、実際のインストールまで実施
  • データセットは Hugging Face で公開され、誰でもアクセス可能
  • 複数回の試行の末に 84,194 個の拡張機能のインストールに成功、ただしブラウザーは事実上使用不能
  • 実験により、拡張機能エコシステムの規模、品質、悪性拡張機能、スパム、PUA(潜在的に不要なアプリ) などが明らかになった

Firefox 拡張機能のスクレイピング

  • Mozilla の addons-server API には認証なしでアクセスでき、search エンドポイントで拡張機能一覧をページ単位で取得可能
  • デフォルトの並び順(recommended,users)では約 30,000 件しか取得できないため、created, rating, hotness, updated など複数のソート条件を組み合わせて取りこぼしを補完
  • exclude_addons パラメータを活用して、600 ページ以降の拡張機能も追加収集
  • カテゴリーごとの並列リクエストにより 合計 84,235 個のユニークな拡張機能を確保、平均サイズは 584.9KB、総容量は 49.3GB
  • 最終データセットは Hugging Face にアップロードされ公開済み
  • 2026 年 4 月 11 日の更新では、created__gte, created__lte フィルターを用いて 正確かつ効率的な完全スクレイピング を実現

Firefox 拡張機能の分析

  • 最大の拡張機能dmitlichess(196.3MB)で、2,000 個以上の音声ファイルを含む
    • 上位 10 件の拡張機能の大半は、AI モデル、Unity アプリ、画像リソース などの大容量コンテンツを含む
  • 最小の拡張機能theTabs-saver(7.5KB)で、コードなし
  • 最低評価の拡張機能Tab Stack for Firefox
  • 最古の拡張機能Web Developer
  • スクリーンショット数が最多の拡張機能RDS Bar(54 枚)
  • 最も多くの権限を要求する拡張機能FalscheLaden(3,695 件の権限要求)、次いで Google Dark Theme(2,675 件)
  • 最も多くの拡張機能を配布した開発者Dr. B(84 個の拡張機能)で、大半に README があり、アイコンはない
  • フィッシングと悪性拡張機能

    • データセット内で 暗号資産ウォレットを狙うフィッシング拡張機能 が多数見つかった
      • 例: “Іron Wаllеt” はインストールから 3 秒後に NocoDB から URL を受け取り、フィッシングページへ遷移
      • 一部の拡張機能はシードフレーズの入力を求め、サーバーへ送信していた
    • 報告の翌日、Mozilla によりその大半が削除された
    • 書き込み権限を持つ API キーの事例も見つかり、直接データ削除を実施
  • SEO スパム拡張機能

    • 拡張機能ページの “Homepage” リンクが 被リンク目的で悪用 されていた
    • Typo Sniper, Tab Fortune Teller などの AI 生成拡張機能 がカジノサイトへ誘導
    • “Code Injector” 系の拡張機能が多数存在し、同一のコード構造とランダムなドメインを使用
    • その大半が 2025 年に作成されたことが確認された
  • PUA(潜在的に不要なアプリ)拡張機能

    • “Custom Web Search” パターンを持つ拡張機能が 20 種類以上あり、総ユーザー数は 70 万人超
    • いずれも同一の構造とドメインを持ち、“Innover Online Group Ltd” と明記
    • Mozilla はその一部(115,000 ユーザーを保有)を無効化
    • Yahoo 提携コード safeplexsearch を使用し、Firefox 専用版も存在
    • 類似企業 Atom Apps も同様の方式で拡張機能を配布し、1 日あたり計 22 万ユーザーを抱える
  • 統計要約

    • 34.3% の拡張機能は 1 日のユーザー数が 0 人
      • 10 人以上のユーザーあり: 25.1%、100 人以上: 10.6%、1,000 人以上: 3.2%、10,000 人以上: 0.7%
    • 76.7% がオープンソース(SPDX ライセンス基準)
    • 23% は記事執筆後に作成された拡張機能
      • そのうち 19% はユーザー・レビュー・アイコン・ダウンロードがすべて存在しない
    • 2.4% が有料拡張機能で、そのうち 38.1% はオープンソース

すべての拡張機能をインストールする試み

  • 各拡張機能の .xpi ファイルをプロファイルフォルダーに GUID 名で保存し、extensions.json を編集
  • addonStartup.json.lz4 を削除し、extensions.json を操作して自動有効化
  • 試行 0: 65,335 個(Windows VM)

    • Enterprise Policy 方式でインストールを試みたが、メモリ不足とシステム停止 が発生
  • 試行 1: 約 1,000 個

    • 直接ダウンロードして手動配置し、インストール成功
    • 一部の拡張機能は すべてのテキストを特定の文字列に変更
    • 多数のセキュリティ拡張機能により、ドメイン遮断や警告ポップアップ が頻発
  • 試行 2: 65,335 個

    • addonStartup.json.lz4 の削除漏れにより、実際に有効化されたのは 1,000 個程度
    • about:addons の閲覧中に Firefox が フリーズし、再起動不能
  • 試行 3: 65,335 個(Mac)

    • 並列ダウンロード時に速度が低下し、合計 6 時間を要した
    • Firefox 起動時に 応答なしextensions.json のサイズは 144MB
    • ディスク書き込み量は 400GB 超 に達した
  • 試行 4〜10: 1,000〜6,000 個

    • 3,000 個までは Web ページの読み込みが可能
    • 4,000 個を超えると すべてのサイトが遮断 され、6,000 個では about:addons だけが読み込み可能
  • 試行 11: 84,194 個(6 か月後)

    • 16〜24GB RAM 環境で 仮想マシン(VM) を使用
    • ダウンロードに 1 時間 43 分、いくつかの拡張機能は Defender に検出 された
    • Firefox 起動時に extensions.json189MB まで増加し、39 分後に強制終了
    • その後 enable.js を実行して再試行
    • Launch 1〜3 の結果

      • Launch 1: レンダリングされないまま 39 分待機して中断
      • Launch 2: ブラウザー表示後 3 分以内にクラッシュ
      • Launch 3: 長時間待機の後、安定化に成功 し、84,194 個の拡張機能の読み込みを確認

すべての拡張機能を使うテスト

  • about:addons

    • 設定ページの読み込みに失敗、インデックスページは 6 時間後に完全ロード
    • メモリ使用量は 27〜37 GiB を維持
    • アイコンは表示されず、応答遅延も深刻
  • about:support

    • 合計 84,205 個の拡張機能が表示されたが、内蔵拡張機能を含む
    • 実際にインストールされた外部拡張機能は 84,194 個 と確認
  • about:preferences

    • New Tab オプションが多数存在し、競合とクラッシュ が発生
  • New Tab

    • Firefox Home だけが正常に読み込まれ、他の拡張機能はすべて失敗
  • moz-extension

    • buyPal 拡張機能が自動でタブを置き換え、唯一正常に読み込まれた
    • その後 Firefox は 再びクラッシュ
  • example.com

    • 24 時間待ってもページは読み込まれず、遮断系の拡張機能が多数存在 すると推定
  • about:telemetry

    • Environment Data をクリックすると 即座にクラッシュ

実用性の評価

  • 不可能
  • Firefox は 84,000 個の拡張機能をインストールした状態では事実上動作不能

追加検証の提案

  • about:addons の読み込みに 6 時間かかる原因と、example.com が読み込まれない原因の分析
  • .xpi をサポートする Kagi Orion, GNOME Web など他ブラウザーでの実験
  • テーマ(50 万件以上)やユーザースクリプト・スタイルをすべてインストールする実験
  • Chrome Web Store の全拡張機能インストールは 規模的に不可能

脚注の要約

  • 合計 8 個の拡張機能はスクレイピング漏れまたは削除済み
  • 2025 年 9 月作成の初期版以降、2026 年 4 月に数値を更新
  • “Foreshadowing” は文学的な伏線表現として言及されている

1件のコメント

 
GN⁺ 18 일 전
Hacker News のコメント
  • 「Middle Finger Emoji Sticker」賞をもらったとのこと
    その経緯を短くまとめてブログに投稿していた
    原文はこちらで読める

  • 昔のInternet Explorer ツールバー戦争を思い出した
    ネットカフェごとに Ask.com、Google、Yahoo、後には Bing のツールバーが最低 2 つずつ入っていた記憶がある

  • なぜこんなに時間がかかったのか調べてみた
    13 年前は extensions.json ではなく extensions.sqlite だった
    今は 20ms ごとにファイル全体をシリアライズして書き戻す構造なので、15 個の拡張なら問題ないが、84,194 個だと厳しい
    このデバウンス値をどう決めたのか気になる。どの拡張が 1 秒に何度も extensions.json を書き換えるのか疑問だ

  • 実際のページはまともに 1 つも開けないのに、記事そのものは本当に面白く読めた
    「crash reporting を有効にした」というくだりでかなり笑った。Mozilla チームからするとホラー話のようなものだろう

    • Firefox のcrash reportは公開されている
      ただし筆者が上げたものは見つけられなかった。crash-stats.mozilla.orgで見られる
      プロファイルが残っていれば、このガイドから crash ID を見つけられる
  • 記事が本当に奇怪でありながら素晴らしい
    とくに about: ページのどれかでパフォーマンスバグを見つけていたのが印象的だった。ぜひ後続調査が必要だ

  • 拡張一覧はサイトマップとしても見られる
    Firefox Add-ons sitemap,
    Chrome Web Store sitemap,
    Edge sitemap も参考になる

  • 動画があまりに面白くて涙が出た
    コンピュータをほとんど知らない高齢者のウェブ閲覧はこんな感じかもしれない。これを Chrome でも誰かやってほしい

    • 筆者が 30 秒間連打していた偽の拡張ボタンが、実は拡張が作ったボタンだったと気づくところが最高に面白かった。しかも 3 つもあった
    • 個人的にいちばん笑ったのは金属パイプの効果音だった。どの拡張があれを入れたのか気になる
    • これは本当に伝説級のバグレポートになりそうだ
    • 何も知らない人がすべてのポップアップで「はい/同意/確認」を押せば、こういう結果になるしかない
    • 動画がどこにあるのかわからない。スクロールしてみたが静止画像しか見当たらなかった
  • 「この service mesh はうちの用途には過剰設計だが、broker は 84,205 個のマイクロサービスには遅すぎる」
    この終わりのない緊張感があまりにも馴染み深い

  • すべての NPM パッケージに依存していた伝説の NPM パッケージを思い出した
    関連記事を見ると本当に笑える

  • 「これでほぼすべての拡張をインストールしたら、以前やっていたことが全部ばかばかしく見える」という言葉に深く共感した
    自分も似たような虚しさを感じた