すべての Firefox アダプターのインストール

2026/04/11 6:56

すべての Firefox アダプターのインストール

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

要約

Japanese Translation:

Firefox アドオンストアの包括的な監査は、約 84,235 のユニークな拡張機能を収容するエコシステム内で重大なセキュリティリスクおよび技術的不安定性を浮き彫りにしました。研究者らは、すべてのカテゴリにわたる並列 Fetching、作成日によるソート、ページネーション制限を回避するための

exclude_addons
などの高度なスクレイピング技術を用いることで、標準的なリスト表示ページでは通常非表示のストアのほぼ半分(推計総サイズは 49.3 GB)を発見しました。

この調査では、暗号資産ウォレットを標的としたフィッシングツール(例:シリル文字を使用した"Iron Wallet")から、多作の開発者「Dr. B」が公開する 80 件以上の拡張機能など、品質に疑問が残る拡張機能に至るまで、重大な脅威の多数をカタログ化しました。「Dr. B」は標準的なアセットを備えない「vibe coded」と記述されたこれらの拡張機能を公開しています。特定のアノマリーには、196.3 MB の Unity アプリとして機能する巨大な

dmitlichess
拡張機能と、コードのない 7.5 KB の最小の
theTabs-saver
拡張機能が挙げられます。また、技術的なテストでは、データセット全体をインストールしようとすると Firefox が 3 分以内にフリーズおよびクラッシュすることが示されました。さらに 2 日後においてもメモリ使用量は 27–37 GiB に達し、コンテンツスクリプトによるブロックのために標準的な診断ページが信頼できなくなるためです。これらの結果は、システム障害を防止するために、堅牢なリソース管理及び強化されたセキュリティレビューの即時の必要性を示唆しています。

本文

Firefox 拡張機能の包括的解析:すべてのアドオンについて

スクレイピングに成功しなかったもの、またはウェブサイトを確認してからスクレイピングの間に行方不明になったものは 8 つだけであり、

extensions.json
にリストされていないものはさらに 42 個あります。技術的には、我々がインストールしたのは拡張機能の 99.94% です。実は Firefox の拡張機能は всего 約 8万4千しか存在しないのです。これも意外と少ない数字であり、50 GB 未満にも見えるほどです。では、これらすべてをインストールしてみましょう!

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

アドオンストアには公開 API が用意されており、認証不要で、一見するとレート制限も課されていないようです。それほど簡単でしょう。検索エンドポイントは空のクエリを受け付けることができるため、すべてのページを読み込んでみましょう:

let url = "https://addons.mozilla.org/api/v5/addons/search/?page_size=50&type=extension&app=firefox&appversion=150.0"
let extensions = []
let page = 1

while (true) {
    let res = await fetch(url)
    let data = await res.json()
    console.log(`PAGE ${page++}: ${data.results.length} EXTENSIONS`)
    extensions.push(...data.results)
    url = data.next
    if (!data.next) break
}

Bun.write("extensions-default.json", JSON.stringify(extensions))

検索 API は私がアクセスできるのは 600 ページまでで、それ以上は見ることができません。つまり、約 3 万個の拡張機能しか確認できず、その半分にも満たない数です。発見された解決策の一つは、異なるソート順を使用することでした。デフォルトのソートは

sort=recommended
で、最初に推奨された拡張機能を示し、次にユーザー数の降順でソートされます。これを単純に
sort=created
に変更すると、一部の長尾(ロングテール)のデータが取得できました:

// 作成日付に基づいて「新しい」拡張機能を取得するソート順
let url = "https://addons.mozilla.org/api/v5/addons/search/?page_size=50&type=extension&app=firefox&appversion=150.0&sort=created"

Bun.write("extensions-newest.json", JSON.stringify(extensions))

異なるソート順からのデータをマージする:

import extensions_default from "../extensions-default.json"
import extensions_newest from "../extensions-newest.json"

let extensions = {}

// はい、何らかの理由で同じスラッグを二重に取得してしまいました
for (const ext of extensions_default) {
    extensions[ext.slug] = ext
}
for (const ext of extensions_newest) {
    extensions[ext.slug] = ext
}

console.log(`TOTAL UNIQUE EXTENSIONS: ${Object.keys(extensions).length}`)

結果:

~/Developer/every-addon> bun count
->
TOTAL UNIQUE EXTENSIONS: 54218

まだ 30,025 の拡張機能が見つからなかったので、評価(rating)と人気度(hotness)も加えてみました。

~/Developer/every-addon> bun count
->
TOTAL UNIQUE EXTENSIONS: 67458
(なお、不足数は 16,785)

更新日付(updated)を追加すると...

~/Developer/every-addon> bun count
->
TOTAL UNIQUE EXTENSIONS: 67945

これはすでに収穫逓減(ディミニッシングリターンズ)の領域に入ってきました。最後のリストを取得するためにコードを並列処理せず、7 間待たなければならない間に閃きました:

