Добавить в корзинуПозвонить
Найти в Дзене
Цифровая Переплавка

Что будет, если установить ВСЕ 84 тысячи расширений Firefox? Один разработчик проверил

Разработчик под ником Jack решил ответить на вопрос, который нормальному человеку в голову не придёт: а что, если взять и установить все расширения из каталога Firefox? Не десять, не сто — все 84 с лишним тысячи. Браузер запустился. Через шесть часов. И это далеко не самое интересное в этой истории. Первая проблема — просто получить список всех расширений. У Mozilla есть публичный API для каталога дополнений (addons.mozilla.org), причём без авторизации и, судя по всему, без rate-лимитов. Казалось бы, бери и качай. Но API отдаёт максимум 600 страниц по 50 результатов — это 30 тысяч, меньше половины. Jack нашёл обходной путь: он дёргал API с разными сортировками (created, rating, hotness, downloads, updated), а потом объединял результаты, убирая дубликаты. Когда и это не помогло добить до полного списка, он стал фильтровать по категориям — и параллелить запросы, потому что последовательный обход занимал по 7 минут на каждую сортировку. В итоге удалось собрать 84 235 уникальных расширений
Оглавление

Разработчик под ником Jack решил ответить на вопрос, который нормальному человеку в голову не придёт: а что, если взять и установить все расширения из каталога Firefox? Не десять, не сто — все 84 с лишним тысячи. Браузер запустился. Через шесть часов. И это далеко не самое интересное в этой истории.

Как вообще скачать 84 тысячи расширений

Первая проблема — просто получить список всех расширений. У Mozilla есть публичный API для каталога дополнений (addons.mozilla.org), причём без авторизации и, судя по всему, без rate-лимитов. Казалось бы, бери и качай. Но API отдаёт максимум 600 страниц по 50 результатов — это 30 тысяч, меньше половины.

Jack нашёл обходной путь: он дёргал API с разными сортировками (created, rating, hotness, downloads, updated), а потом объединял результаты, убирая дубликаты. Когда и это не помогло добить до полного списка, он стал фильтровать по категориям — и параллелить запросы, потому что последовательный обход занимал по 7 минут на каждую сортировку. В итоге удалось собрать 84 235 уникальных расширений общим весом около 49,3 ГБ(в среднем ~585 КБ на штуку). Датасет, кстати, выложен на Hugging Face — можете сами поковыряться.

Что скрывается в каталоге: аналитика перед установкой

Прежде чем ломать браузер, Jack проанализировал собранные данные. И вот тут начинается самое вкусное.

🏋️ Самое тяжёлое расширениеdmitlichess, 196 МБ. Внутри — больше 2000 аудиофайлов. На втором месте — «(Unofficial) ReactBot Web» на 185 МБ, которое представляет собой целое Unity-приложение, запакованное в браузерное расширение. Серьёзно.

🪶 Самое лёгкое — theTabs-saver, 7518 байт, и в нём вообще нет кода.

🎖️ Самый продуктивный разработчик — некий Dr. B, опубликовавший 84 расширения. Все сгенерированы через Grok 3 (об этом прямо написано в README внутри каждого .xpi), ни у одного нет иконки или скриншота. Королевство слопа.

🔐 Самое наглое расширение по правам доступа — FalscheLaden, которое запрашивает 3695 разрешений при нуле пользователей. Зачем? Вопрос риторический.

📊 Немного статистики по каталогу:

🔹 34,3% расширений не имеют ни одного активного пользователя в день

🔹 Только 3,2% расширений набрали больше 1000 ежедневных пользователей 🔹 76,7% расширений формально open source

🔹 23% расширений были созданы уже после того, как Jack начал писать статью (то есть за последние полгода)

🔹 19% — полные пустышки: ни пользователей, ни отзывов, ни скриншотов, ни иконки

Фишинг, спам и «потенциально нежелательные» расширения

Вот где эксперимент становится по-настоящему ценным с точки зрения безопасности.

🎣 Фишинг. Jack обнаружил несколько поддельных криптокошельков — классические гомоглифные атаки, когда в названии «MetaMask» или «Iron Wallet» латинские буквы подменяются кириллическими. Самое обидное (для злоумышленников): вместо того чтобы воровать токены сессий или подменять адреса в буфере обмена — а расширение ведь может это делать! — они просто показывают форму «введите seed-фразу». Ленивые фишеры. Один из них, «Іron Wаllеt» (с кириллическими і, а и е), после установки ждёт три секунды, а потом дёргает NocoDB-таблицу за URL фишинговой страницы. У API-ключа оказались права на запись, и Jack просто вайпнул таблицу. Красота.

📣 SEO-спам. Куча расширений существует ради единственной цели — получить обратную ссылку через поле «Homepage» в профиле автора. Mozilla ещё в 2023 году повесила на эти ссылки nofollow, но это никого не останавливает. Среди таких — явно сгенерированные нейросетью расширения вроде Typo Sniper и Tab Fortune Teller со ссылками на казино.

