Разработка 17 апреля 2026 · 1 мин чтения 213 0

Shai-Hulud: массовая атака на npm скомпрометировала тысячи пакетов

В конце 2025 года JavaScript-экосистема столкнулась с крупнейшей supply-chain атакой в своей истории. Кампания под названием Shai-Hulud (по имени песчаных червей из «Дюны») скомпрометировала тысячи npm-пакетов и GitHub-репозиториев, затронув проекты, которые суммарно скачиваются миллионы раз в неделю.

Как это работало

Атакующие получали доступ к аккаунтам мейнтейнеров популярных пакетов — через фишинг, утёкшие токены GitHub или социальную инженерию. Затем публиковали обновления с внедрённым бэкдором. Пакеты выглядели легитимно: те же авторы, те же репозитории, корректные версии. Бэкдор активировался только в production-среде, что затрудняло обнаружение при тестировании.

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

Уроки

Инцидент обнажил фундаментальную хрупкость npm-экосистемы: она построена на доверии к мейнтейнерам, а один скомпрометированный аккаунт запускает каскадный эффект. Сообщество усилило призывы к обязательному аудиту зависимостей, двухфакторной аутентификации для всех мейнтейнеров и переходу на lockfile-first подход, при котором обновления зависимостей происходят только явно и с проверкой.

Для компаний, использующих JavaScript в production, Shai-Hulud — аргумент в пользу инвестиций в инструменты аудита зависимостей (Socket, Snyk, npm audit) и политик, ограничивающих автоматическое обновление пакетов.