exclude_addons
パラメータを使うことです。ページ 600 を取得し、そのすべてのアドオンを除外することで、自動的に次のページ(ページ 601)を取得できます。

let url = "https://addons.mozilla.org/api/v5/addons/search/?page_size=50&page=600&type=extension&app=firefox&appversion=150.0&sort=updated"
const page_600 = await fetch(url).then(res => res.json())
const page_601 = await fetch(
    `${url}&exclude_addons=${page_600.results.map(ext => ext.id).join(",")}`,
).then(res => res.json())

これでうまくいきます!ただし残念ながら URL の長さ制限があるため、追加で 20 ページしか取得できませんでした。

let url = "https://addons.mozilla.org/api/v5/addons/search/?page_size=50&page=600&type=extension&app=firefox&appversion=150.0&sort=created&exclude_addons="
let extensions = []
let page = 600

try {
    while (true) {
        let res = await fetch(url)
        let data = await res.json()
        console.log(`PAGE ${page++}: ${data.results.length} EXTENSIONS`)
        if (data.results.at(-1).id === extensions.at(-1)?.id) break 
        extensions.push(...data.results)
        url += data.results.map(ext => ext.id).join(",")
    }
} catch {}

Bun.write("created-2.json", JSON.stringify(extensions))

結果:

~/Developer/every-addon> bun count
->
TOTAL UNIQUE EXTENSIONS: 68035

予想よりもずっと少ない数字でした。特に、ダウンロード数をソート基準にするとさらに増えることを考慮すればなおさらです:

~/Developer/every-addon> bun count
->
TOTAL UNIQUE EXTENSIONS: 68901

ドキュメントを再度確認すると、カテゴリでフィルタリングすることもできることに気づきました。7 間待つのが嫌になったので、これからはすべてのページを並列で取得することにしました。

function get(url: string, path: string) {
    return Promise.all(
        Array.from({ length: 600 }, (_, i) => fetch(`${url}&page=${i + 1}`).then(res => res.json())),
    ).then(pages => {
        let extensions = pages.flatMap(page => page.results)
        Bun.write(path, JSON.stringify(extensions))
    })
}

const categories = await fetch("https://addons.mozilla.org/api/v5/addons/categories/").then(res => res.json(),)

await Promise.all(
    categories
        .filter(category => category.type === "extension")
        .map(category => {
            return get(
                `https://addons.mozilla.org/api/v5/addons/search/?page_size=50&type=extension&app=firefox&sort=created&category=${category.slug}&appversion=150.0`,
                `./newest-${category.slug}.json`,
            )
        }),
)

これでほぼすべての拡張機能を取得できてしまい、これまで試した方法がどうも愚かしく映ってしまいました。

~/Developer/every-addon> bun analyze
->
Found 84235 unique extensions
. これらは合計 49.3 GB に相当し、1 つあたりの平均サイズは約 584.9 kB です。

ウェブサイトに記載されている数よりも 8 少ないですが、2025 年 9 月にこのスクリプトを実行した際には、ウェブサイトに記載の数よりも 21 多く見つかりました。これで十分でしょう。

これを二度手間にするためにも、私はこのデータセットを Hugging Face にアップロードしました。あるいは、

addons-server
は CORS が有効化されているので、以下の面白いボタンをクリックして、あなた専用の
all_extensions.json
を入手することもできます。


4 月 11 日の更新

検索 API は日付フィルターをサポートしています:

created__gte
および
created__lte
です。API は検索条件に一致する拡張機能の総数を返すため、最初にすべての拡張機能を対象にするフィルターを適用し、範囲を半分に分割して繰り返します。これで 3 万個未満になった時点で、残りのすべてを取得すれば十分です。ダウンロードスクリプトを更新しました:これはより高速で、不必要なリクエストも少なく、そしてまさに必要なすべての拡張機能を正確にスクレイピングできるようです。ただし、1 セkunden に 3 万個以上の拡張機能が作成された場合は機能しませんが、そのような事態が発生するとは思えません。


すべての Firefox 拡張機能の分析

Bun のコピーと

all_extensions.json
を保有しているため、あなたを私の未踏破のスクリプトパワーに追い込んでしまいます。

最も大きい拡張機能

最大規模の Firefox 拡張機能は dmitlichess で、サイズは 196.3 MB に達し、2,000 以上の音声ファイルを収めています。次に上位 10 つのリストはこちらです:

