Supply chain атаки через npm: защита приложений от TeamPCP в 2026
📋 Кратко
Атаки на цепочку поставок через npm достигли рекордного масштаба: червь Shai Hulud от TeamPCP скомпрометировал 636 пакетов, Sapphire Sleet — более 140 пакетов Mastra AI. Разбираем тактики злоумышленников и даём практические методы защиты для разработчиков и DevSecOps-инженеров: от lock-файлов до мониторинга аномалий.
Экосистема JavaScript — крупнейшая в мире среда разработки: в реестре npm насчитывается более 2,5 млн пакетов, которые ежедневно загружаются миллиарды раз. Каждый второй современный веб-сайт использует хотя бы один npm-пакет. Однако именно эта популярность делает npm одной из самых привлекательных целей для атак на цепочку поставок (supply chain attacks).
2026 год стал рекордным по масштабу таких атак. Группировка TeamPCP, действующая с 2024 года, атаковала через npm не менее 600 пакетов с помощью червя Shai Hulud. Северокорейская группа Sapphire Sleet (BlueNoroff) скомпрометировала более 140 пакетов Mastra AI. Новый червь IronWorm, написанный на Rust, поразил 36 пакетов за считанные дни. В этой статье — подробный разбор тактик TeamPCP и практическое руководство по защите.
👥 Кто такая TeamPCP и чем она опасна
TeamPCP — это русскоязычная хакерская группировка, специализирующаяся на атаках на цепочку поставок через менеджеры пакетов. Группа впервые была замечена в 2024 году, однако настоящий размах её деятельность приобрела в 2026 году. По данным исследователей JFrog и Endor Labs, TeamPCP стоит за червём Shai Hulud — самораспространяющимся вредоносным ПО, которое атакует npm, PyPI и другие реестры пакетов.
Главная особенность TeamPCP — использование автоматизированных ботов для массового размещения вредоносных пакетов. В отличие от точечных атак (например, компрометация конкретного мейнтейнера), TeamPCP действует как «конвейер»: боты регистрируют тысячи аккаунтов, публикуют пакеты с названиями, похожими на популярные (typosquatting), и ждут, пока жертва ошибётся при установке.
Shai Hulud: как работает «песчаный червь» npm
Shai Hulud — это Python-скрипт, который анализирует популярные пакеты в реестрах и автоматически создаёт пакеты-двойники с похожими именами (например, node-fetch → node-fetech, axios → axois). При установке такого пакета срабатывает postinstall-скрипт, который загружает и выполняет вредоносный код.
В 2026 году TeamPCP значительно усовершенствовала Shai Hulud. Теперь червь способен:
- Самораспространяться через скомпрометированные аккаунты. Захватив доступ к npm-аккаунту разработчика, Shai Hulud публикует вредоносные версии легитимных пакетов, которые затем атакуют других разработчиков.
- Использовать GitHub Actions для кражи данных. Вредонос записывает украденные секреты в файлы, которые выглядят как вывод линтера или форматтера, после чего загружает их как артефакты сборки.
- Обходить проверки безопасности. Код червя написан так, чтобы его postinstall-хелперы были трудноотличимы от легитимных сборочных скриптов.
🔍 Основные векторы атак на npm в 2026 году
Атаки на цепочку поставок через npm можно разделить на четыре основных типа. Понимание этих векторов — первый шаг к построению защиты.
1. Typosquatting (подмена имён пакетов)
Злоумышленники регистрируют пакеты с именами, визуально похожими на популярные: замена букв, перестановка символов, добавление дефисов. Разработчик ошибается при вводе npm install — и вредоносный код уже в проекте. По данным ReversingLabs, typosquatting составляет 58% всех npm-атак. TeamPCP автоматизировала этот процесс: боты генерируют тысячи вариантов опечаток для 500 самых популярных пакетов.
2. Компрометация аккаунтов мейнтейнеров
Атака на Sapphire Sleet (Mastra AI) в июне 2026 года — классический пример. Злоумышленники взломали аккаунт мейнтейнера ehindero, который имел права публикации в @mastra-скоупе. После этого они опубликовали вредоносные обновления для 140+ пакетов, добавив зависимость easy-day-js — typosquat-версию библиотеки dayjs. При установке запускался скрипт, отключавший проверку TLS-сертификатов и загружавший второй этап вредоноса.
3. Dependency confusion (путаница зависимостей)
Если в проекте используется внутренний пакет с именем, которое также существует в публичном реестре, менеджер пакетов может установить публичную версию вместо приватной. Злоумышленники специально регистрируют пакеты с такими именами в npm. В 2026 году атаки dependency confusion нацелились на корпоративные npm-реестры: Azure DevOps, GitHub Packages и GitLab.
4. Самовоспроизводящиеся черви (самопропагация)
IronWorm — новый вид угрозы, обнаруженный JFrog в июне 2026 года. Написанный на Rust, этот червь использует eBPF-руткит для маскировки и Tor для C2-коммуникаций. После компрометации CI-среды он крадёт npm-токены и публикует троянизированные версии пакетов от имени жертвы, заражая следующую цель. По данным JFrog, IronWorm, вероятно, является эволюцией Shai Hulud от TeamPCP.
🛠 Тактики, техники и процедуры (TTP) TeamPCP
Анализ кампаний TeamPCP 2025—2026 годов позволяет выделить характерные TTP, которые важно знать для построения defences:
- Initial Access (T1195): Supply chain compromise через публичные реестры пакетов. Группа использует как typosquatting, так и компрометацию учётных записей.
- Execution (T1204): Пользовательское выполнение через postinstall/preinstall скрипты npm. Пакет устанавливается — вредоносный код выполняется автоматически.
- Persistence (TA0003): Различные методы для разных ОС: Run-ключи реестра Windows, LaunchAgents macOS, systemd-службы Linux.
- Defense Evasion (T1562): Отключение TLS-верификации, подделка временных меток коммитов, маскировка под линтер/форматтер, использование eBPF-руткитов (IronWorm).
- Credential Access (T1555): Кража 86 переменных окружения (OpenAI, AWS, Anthropic, npm), SSH-ключей, файлов криптокошельков, файлов vault.
- Exfiltration (TA0010): Через GitHub Actions артефакты, шифрованный трафик Tor, подконтрольные C2-серверы.
Примечательно, что TeamPCP использует cross-platform-подход: одна и та же вредоносная нагрузка работает на Windows, Linux и macOS. Это достигается за счёт написания payload'ов на Rust и Python.
🛡 Методы защиты: практическое руководство
Защита от supply chain-атак через npm требует многослойного подхода. Ниже — проверенные методы, которые реально снижают риск компрометации.
1. Используйте lock-файлы и проверяйте их целостность
package-lock.json (npm), yarn.lock и pnpm-lock.yaml фиксируют точные версии всех зависимостей. Храните их в системе контроля версий. При каждой сборке CI должен проверять, что lock-файл не был изменён без соответствующего изменения package.json. Используйте npm ci вместо npm install в CI — команда удаляет node_modules и устанавливает зависимости строго по lock-файлу.
2. Настройте скоупинг и приватные реестры
Для корпоративных проектов используйте scoped packages (@company/package-name) и приватные npm-реестры (Verdaccio, GitHub Packages, AWS CodeArtifact). Настройте npm-клиент так, чтобы публичные пакеты устанавливались только из явно разрешённых источников. Отключите npm audit как единственный источник проверки — он пропускает zero-day-пакеты.
3. Внедрите инструменты анализа цепочки поставок
Используйте специализированные решения:
- Socket.dev — анализирует поведение пакета до установки, выявляет postinstall-скрипты, подозрительные сетевые вызовы, доступ к файловой системе.
- JFrog Xray — глубокий анализ бинарных артефактов с проверкой лицензий и CVE.
- GitHub Dependabot + npm audit — базовый минимум для автоматического обновления уязвимых зависимостей.
- OpenSSF Scorecard — оценивает безопасность практик разработки для каждого пакета.
- Endor Labs — анализ графа зависимостей с приоритизацией по реальной достижимости уязвимости.
4. Настройте DevSecOps-пайплайн с проверками безопасности
Добавьте в CI/CD следующие этапы:
- SAST (статический анализ) — проверка кода и зависимостей до сборки (Semgrep, CodeQL).
- SCA (анализ состава ПО) — выявление уязвимых и вредоносных пакетов (Snyk, JFrog Xray, Black Duck).
- Проверка postinstall-скриптов — автоматический аудит всех postinstall/preinstall скриптов перед выполнением.
- Верификация подписей — используйте npm-подписание пакетов (
npm sign) и проверку sigstore для реестра.
5. Включите многофакторную аутентификацию для всех npm-аккаунтов
Microsoft и GitHub с 2025 года требуют 2FA для всех мейнтейнеров npm-пакетов с более чем 10 млн загрузок в неделю, но этого недостаточно. Активируйте 2FA для всех аккаунтов, имеющих права публикации в вашей организации. Используйте аппаратные ключи (WebAuthn) как второй фактор вместо SMS или TOTP — в 2026 году были зафиксированы случаи перехвата TOTP-сессий через социотехнику.
6. Мониторинг аномалий в реестре
Используйте инструменты для отслеживания подозрительной активности: неожиданные обновления пакетов, появление пакетов с похожими именами, массовая регистрация новых пакетов. Socket.dev и npm Outreach предоставляют такие возможности.
📈 Прогноз: что дальше
По прогнозам аналитиков, во второй половине 2026 года следует ожидать:
- Рост числа AI-генерируемых пакетов-двойников. Злоумышленники используют LLM для автоматического создания тысяч пакетов с функциональным кодом и скрытой вредоносной нагрузкой. Атака на Mastra AI — лишь первая ласточка.
- Атаки через расширения браузеров. Механизмы обновления расширений Chrome/Edge — новый вектор supply chain (как показал недавний инцидент с Adblock for YouTube).
- Ужесточение требований к публикации. GitHub (владелец npm) планирует ввести обязательное подписание пакетов для всех скоупов и ужесточить проверку мейнтейнеров в 2026—2027 годах.
- Рост атак на GitHub Actions. IronWorm и Miasma показали, что CI-системы становятся основным звеном распространения вредоносов.
📚 Читайте также
- Supply Chain Attacks: как защититься от атак на цепочку поставок
- Автоматизация DevSecOps: как ASOC-платформы повышают безопасность
- OWASP Top 10 — 2026: главные уязвимости веб-приложений и методы защиты
- Безопасность контейнеров и Kubernetes: защита облачной инфраструктуры в 2026
- C2-коммуникации через легитимные платформы: как злоумышленники обходят защиту
📖 Термины
CI/CD · Devsecops · OWASP · Supply Chain Attack · Пентест
🔗 Источники
- ENISA Supply Chain Threat Landscape
- Microsoft links Mastra AI supply chain attack to North Korean hackers
- New IronWorm malware hits 36 packages in npm supply-chain attack
- New Shai-Hulud malware wave compromises 600 npm packages - BleepingComputer
- Polymarket customers lose $3 million in supply-chain attack
- Новый червь Miasma скомпрометировал более 70 GitHub-репозиториев Microsoft