GitHub начала выявлять вредоносное программное обеспечение в экосистеме npm с марта 2026 года. Однако разработчики, использующие пакеты из PyPI, Maven, RubyGems, NuGet, Go, crates.io или PHP Composer, не получали никаких предупреждений, так как система защиты GitHub отслеживала только одну экосистему. Это изменилось в текущем месяце.

База данных рекомендаций GitHub теперь интегрирует информацию о вредоносных пакетах из открытого репозитория OpenSSF в формате OSV. Этот репозиторий был запущен в 2023 году с более чем 15 000 записей и ежедневно пополняется, охватывая опечатки в названиях, атаки на зависимости, компрометацию аккаунтов и вредоносные предкомпилированные двоичные файлы.

Оповещения Dependabot об обнаружении вредоноса, которые раньше работали только с данными npm, теперь задействуют все восемь экосистем сразу после активации функции пользователем. Сам Dependabot уже работает с более чем 30 миллионами репозиториев и поддерживает более 34 экосистем пакетов, что свидетельствует о масштабе работы новой системы.

Единая система вместо восьми

Разработка восьми отдельных систем обнаружения заняла бы годы. Вместо этого команда создала один импортер, который обрабатывает данные из репозитория OpenSSF аналогично тому, как существующие системы GitHub обрабатывают рекомендации RubySec и RustSec.

Нормализация данных представляет собой сложную задачу. Названия экосистем в разных источниках не совпадают (репозиторий использует "PyPI", а база данных GitHub — "pip"). Записи OSV содержат отдельные версии, тогда как GitHub оперирует диапазонами версий. Иногда версии вообще не указаны. Описания часто пусты, а когда несколько источников докладывают об одном пакете, их отчеты объединяются в единый документ. Кроме того, рекомендации могут быть отозваны: репозиторий содержит папку osv/withdrawn для ошибочных рекомендаций.

Существует более тонкий нюанс: находки GitHub о вредоносе в npm уже передаются в репозиторий OpenSSF. Без специальной фильтрации это привело бы к повторному импорту собственных рекомендаций GitHub в бесконечном цикле. Решение использует метаданные происхождения в записях OSV: любая запись с меткой "ghsa-malware" была создана GitHub и удаляется перед включением в новую ленту. После проверки с реальными данными выяснилось, что более половины новых npm-отчетов каждый месяц относятся именно к этому типу циклических повторений.

Этап проверки был пропущен намеренно

Рекомендации о вредоносе пропускают этап проверки и публикуются автоматически, так как пакет, крадущий учетные данные, оставаясь в очереди на проверку несколько дней, дает преимущество его создателю. Новым является то, что эти непроверенные рекомендации теперь могут напрямую запускать оповещения Dependabot, чего никогда не было раньше.

Защита от скомпрометированных источников

Эта система работает только при условии, что исходная лента остается чистой. Система предполагает, что в конечном итоге это может не произойти, поэтому реализованы три уровня защиты. Лимит количества рекомендаций в одном импорте предотвращает создание слишком большого объема данных — превышение лимита остановит процесс и оповестит команду. Каждая импортированная рекомендация содержит информацию о происхождении до конкретного коммита, позволяя отследить источник проблемы. Каждый пакет импорта может быть откачен целиком, без необходимости вручную удалять отдельные записи.

Как активировать функцию

Оповещения о вредоносе включаются по выбору пользователя в настройках безопасности репозитория, организации или предприятия. Dependabot будет сравнивать зависимости с рекомендациями о вредоносе в базе данных, включая проверку существующих зависимостей, сразу после активации функции.