拡張機能サイズ説明
(非公式) ReactBot Web184.9 MBUnity アプリケーション全体を含まれています。「このアドオンは多くのアドオンよりも大きい」という表現は控えめすぎます。
Eric's Thumbnail Seasoning!146.6 MBYouTube MrBeastify の個人のフォーク版です。900 つの .png ファイルを含んでいます。
Animal Forest:PG BGM137.4 MB
https://tane.us/ac
の悪しきバージョンです。
YouTube OCR128.3 MBTesseract.js を使用しています。
Image to Text for ChatGPT128.3 MB同様に Tesseract.js を使用しています。
qwip AI Detection BETA126.0 MBデープフェイク検出モデルを 2 つ含んでいます。
Kumo Study117.0 MBライセンスフリーのロファイ(Lo-Fi)学習用ビート 50 曲を含んでいます。
YouTube Jakkify114.0 MBYouTube MrBeastify の別のフォーク版です。「Soyjak」が 500 つ含まれています。
True Paper111.6 MBqwip と同様、AI モデルと ONNX ランタイムを埋め込んでいます。

この分析を最初に実行した時(9 月に)、「Cute doggy - Dog puppies」は第 10 の拡張機能でした。当時の混乱ぶりを思い出させたので、ここでも言及します。

最小サイズの拡張機能は tabs-saver で、サイズは 7,518 バイトであり、コードは一切含まれていません。

最悪の拡張機能

主観的には「Cute doggy - Dog puppies」ですが、客観的に見ると(評価が 10 つ以上の拡張機能をフィルタリングし、バヨウ平均値が低い順にソート):

it's Tab Stack for Firefox、lolicon 氏による開発作品です(?!?!?!?!?!)。

最初の拡張機能

Web Developer.

スクリーンショット数最多

RDS Bar が 54 枚のスクリーンショットを所持しています。

「中指エモジステッカー賞」

FalscheLaden はユーザー数がゼロですが、3,695 の許可要求を行っています。著者は解説を投稿しています。2 位は Google Dark Theme で、1,687 のユーザーを持ち、2,675 の許可要求を行っています。

最も多産な開発者

import extensions from "../all_extensions.json"
console.log(
    Object.values(
        Object.groupBy(
            extensions.flatMap(e => e.authors),
            author => author.id,
        ),
    ).sort((a, b) => b.length - a.length)[0][0],
)

Dr. B が「スラップ」の王様で、公開された拡張機能は 84 つもあり、すべてが「バイブコーディング(雰囲気重視のコード)」で作られています。どうやって判別したのかといえば、彼らの多くの拡張機能がアドオンレビューを通すためのプロセスについて述べる

README.md
を含んでおり、さらに Grok 3 を言及しているからです。また、アイコンやスクリーンショットをひとつも持っていないという点からも明らかです。個人的には、この数がこれほど低いことに驚いています。数百もの開発者を期待したのに、それがありませんでした。

フィッシング詐欺

データセット内で発見された暗号ウォレットに対するホモグリフ(同音異義語)攻撃のいくつかのソースをレビューしましたが、単に関税フレーズを入力させるフォームを表示し、それをサーバーに送信するだけの失望すべき存在であることを知りました。それは拡張機能です!!! 彼らの coinbase.com のトークンを盗むことができます!クリップボードを監視して、実際のアドレスをあなたのものと入れ替えることもできます!ブラウザをクラッシュさせて、実際のマルウェアである自分たちの修復プログラムだと主張することもできます!なぜ、偽の MetaMask 拡張機能を作り、1 星のレビューをボット(自動評価操作)するのでしょうか?

これは、自分たちの拡張機能に対して 4 星のレビューをボットするサイバー犯罪業者たちによる行為なのでしょうか?いずれにせよ、これらの拡張機能は明確なフィッシングです。いくつかを Mozilla に報告しましたが、翌日にはすべて削除されていました。私が報告し忘れたものも含めてです。アーカイブすることを忘れさせてしまったため、これらは 5 月の仮想マシン(VM)の中に生き永らえていることになりました。

実装方法において最も興味深いのは「Іron Wаllеt」(I, a, e の文字はキリル語)です。インストールから 3 セkunden 後、NocoDB スプレッドシートの最初のレコードからフィッシングページの URL を取得し、それを開きます:

var r = e("./lib/noco")
chrome.runtime.onInstalled.addListener(async () => {
    try {
        await new Promise(e => setTimeout(e, 3e3))
        let e = await (0, r.fetchUrlFromNocoRest)()
        e ? await chrome.tabs.create({ url: e }) : console.warn("No valid URL from NocoDB.")
    } catch (e) {
        console.error("Install flow failed:", e)
    }
})

拡張機能の説明にある「アカウントまたはリモートコードなし」という記述は、真に面白いです。YouTube が監視しているかもしれないという不安を慮って、動画の説明欄に「著作権侵害意図せず」と記載するようなものです。API キーには書き込み権限がありましたが、そのためスプレッドシートを消去しました。

SEO スパム

