Shai-Hulud: массовая атака на npm скомпрометировала тысячи пакетов
В конце 2025 года JavaScript-экосистема столкнулась с крупнейшей supply-chain атакой в своей истории. Кампания под названием Shai-Hulud (по имени песчаных червей из «Дюны») скомпрометировала тысячи npm-пакетов и GitHub-репозиториев, затронув проекты, которые суммарно скачиваются миллионы раз в неделю.
Как это работало
Атакующие получали доступ к аккаунтам мейнтейнеров популярных пакетов — через фишинг, утёкшие токены GitHub или социальную инженерию. Затем публиковали обновления с внедрённым бэкдором. Пакеты выглядели легитимно: те же авторы, те же репозитории, корректные версии. Бэкдор активировался только в production-среде, что затрудняло обнаружение при тестировании.
Масштаб кампании поражает: скомпрометированные пакеты включали утилиты, которые используются как транзитивные зависимости в десятках тысяч проектов. Один заражённый пакет глубоко в дереве зависимостей мог затронуть приложения, авторы которых даже не знали о его существовании.
Уроки
Инцидент обнажил фундаментальную хрупкость npm-экосистемы: она построена на доверии к мейнтейнерам, а один скомпрометированный аккаунт запускает каскадный эффект. Сообщество усилило призывы к обязательному аудиту зависимостей, двухфакторной аутентификации для всех мейнтейнеров и переходу на lockfile-first подход, при котором обновления зависимостей происходят только явно и с проверкой.
Для компаний, использующих JavaScript в production, Shai-Hulud — аргумент в пользу инвестиций в инструменты аудита зависимостей (Socket, Snyk, npm audit) и политик, ограничивающих автоматическое обновление пакетов.