🧹 PUA-фабрики. Отдельный привет компании Innover Online Group Ltd — у неё больше 27 расширений с одинаковой структурой: [полезная мелочь] & Custom Web Search. Калькулятор, генератор паролей, будильник, гороскоп, Библия — к каждому прицеплен «кастомный поиск», который на самом деле Yahoo с партнёрским кодом. Суммарно — свыше 700 тысяч пользователей. Три расширения Mozilla уже отключила, но остальные живут. И таких компаний не одна: Jack тут же нашёл аналогичную контору Atom Apps (220 тысяч пользователей, 12 расширений, та же схема). Обе прячут название компании в .png на странице Terms of Service — видимо, чтобы поисковики не проиндексировали.

Хроника установки: 11 попыток за полгода

Путь к запуску Firefox со всеми расширениями занял полгода и 11 попыток. Коротко:

Попытка 0 — Windows-виртуалка tiny11, 65 тысяч расширений. Браузер замёрз намертво, ОЗУ кончилась, pagefile сожрал весь диск.

Попытка 1 — около 1000 расширений. Работает! Всё на странице заменилось на текст «Se ni važn» (победило одноимённое расширение в борьбе с bruh-ifier). Контекстное меню стало таким длинным, что автор показал его горизонтально. Расширение Anti-Phishing Alert помечает как фишинг всё, что содержит слова «login», «secure» или «verify» в URL. Genius.

Попытки 2–10 — масштабирование. На 3000 расширениях ещё можно открывать страницы. На 5000 — какое-то расширение блокирует вообще все сайты. На 6000 — загружается только about:addons.

Попытка 11 — финальная, все 84 194 расширения. Для этого понадобился друг с виртуальной машиной и 32+ ГБ ОЗУ. Скачивание заняло 1 час 43 минуты. Windows Defender пометил расширение HackTools как троян. А дальше — самое интересное.

Как выглядит Firefox с 84 тысячами расширений

Первый запуск: 39 минут Firefox показывал скелет интерфейса, наращивая extensions.json до 189 МБ (для сравнения: обычный extensions.json — 336 КБ). Потом браузер вырубили, запустили скрипт, который пометил все расширения как включённые, и запустили снова.

Второй запуск: браузер открылся, начали подтягиваться вкладки онбординга, но ни одна не загрузилась. Через 3 минуты — краш.

Третий запуск: хозяйка виртуалки ушла в душ и вернулась через 24 минуты. Браузер стабилизировался.Потребление памяти — от 27 до 37 ГБ, колеблющееся, как настроение на ревью. Страница about:addons грузилась 6 часов, но в итоге загрузилась целиком — все 84 204 строки (включая десяток системных). Ни одна обычная веб-страница так и не открылась: example.com висел 24 часа без результата.

Технически любопытно, почему extensions.json генерируется так долго. Jack залез в исходники Firefox и обнаружил: 13 лет назад это была SQLite-база, а сейчас — обычный JSON, который целиком перезаписывается при каждом изменении с debounce в 20 мс. Для 15 расширений — ок, для 84 тысяч — мучительная смерть I/O-подсистемы.

Моё мнение: зачем это вообще важно

На первый взгляд — чистое безумие ради контента. Но если вдуматься, этот эксперимент подсвечивает несколько реальных проблем:

Модерация каталога. 19% расширений — полные пустышки. Фишинговые расширения проходят ревью. PUA-фабрики набирают сотни тысяч пользователей, прицепляя партнёрский поиск к расширению-калькулятору. Да, Mozilla вычищает самое одиозное — но скорее реактивно, чем проактивно.

Архитектурные ограничения. Firefox не рассчитан на тысячи расширений, и это нормально — никто так не делает. Но то, что extensions.json перезаписывается целиком при каждом изменении, — это уже вопрос к разработчикам. В мире, где расширений становится всё больше, а часть из них ставится корпоративными политиками пачками, такие вещи будут аукаться.

Безопасность экосистемы. Когда у расширения без пользователей 3695 разрешений, а фишинговые клоны кошельков живут в каталоге неделями — это сигнал. Для обычного пользователя мораль простая: ставьте только проверенные расширения с историей, смотрите на количество пользователей и отзывы, а к запрашиваемым разрешениям относитесь так же внимательно, как к подозрительным ссылкам в почте.

Jack, кстати, выложил весь датасет на Hugging Face, и я думаю, исследователям безопасности он ещё пригодится. Это, пожалуй, самый полный снимок экосистемы Firefox-расширений, который когда-либо делался публично.

Источники

🔗 Оригинальная статья: https://jack.cab/blog/every-firefox-extension

🔗 Датасет на Hugging Face: https://huggingface.co/datasets/jack5079/extensions

🔗 API каталога дополнений Mozilla: https://mozilla.github.io/addons-server/topics/api/index.html

🔗 Баг 13-летней давности про extensions.sqlite → extensions.json: https://bugzilla.mozilla.org/show_bug.cgi?id=853388

🔗 Каталог расширений Firefox: https://addons.mozilla.org/en-US/firefox/search/?type=extension