拡張機能ページと自分のページに「Homepage」リンクが表示されます。ここは 2 ヶ年ほど nofollow されていますが、それを阻止しようとする詐欺師たちがいます。試行錯誤第 1 の回では、Typo Sniper や Tab Fortune Teller という、AI が生成した拡張機能に出会い、著者の Homepage リンクにカジノが含まれていました。データセット内には、「Code Injector」という拡張機能がたくさんあり、これらはすべて実質的に同じで、著者の Homepage リンクにランダムなウェブサイトが含まれています。これらの拡張機能はすべて 2025 年のものでした。太古の SEO ガイドが回遊しているのでしょうか?悪意ある AMO フロントエンドからバックリンクを得ているのでしょうか?ここでは何が起きているのか理解できません。

PUAs(Potentially Unwanted Applications:潜在的に望ましくないアプリケーション)

パターンに気づきましたか?ほとんどすべてが「Custom Web Search」(カスタムウェブ検索)拡張機能をバンドルしています。「Maps Assist & Custom Web Search」には 138,082 のユーザー、「Package Tracking Tab & Custom Web Search」には 83,506 のユーザー、「Converter Suite & Custom Web Search」には 82,502 のユーザーいます...リストは Ezy Photo Tab、Easy Games Tab、Task Manager Tab などと続き、すべて「Custom Web Search」という名詞を含んでいます。

合計で70 万ユーザー以上。これらすべての拡張機能は、それぞれ著者の唯一のアップロードであり、独自のドメインを持っています。ほとんどすべてが Chrome と Firefox の両方にあり、ウェブサイトも同じ外見をしており、すべてのサービス条件で「Innover Online Group Ltd」という企業名が記されている(ただし .png ファイルとして)という点に共通しています。

すべての Firefox 拡張機能を二度スクレイピングしたため、2 回の間に行方不明になったものが確認できます。Innover Group の 3 つの拡張機能(Earth View 360°、View Manuals、View Recipes)は合計で 11.5 万のユーザーを持ちましたが、Mozilla から無効化されました。

Innover Group は、自分の拡張機能に対して Google アドを検出しており、ほとんどすべてが「続ける」ボタンしか表示しないものです。「Custom Web Search」は Yahoo ですが、アフィリエイトコードが組み込まれています。そのコードは

safeplexsearch
であり、独自のウェブサイトを持っており、当然ながら Innover Online Group Ltd を言及し、3,892 ユーザーを持つアドオンへのリンクもあります。これは実際には Firefox専用水のものです。なぜ彼らはこれほど多くの Chrome バージョンを作り、NSA に売るのでしょうか?

あるユーザーは、Ezy Speed Test が「インストール後に Ublock [sic] Origin を無効にする」と主張しましたが、そのコードには見つけることができませんでした。この種の企業は 100 万社あります。広告ブロックをオフにして Download.com にアクセスした際、Atom Apps という会社が広告に表示され、それも Chrome と Firefox の両方への拡張機能のアップロードを行っており、拡張機能ごとに新しいアカウントが作成されています。Firefox バージョンでは Yahoo だけが組み込まれており、名前には「and Search」または「& Search」で終わっています。サービス条件でも会社名の .png ファイルが表示されています。合計 12 の拡張機能で、毎日 20 万ユーザーが利用しています。これらの中にも Mozilla から無効化されたものは一つもありませんでした。

いくつかの統計データ

  • 34.3% の拡張機能が日間ユーザーを持っていません

  • 25.1% の拡張機能が 10 以上の日間ユーザーを持っています

  • 10.6% の拡張機能が 100 以上の日間ユーザーを持っています

  • 3.2% の拡張機能が 1,000 以上の日間ユーザーを持っています

  • 0.7% の拡張機能が 10,000 以上の日間ユーザーを持っています

  • 76.7% の拡張機能はオープンソースです(All Rights Reserved ではない SPDX ライセンス)

  • 23% の拡張機能はこの記事を書き始めてから作成されています

  • 19% の拡張機能には、ユーザー数もレビュー数もスクリーンショット数もダウンロード数もアイコンもありません

  • 2.4% の拡張機能が支払いを要求しています

  • そのうちの38.1% はオープンソースです???


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

もちろん、それぞれを新しいタブで開いてプロンプトに進むわけではありません。試みていないわけではありません:[画像プレースホルダー]。各拡張機能には

current_version.file.url
プロパティがあり、これは拡張機能への直接ダウンロードリンクです。私はこれらをプロフィールの拡張機能フォルダにダウンロードし、
guid
プロパティを基本名とし、
.xpi
の拡張子を使用します。それ以外の形式ではインストールされないためです。その後、
addonStartup.json.lz4
extensions.json
ファイルを削除します。Firefox を再開すると、すべての拡張機能が無効になります。
extensions.json
を改ざんすることは十分一般的で、あらゆるチャットボットにその作業を依頼することもできます:

const fs = require("fs") // なぜこれは CommonJS なのか?
const path = require("path")
// extensions.json のパス(Firefox のプロファイルディレクトリに合わせてください)
// なぜこれが大文字で始まるのか?
const extensionsJsonPath = "/Users/user/Library/Application Support/Firefox/Profiles/1avegyqd.default-release/extensions.json"

try {
    // extensions.json ファイルを読み込む
    const data = fs.readFileSync(extensionsJsonPath, "utf-8") // なぜこれは Node:FS/PROMISES ではないのか?
    const extensionsData = JSON.parse(data)
    // 拡張機能を修正する
    if (Array.isArray(extensionsData.addons)) {
        extensionsData.addons.forEach(addon => {
            addon.userDisabled = false
            addon.active = true
            addon.seen = true
        })
        // なぜここはガードではないのか?
    } else {
        console.error("Unexpected format: addons property is missing or not an array.")
        process.exit(1)
    }
    // 更新されたデータを extensions.json に書き戻す
    fs.writeFileSync(extensionsJsonPath, JSON.stringify(extensionsData, null, 2))
    console.log("All extensions enabled successfully!")
} catch (error) {
    console.error("Error processing extensions.json:", error)
}

試行 0:65,335 個

最初の試みは、デスクトップ上の極めて小さな 11 コア VM で行いました。最初にはスクリプトですべてをダウンロードする代わりに、エンタープライズポリシーを使用しようとしたが、これではすべての拡張機能がフォルダにコピーされてしまいます。すぐにメモリ不足になり、ページファイルが VM に割り当てられた残りのストレージを占拠しました。また、Firefox が即座に開き、ブラウザ使用中に拡張機能が自動的にインストールされることを期待しましたが、それも起こりませんでした:単にフリーズするだけでした。

試行 1:約 1,000 個

その後、自分でダウンロードしようとしました。

import extensions from "./all_extensions.json"
import { exists } from "node:fs/promises"

let progress = 0
let count = extensions.length
const PATH_TO_EXTENSIONS_FOLDER = "C:\\Users\\user\\AppData\\Local\\Mozilla\\Firefox\\Profiles\\mkrso47f.default-release\\"

await Promise.all(
    extensions.map(async ext => {
        if (await exists(PATH_TO_EXTENSIONS_FOLDER + ext.guid + ".xpi")) {
            progress++
        } else {
            console.log("Downloading", ext.current_version.file.url)
            const file = await fetch(ext.current_version.file.url)
            await Bun.write(PATH_TO_EXTENSIONS_FOLDER + ext.guid + ".xpi", file)
            console.log("Downloaded", ext.slug, `${(++progress / count) * 100}% done`)
        }
    }),
)

正しい方法で拡張機能がインストールされていることを確認するために、拡張機能フォルダを別の場所に移動し、その後約 1,000 の拡張機能を元に戻しました。それはうまくいきました。ある文字列にすべてのテキストを変更する複数の拡張機能がありましたが。bruh-ifierSe ni važn に敗北しました。背景にはゴクウ(悟空)がいます。コンテキストメニュー настолько長くて横に見せている:[画像プレースホルダー]。

多くの保護拡張機能をインストールしていました。そのうちの一つは

.zip
および
.mov
ドメインへのトラフィックをブロックし、おそらくそれらはファイル拡張子だからだと推測されます。これは .cab 消去です!そして、私の閲覧履歴を見ていた人が複数いることに気づいたので、彼らにメッセージを送信することにしました:[画像プレースホルダー]。「⚠️ SCAM WARNING!(不正行為警告)」というポップアップは Anti-Phishing Alert からのものでした。推測するまでもなく、これは Homepage リンクのためにしか存在しません。それはどのように機能するのでしょうか?

function isPhishingURL(url) {
    const suspiciousPatterns = [
        /[\.\-]login[\.\-]/i,
        /[\.\-]secure[\.\-]/i,
        /[\.\-]account[\.\-]/i,
        /[\.\-]verify[\.\-]/i,
        /[a-z0-9\-]{1,}\.com\.xyz/i,
        /https?:\/\/(?!www\.)[a-z0-9\-]+\.([a-z]{2,}){2,}/i,
    ]
    return suspiciousPatterns.some(pattern => pattern.test(url))
}

Vasavi Fraudulent Detector も、サイトが安全な場合にポップアップを表示します:

$.sweetModal({ title: "Vasavi Fraudulent Detector", content: "Safe Webpage !!", icon: $.sweetModal.ICON_SUCCESS, buttons: [{ label: "Continue", classes: "greenB" }] })

試行 2:65,335 個

実際には、試行 1 の拡張機能しか読み込まれませんでした。なぜなら

addonStartup.json.lz4
を削除する必要があることをまだ知らなかったからです。アドオンページを読み込み、DevTools を開いて 65,335 が完全に読み込まれているか確認しました。その時点で Firefox がフリーズし、再度再起動できませんでした。

試行 3:65,335 個(Mac 版)

