Cайт программиста Ruby, веб-разработчика Ruby on Rails ESV Corp. Екатеринбург, Москва, Санкт-Петербург, Новосибирск, Первоуральск

Хотели установить библиотеку — получили червя. GitHub закрывает npm-реестр корпоративным фильтром

Опасная npm-библиотека может запустить вредоносный код ещё до старта приложения, поэтому GitHub решила проверять зависимости до загрузки. Компания 20 октября представила Package Firewall, который пропускает запросы к реестру через корпоративные правила безопасности и блокирует установки, не прошедшие проверку. Пока сервис работает в предварительном доступе.

Фильтр размещается между компьютерами разработчиков, серверами сборки, ИИ-агентами и публичным реестром npm. Через него проходят запросы метаданных и скачивание библиотек. Администраторы задают политику на уровне предприятия, а инструменты разработки перенаправляют обращения с обычного реестра на адрес файрвола. Без такой настройки фильтр не проверяет установки.

Один механизм блокирует пакеты, для которых GitHub Advisory Database содержит действующие предупреждения о вредоносном коде. Другой не пропускает версии с известными уязвимостями. Порог риска настраивается от критического уровня до любых предупреждений, причём по умолчанию запрет действует лишь для критических уязвимостей. Проверку известных вредоносов включают сразу.

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

Package Firewall сравнивает версии и останавливает загрузку, если исчезли ранее присутствовавшие подтверждения происхождения SLSA. Ещё одна проверка выявляет новые сценарии preinstall и postinstall, способные запускать команды прямо во время установки библиотеки. Обе проверки включены по умолчанию. Подозрительный признак не всегда означает заражение, поэтому возможны ложные блокировки.

Причину усиления защиты показывают атаки на цепочку поставок. В августе червь Shai-Hulud затронул 444 npm-пакета, которые скачивали около двух миллиардов раз в месяц. Заражённый архив мог отличаться от исходников в репозитории, а вредоносные сценарии искали учётные данные. Новый фильтр призван снижать риски на этапе получения зависимостей, но не гарантирует обнаружения всех угроз.

Проблема касается не только явно вредоносных библиотек. В октябре обнаружили возможность подмены пакетов через старые имена репозиториев GitHub, потенциально затрагивавшую более 1500 npm-проектов. Для эксплуатации хватало занять освободившийся адрес репозитория. Реальные атаки по такому сценарию не подтверждены, а уязвимость в механизме публикации уже устранили.

Package Firewall доступен клиентам GitHub Enterprise Cloud, включая организации с региональным хранением данных, и поддерживает только npm. Пока плата не взимается, после полноценного запуска GitHub планирует тарифицировать сервис по фактическому использованию. При ошибочной блокировке разработчик может запросить исключение, а администратор решает, разрешать ли пакет.

SecurityLab