Червь Shai-Hulud: 6 шагов защиты от npm-атаки на цепочку поставок

2026-06-09

172 пакета npm/PyPI скомпрометированы, 518 млн загрузок. Узнайте, почему удаление пакета не спасает и как защитить команду за 6 конкретных шагов.

Проблема: атака, которую не остановила валидная подпись

11 мая 2025 года за шесть минут были скомпрометированы 42 npm-пакета под префиксом @tanstack/*. За двое суток кампания расширилась до 172 пакетов в двух экосистемах — npm и PyPI. Совокупное число затронутых загрузок превысило 518 миллионов.

Главная проблема не в масштабе, а в методе: каждый вредоносный пакет имел валидную SLSA Build Level 3 аттестацию происхождения. У мейнтейнеров была двухфакторная аутентификация и trusted publishing через OIDC. По всем формальным признакам безопасности — всё было настроено правильно. Атака всё равно сработала.

Для бизнеса это означает одно: привычные индикаторы доверия к пакетам — подпись, аттестация, репутация автора — перестали быть достаточной защитой.

Почему удаление пакета не решает проблему

Червь Mini Shai-Hulud проектировался для персистентности. После установки он размещает механизмы закрепления в дереве проекта, а не в node_modules:

Удаление пакета через npm uninstall эти файлы не затрагивает. Они остаются активными.

На CI/CD-раннерах червь использует дополнительный вектор: на Linux-системах он читает /proc/pid/mem напрямую, извлекая секреты из памяти процессов, включая переменные, скрытые в логах.

Критическая ловушка: если отозвать токены до изоляции машины, деструктивный компонент демона уничтожает домашний каталог пользователя.

Решение: 6 шагов в правильном порядке

1. Аудит зависимостей. Проверьте package-lock.json и requirements.txt на наличие версий скомпрометированных пакетов, опубликованных 11–13 мая 2025 года.

2. Поиск артефактов. Проверьте .vscode/tasks.json на наличие folderOpen, .claude/settings.json, а также список LaunchAgents (macOS) и systemd юнитов (Linux).

3. Сначала изоляция — потом ротация. Отключите машину от сети, и только затем начинайте ротацию токенов. Ротируйте: AWS-ключи, GitHub PAT, npm-токены, SSH-ключи, токены Vault и Kubernetes, токены MCP-серверов ИИ-агентов.

4. Проверка CI/CD. Уязвимость в конфигурации OIDC-скоупа: если пайплайн доверяет всему репозиторию, orphan-коммит достаточен для получения валидного публикационного токена. Ограничьте scope до конкретного workflow на конкретной ветке.

5. Менеджеры паролей. Червь целенаправленно атакует 1Password и Bitwarden. Если на скомпрометированной машине был разблокирован менеджер паролей — ротируйте все хранимые там credentials.

6. Превентивные меры. Включите npm audit в CI как блокирующий шаг. Ограничьте pullrequest_target workflows. Настройте регулярную ротацию токенов MCP-серверов.

Результат: что меняет этот инцидент

Атака Shai-Hulud — не просто очередная уязвимость в зависимостях. Она демонстрирует системный сдвиг: злоумышленники научились получать валидные подписи и аттестации, действуя через легитимные механизмы CI/CD.

Для команд, использующих ИИ-агентов (Claude Code, Kiro), появился новый вектор: червь целенаправленно похищает токены MCP-серверов — то есть доступ ко всем внешним сервисам, к которым подключён агент. Это значит, что безопасность ИИ-инфраструктуры теперь напрямую связана с безопасностью цепочки поставок.

Шесть шагов выше — минимум для любой команды, использующей npm или PyPI в production.

Опубликовано на ContentRun, внедрение ИИ в маркетинг и продажи. Что мы делаем.