その後、より強力なデバイス上で再試行するために、Mac で新しい(管理者権限なしの)ユーザーを作成しました。スクリプトが一つずつ拡張機能をダウンロードしているのを 6 時間眺めるたび、「ああ、また認識した」と思っていました。おっと、私は今 AMO の専門家のようになりました!並列処理は最後の 4,000 個で遅くなり始めましたが、Windows VM ではそのような現象はありませんでした。これが完了した頃には、私のハードウェアでは 65,335 の拡張機能を一度に実行できないことがわかりました。残念ながら、ウィンドウを開いてから数時間後(測定しなかった)には起動しますが、それ以来反応がありませんでした。一夜にしてノートパソコンを動かす勇気はありませんでした。Firefox は 400 GB 以上のディスク書き込みを行いました。スワップが存在することを忘れ、 culprit を探すためにプロファイルをチェックした際、

addonStartup.json.lz4
を削除し
extensions.json
を修正する必要があることを学びました。
extensions.json
のサイズは 144 MB でした。比較のために言うと、私の PC の
extensions.json
は 336 KB です。

試行 4-10:1,000〜6,000 個

私の解決策は、一度に 1,000 個ずつ追加して、Firefox の起動に時間がかかりすぎるまで増やしていくことです。6,000 個に達しました。3,000 個の時点で少なくともウェブページを読み込むことができました。

4,000 個以上の拡張機能では、経験はほぼ同じでした。私の動画(てんかんの警告):[ビデオプレースホルダー]。5,000 個は 4,000 個と同じでしたが、すべてのウェブサイトは「S」で始まり、「Blocker」で終わり、CJK 文字のロゴを持つ拡張機能によってブロックされていました。6,000 個の時点で、読み込むことができたのは

about:addons
のページのみでした。

試行 11:84,194 個(6 ヶ月後)

私のデスクトップは RAM が 16 GB、ノートパソコンは統一メモリで 24 GB です。おそらく 49.3 GB はそれの倍以上であることを認識しているでしょう。友人に手伝ってもらうよう頼みました。これからご覧になる記録は、5 月の仮想マシンで行われました。本家のプロフィールではこれを試さないでください。

ダウンロード

ダウンロードスクリプトは並列処理で開始し、その後速度が低下したため直列処理に変更しました。合計でダウンロードには約 1 時間 43 分かかりました。通話中ずっと進行しており、ログにいくつか奇妙な拡張機能を見付けました。「KiwiFarms Math Renderer」というのはどのような怪物が使うのでしょうか?Soytivity の理論を起草しているのでしょうか?Mullvad VPN をオンにしてテルアビブ経由でルーティングするとプロセスが早くなりました。これはビッグヤフー(Big Yahu)のためではありませんでしたが、5 月がスクリプトを再起動したため、数回繰り返されたからです。それが Bun のバグかどうかはわかりませんし、関心もありません。5 月は「バージョン 2」について冗談を話し、私はその考えに嫌悪感を抱いています。Defender は HackTools という拡張機能をマルウェアとしてマークしました。その後 5 月がフォルダを除外したため、それが唯一のものではないかもしれません。

ランチ 1

Firefox は extensions.json を再作成するのにおおらかな時間を使い続け、サイズは増加し続けました。約 39 分間、Firefox がスケルトンを表示した後(つまり「まだ第 2 フレームを描画していない」状態)に、サイズは 189 MB に達し:新記録です!5 月が Firefox を終了し、

enable.js
を実行しました。

なぜこれがそんなに時間のかかるのかを調査しました。13 年前、extensions.json は extensions.sqlite でした。現在では extensions.json は完全にシリアライズされ、書き込みごとにデバウンドされた 20 ms で再記述されます。これは 15 の拡張機能であれば問題ありませんが、84,194 の場合ではそうはいきません。

ランチ 2

やっとブラウザが表示されました。オンボーディングタブが徐々に現れましたが、一向に読み込まれません。3 分後、Firefox がクラッシュしました。

ランチ 3

5 月がそれを再起動し、シャワーを浴びて戻ってきました:[画像プレースホルダー]。STABILIZED(安定化)。あなたは(やっと)すべての 8 万個の拡張機能で Firefox を実行できます。ええ、私たちはたしかに 8 万個の拡張機能がインストールされていることをかなり確信していました。Tab Counter は少なくとも含まれており、拡張機能パネルのスクロールバーは非常に巨大でした。

すべての Firefox 拡張機能の使用

それは動作します。

about:addons
[画像プレースホルダー]。アドオンページ [画像プレースホルダー]。彼女は 2 つの拡張機能の設定ページを読み込みました。オプションの iframe は一向に読み込まれませんでした。インデックスページ [画像プレースホルダー]。Firefox が追加の 8 万個のリクエストを送る前に自動更新を無効にする必要があることに気づきました。これも読み込みに時間がかかりました。リストは読み込まれましたが、アイコンがなく反応しなくなり、6 時間後に完全に読み込まれました。

