Атака TeamPCP: как npm install запускает червя и крадет секреты CI
Что случилось
В июне 2025 года команда «TeamPCP»‑«Дюна» добавила вредоносный код под названием Shai‑Hulud в популярные пакеты Node.js. При обычном запуске команды npm install злоумышленники использовали скрипты жизненного цикла (lifecycle scripts), которые выполняются автоматически, чтобы развернуть червя на всех машинах, где устанавливался пакет. В итоге проект, который зависел от всего 5 пакетов, получил более 2000 зависимостей, и в них оказался вредоносный код.
Источник: Habr
Почему это важно сейчас
В большинстве проектов Node.js зависимость от сторонних пакетов считается «готовой» и безопасной. Однако каждая новая зависимость может скрывать тысячи собственных зависимостей, а скрипты, которые запускаются при установке, дают злоумышленнику полный контроль над средой. Если в CI‑процессе используются секреты GitHub и токены npm с обходом 2FA, то они могут быть раскрыты и использованы для дальнейших атак. В 2026 году, когда экосистема npm продолжает расти, а автоматизация CI/CD становится нормой, понимание механизмов таких атак критически важно для каждого разработчика.
Как работает атака
- Lifecycle‑скрипты
Вpackage.jsonможно задать командыpreinstall,postinstall,prepareи др. Они выполняются автоматически. Хакеры вставили в эти скрипты вызовnode shai-hulud.js, который скачивает и запускает вредоносный код. - Секреты GitHub
В CI‑пайплайнах секреты (пароли, токены) передаются как переменные окружения. В памяти раннера они видны в открытом виде, и злоумышленник может их перехватить. - Токены npm с bypass_2fa
Такие токены позволяют публиковать пакеты без двухфакторной аутентификации. Если токен помечен какbypass_2fa: true, его можно использовать для публикации вредоносных пакетов.
Как защититься: практические шаги
| Шаг | Что делаем | Почему это важно |
|---|---|---|
| 1 | Отключить выполнение скриптов – запустить npm install --ignore-scripts в CI и при локальной сборке. |
Убирает возможность запуска вредоносных скриптов. |
| 2 | Проверять lockfile – использовать npm ci вместо npm install. |
Устанавливает строго фиксированные версии, исключая «потенциально новые» пакеты. |
| 3 | Аудит зависимостей – npm audit и npm audit fix. |
Выявляет известные уязвимости и автоматически их исправляет. |
| 4 | Сканировать секреты – git-secrets, truffleHog или GitHub Actions Secret Scanning. |
Предотвращает утечку токенов и паролей. |
| 5 | Проверять токены npm – убедиться, что в репозитории нет токенов с bypass_2fa: true. |
Убирает возможность публикации вредоносных пакетов через ваш аккаунт. |
| 6 | Разрешить только проверенные пакеты – хранить whitelist в package.json и проверять подписи (если поддерживается). |
Ограничивает доступ к непроверенным пакетам. |
Что проверить сейчас: чеклист
- Есть ли в
package.jsonскриптыpreinstall,postinstall,prepare? - Если да, просмотрите их содержимое.
- Запускаете ли вы
npm installбез флага--ignore-scripts? - Если да, добавьте этот флаг в CI‑конфигурацию.
- Используете ли вы
npm ci? - Если нет, переключитесь на него для чистой установки.
- Проведён ли аудит зависимостей (
npm audit)? - Если нет, запустите его и исправьте найденные проблемы.
- Проверены ли секреты GitHub на утечки?
- Используйте встроенный сканер секретов или сторонние инструменты.
- В репозитории нет ли токенов npm с
bypass_2fa: true? - Удалите их и замените безопасными токенами.
Итоги и дальнейшие действия
Атака TeamPCP, произошедшая в 2025 году, показала, как легко можно внедрить вредоносный код через обычные инструменты npm. Следуя простым правилам: отключать скрипты, использовать lockfile, проводить аудит и проверять секреты, вы можете защитить свой проект от подобных угроз. Начните с проверки чеклиста уже сегодня – это займет не более 15 минут и даст вам уверенность, что ваши зависимости безопасны.
Источники
Что почитать дальше
- Где есть бензин в Кемерове сегодня: 5 сервисов для проверки за 15 минут
- 8 сервисов для проверки бензина: где есть топливо сейчас
- ИИ ускорит процессы на 30% — но только если они уже отлажены
- 95% ИИ-пилотов проваливаются: проверьте эти 3 условия до запуска
- AI как новая точка атаки: 5 шагов для защиты бизнеса в 2026