SlugFest: уязвимость npm грозила захватом 1500+ пакетов

Коротко: 13 октября 2026 года исследователи Bloom Security раскрыли уязвимость под названием SlugFest в механизме Trusted Publishing реестра npm. Система доверяла человекочитаемому имени репозитория на GitHub вместо его постоянного числового идентификатора — поэтому, если автор пакета переименовывал, удалял или переносил репозиторий, а старое имя освобождалось, любой желающий мог зарегистрировать его заново и получить право публиковать новые версии чужого пакета без кражи логина, пароля или токена. Под риском оказалось более 1500 npm-пакетов суммарно с 10+ млн загрузок, включая security-сканеры и криптографические библиотеки. npm выпустила исправление 2 октября; по данным исследователей, активной эксплуатации «в дикой природе» зафиксировано не было.
Что такое SlugFest и почему это сработало
Trusted Publishing — относительно новая функция npm, которая позволяет связать публикацию пакета напрямую с конкретным репозиторием на GitHub через OIDC-токен, без постоянного npm-токена на стороне CI. Проблема в том, что npm при проверке ориентировался на «slug» — читаемую строку вида владелец/репозиторий, а не на присваиваемый GitHub неизменяемый числовой ID владельца и репозитория, который сохраняется при переименованиях и передаче прав. Когда мейнтейнер переименовывал аккаунт или репозиторий, удалял его или передавал другому владельцу, старый slug освобождался — и атакующий мог зарегистрировать такое же имя на GitHub, унаследовав доверие npm к публикации под именем оригинального пакета.
Масштаб и подтверждённый PoC
По данным Bloom Security, уязвимыми оказались более 1500 npm-пакетов с общим числом загрузок свыше 10 млн и более 1 млн загрузок в месяц — среди них инструменты аутентификации, сканеры безопасности и криптографические библиотеки. Исследователи подтвердили эксплуатируемость в контролируемой тестовой среде: им удалось опубликовать новую версию существующего пакета, воспользовавшись освободившимся именем репозитория. Активной эксплуатации против реальных пользователей на момент раскрытия зафиксировано не было, но сам факт того, что захват пакета не требовал ни единого украденного пароля, делает атаку особенно опасной для supply chain — такую активность сложно поймать привычным мониторингом утечек учётных данных.
Что сделал GitHub
После раскрытия GitHub и npm оперативно ужесточили правила: новая конфигурация Trusted Publishing теперь обязана пройти первую успешную публикацию в течение 48 часов — это «привязывает» конфигурацию к неизменяемому идентификатору репозитория, а не к его текущему имени. Патч был выпущен ещё 2 октября, то есть за 11 дней до публичного раскрытия деталей — стандартная практика responsible disclosure для supply-chain уязвимостей такого масштаба.
Чем это грозит обычному пользователю
SlugFest — это прежде всего проблема разработчиков и организаций, которые собирают приложения из open-source пакетов: вредоносный код, подмешанный в зависимость, может попасть в собственное ПО компании и затем — к её клиентам. Но цепочка поставок программного обеспечения касается и вас напрямую: почти любое приложение на телефоне или в браузере, банковский сервис или расширение для Chrome построены на тысячах таких библиотек. Если в одну из них попадает инфостилер или бэкдор, пострадать можете вы — даже ничего не устанавливая вручную и не переходя по подозрительным ссылкам. Разобраться, как распознать и минимизировать последствия кражи данных через вредоносный софт, поможет статья о вредоносном ПО-инфостилерах.
Как снизить риск лично вам
- Если вы разработчик — используйте lock-файлы (
package-lock.json) и фиксируйте версии зависимостей, а не автоматическое обновление на последнюю мажорную версию. - Включайте двухфакторную аутентификацию для аккаунтов GitHub и npm, если публикуете собственные пакеты — это не защищает от SlugFest напрямую, но закрывает классические векторы захвата учётки.
- Обычным пользователям — держите менеджер паролей и используйте разные пароли для разных сервисов: если вредоносная зависимость всё же попадёт в приложение, которым вы пользуетесь, украденный пароль одного сервиса не откроет доступ ко всем остальным. Подробнее — в гайде по выбору менеджера паролей.
- Следите за официальными уведомлениями об обновлениях безопасности приложений, которыми пользуетесь регулярно, и не откладывайте установку патчей.
Сама уязвимость SlugFest касается серверной инфраструктуры разработки, и VPN здесь не инструмент защиты от неё. Но когда вы входите в GitHub, npm или любой другой аккаунт разработчика из кафе, коворкинга или отельного Wi-Fi, шифрование трафика через LiMP VPN закрывает соседний риск — перехват логина и сессионных токенов на уровне чужой сети. Тарифы — от 69 ₽/мес, подробности на странице цены.