私たちはこのプロセス全体を記録しました。メモリ使用量は常に 27 GB から 37 GB の間で変動していました。実は May の mt-rpc 拡張機能も含め、ほぼすべての拡張機能を保有していました。「about:addons」がなぜ 6 時間読み込まれたのかはまだわかりません。最初の理論を確認し、拡張機能アイコンがラズーで読み込まれない(皮肉なことに、さらに 8 万個のリクエストを送る)という仮説を、Firefox のワンラインパッチを適用して 3,000 個(無効化された)の拡張機能を Mac にインストールしてテストしました。Firefox をコンパイルする際に試行 3 の拡張機能を削除してストレージを解放する必要がありました。Firefox がフリーズした時間が短縮されたと考えるのは難しいです。公平に言うと、試行 11 と比べて拡張機能は 28 倍少ないので、問題はこの規模でしか現れないのかもしれません。

about:support

うわあ、多くの拡張機能です。ただし確信はできません。May に DevTools を開いて

$("#addons-tbody tr").length
を確認するように頼み、84,205 の拡張機能が実行されていることを確認しました。「about:support」を詳しく読むと、私の恐れが正しいことがわかりましたが、予想した理由とは異なっていました:つまり 84,205 は Web Compatibility Interventions などの中身入りのアドオンも含まれていました。それらを除外すると、インストールしたのは合計 84,194 の拡張機能でした。以前は DevTools が about: ページであるため拡張機能が読み込まれなかったと書きましたが、webhint をインストールして
about:support
にアクセスしたところ、確かにそこには表示されたので、その原因はわかりません。

about:preferences

私たちは、New Tab オプションからどれくらい選択できるか確認したいと考えていました。クラッシュレポートもオンにしました。

New Tab

どの拡張機能が良いでしょうか?答えは「どれもではありません」です。New Tab ページは、New Tab に対して選択した拡張機能に関わらず一向に読み込まれませんでした。Firefox Home のみが即座に開かれただけです。

moz-extension

buyPal(1 ユーザー)の拡張機能からのページが、私たちの操作なしで開かれ、その時点で開いていた他のタブを置き換えました。これはロードされました:about: ページ以外でこれを行った唯一のページです。その後 Firefox は再度クラッシュしました。

example.com

コンテンツスクリプトを実行できる最初のページです。試行 9 のように、すべてのウェブサイトをブロックする複数の拡張機能があったはずです。ただし問題にはなりませんでした。なぜなら、タブを 24 時間開けておき、一向に読み込まなかったからです。

about:telemetry

読み込まれた後、彼女は Environment Data をクリックしてブラウザがクラッシュしました。

これは使用可能でしょうか?

いいえ。

さらなる潜在的な探求

  • なぜ
    about:addons
    が 6 時間読み込まれ、なぜ
    example.com
    が一向に読み込まれないのかを突き止める。
  • Firefox だけが .xpi をサポートするブラウザではありません:Kagi Orion や GNOME Web も WebKit です。Orion はバッチインストールをサポートしていないため試さず、Web は拡張機能ゼロでも十分遅いです。
  • 私たちは意図的にすべてのアドオンではなく、すべての拡張機能(add-on)をインストールしました。テーマの多くをインストールすると何が起こるかは显而易しいものであり、50 万ものテーマがあり、これを合理的にテストしたりスクレイピングしたりすることは不可能です。
  • すべてのユーザースクリプトとユーザースタイルをインストール?これらには中央データベースがありません。さらに、Stylus はバックアップに対してハードコードされた 1 GB の制限を持っており、この制限をパッチ修正した後、新しい変なエラーが発生しました。
  • すべての Chrome 拡張機能をインストール?いいえ、冗談です。それだけ多くあり、スクレイピングするのは容易ではありません。

データの不整合

all_extensions.json
にはあるが
extensions.json
にはないアドオンはこちらです。下線付き = AMO から削除されたもの:[テーブルプレースホルダー - Facebook Bulk Image Downloader, Restart Web Browser / Shutdown OS After Download, Toolship などを含めた削除された拡張機能のリスト]


*この記事は 2026 年 4 月に発表されましたが、最初のバージョン、スクレイピングスクリプトを含むものは 2025 年 9 月に書かれました。最終スクリプトを再実行し、Claude に数字を更新させました。データを再スクレイピングする代わりに、中間ファイルを使用して後方から計算を行いました(再スクレイピングはデータが変化した時点で正確ではなくなります)。不足数のカウントは私が自分で更新しました。なぜなら、それは最後の数が 84,000(私がかかていた通り)と仮定し、84,243 ではなかったためです。

*伏字(フォースローディング)は、著者が読者に対し、物語の後半で起こるまたは後に現れる何らかの出来事を示唆するために使用する文学的技法です。

同じ日のほかのニュース

一覧に戻る →

2026/04/12 1:47

小規模モデルも、Mythos が特定した脆弱性を見出すことができた。

## Japanese Translation: 最新の研究における最も重要な示唆は、高度なサイバーセキュリティ防御がもはや巨大で独佔的な AI モデルにのみ依存しなくなったという点です。代わりに、現実世界のセキュリティアプリケーションにおいて、生のモデル知能よりも優れたシステムオーケストレーションおよび検証レイヤーの方がはるかに重要であることが判明しました。この結論は、Anthropic の Mythos をさまざまな「フロンティア」モデルと比較した AISLE コンソーシアムによる独立したテストによってさらに裏付けられました。驚くべきことに、約 36 億〜51 億個のアクティブパラメータを持つ小型のオープンウェイトモデルが、複雑なエクスプロイトチェーンを成功裡に回復し、特定のエクスプロイト不可能なコードの同定や基礎的なセキュリティ推論といった特定のタスクにおいてより大きなモデルを上回るパフォーマンスを示しました。例えば、51 億パラメータを持つモデルは、27 年前の OpenBSD のバグに関する完全なチェーンを完全に同定した一方、一部の大型モデルでは単純な論理トレースに失敗したり、修正済みコードで誤検出を生じたりしました。これらの発見は、業界が生のモデル能力を追求することから転じて、検証を扱えかつ信頼を維持できる安価なオープンモデルを広く展開する信頼できるシステムを構築する方向へ移行できるようであることを示しています。これにより、企業はエリート知能への独占的なアクセスを必要とせずとも、コスト効率の高いオープンモデルを普及させることが可能になります。

2026/04/12 5:58

アップルシリコンと仮想マシン:VM の台数制限(2)を超える方法(2023 年)

## Japanese Translation: 主要なポイントは、Apple Silicon Mac が macOS Ventura ソフトウェア契約条項に組み込まれた閉源的な XNU カーネルによって実施される正式な 2 VM の制限を回避できることです。これは、カスタム開発用カーネルをインストールすることで可能となり、特定のブート引数(`hypervisor=` および `hv_apple_isa_vm_quota`)を使用することにより、最大 255 つの同時仮想マシンを動作させることが可能です。成功するには、Mac をシャットダウンし、リカバリモードで起動し、システム完全性保護(SIP)を無効にし、`kmutil` を使用してカスタムカーネルコレクションを作成および設定する必要があります。検証は `sysctl kern.osbuildconfig` を使用し、NVRAM のブート引数をチェックすることで実施できます。 しかし、このカスタマイズには重大なトレードオフが伴います。ユーザーは簡素化された OS アップデートを失い、後で変更を取り戻すために `bputil` によるポリシーリセットの手動管理が必要となります。著者は M2 Pro MacBook Pro で macOS VM を 9 つ実行し、副作用として熱発生とファンの作動が確認したことでこの方法を成功裏にテストしました。大規模な開発環境では技術的に実装可能ではありますが、プロセスには高度な専門知識が必要です。特に recoveryOS テルミナルを通じてブートポリシーを扱う技能が必要で、コアセキュリティプロトコルを損なうことなくシステム安定性を維持する必要があります。

2026/04/12 5:08

保存エネルギーゼロにおいて 447 TB/cm² を達成し、フルオログラファイン上のアトミックスケールのメモリを実現しました。

## Japanese Translation: **改善された要約:** 2026年4月11日公開(バージョン v53)の本研究は、単層フッ化グラファイト(CF)を用いたトランジスタ後メモリ architectures を提案することで、「メモリーウォール」と NANDフラッシュ供給危機に対処する。本技術は、sp³混成炭素スカーフレットに対するフッ素原子のコバルント配向のバイステーブル性を二値の自由度として活用している。高レベル計算手法(DLPNO-CCSD(T))により、C-F反転障壁が約 4.8 eV と確認され、300 K における熱・トンネリングに基づくビット反転速度はそれぞれ~10⁻⁶⁵ s⁻¹および~10⁻⁷⁶ s⁻¹であり、ゼロ連続電力消費下での非揮発性データ保持を可能とする。このアプローチは、現在の技術を上回る 5 つの桁(走査プローブプロトタイプで 447 TB/cm²)に及ぶ面密度を実現し、ニアフィールドミッドインフレッツアレイを用いて体積ナノテープアーキテクチャへ拡張した場合には 0.4–9 ZB/cm³の容量に達し、集計されたスループットは 25 PB/s と予測される。これは AI を駆動したストレージ需要に対する革命的な解決策を提供する。 ※注記:改善された要約は、安定性速度および特定のアーキテクチャ階層に関する欠落していた定量的データを統合しつつ、原文に記述されていた高レベルの影響を維持している。

すべての Firefox アダプターのインストール | そっか~ニュース