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 и практическое руководство по защите.

⚠ Ключевая статистика: По данным JFrog и Ox Security, только в первой половине 2026 года количество атак на npm-пакеты выросло на 340% по сравнению с аналогичным периодом 2025 года. Более 780 npm-пакетов были скомпрометированы в ходе supply chain-атак, из них 636 — в ходе кампании TeamPCP/Shai Hulud. Среднее время обнаружения атаки составляет 12 дней (источник: отчеты JFrog, ReversingLabs).
Иллюстрация к статье

👥 Кто такая TeamPCP и чем она опасна

TeamPCP — это русскоязычная хакерская группировка, специализирующаяся на атаках на цепочку поставок через менеджеры пакетов. Группа впервые была замечена в 2024 году, однако настоящий размах её деятельность приобрела в 2026 году. По данным исследователей JFrog и Endor Labs, TeamPCP стоит за червём Shai Hulud — самораспространяющимся вредоносным ПО, которое атакует npm, PyPI и другие реестры пакетов.

Главная особенность TeamPCP — использование автоматизированных ботов для массового размещения вредоносных пакетов. В отличие от точечных атак (например, компрометация конкретного мейнтейнера), TeamPCP действует как «конвейер»: боты регистрируют тысячи аккаунтов, публикуют пакеты с названиями, похожими на популярные (typosquatting), и ждут, пока жертва ошибётся при установке.

Shai Hulud: как работает «песчаный червь» npm

Shai Hulud — это Python-скрипт, который анализирует популярные пакеты в реестрах и автоматически создаёт пакеты-двойники с похожими именами (например, node-fetchnode-fetech, axiosaxois). При установке такого пакета срабатывает postinstall-скрипт, который загружает и выполняет вредоносный код.

В 2026 году TeamPCP значительно усовершенствовала Shai Hulud. Теперь червь способен:

  • Самораспространяться через скомпрометированные аккаунты. Захватив доступ к npm-аккаунту разработчика, Shai Hulud публикует вредоносные версии легитимных пакетов, которые затем атакуют других разработчиков.
  • Использовать GitHub Actions для кражи данных. Вредонос записывает украденные секреты в файлы, которые выглядят как вывод линтера или форматтера, после чего загружает их как артефакты сборки.
  • Обходить проверки безопасности. Код червя написан так, чтобы его postinstall-хелперы были трудноотличимы от легитимных сборочных скриптов.
🔬 Разбор кейса TeamPCP: В июне 2026 года исследователи Ox Security обнаружили, что Shai Hulud использует коммиты с поддельными датами (вплоть до 13-летней давности), чтобы обойти автоматические системы обнаружения аномалий. Коммиты были созданы в течение нескольких дней, но их временные метки указывали на 2013—2020 годы. Для маскировки автор коммита указывался как «claude».

🔍 Основные векторы атак на 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 для реестра.
✅ Чек-лист быстрой проверки: • Установлены ли lock-файлы в репозитории? (package-lock.json / yarn.lock / pnpm-lock.yaml) • Используется ли npm ci в CI вместо npm install? • Настроен ли Dependabot или аналог? Включены ли security alerts? • Есть ли в пайплайне SCA-сканирование (Snyk / JFrog / Socket)? • Требуется ли 2FA для публикации пакетов? Настроен ли npm-скоуп для внутренних пакетов? • Проверяются ли postinstall-скрипты перед установкой?

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-системы становятся основным звеном распространения вредоносов.

📚 Читайте также

📖 Термины

CI/CD · Devsecops · OWASP · Supply Chain Attack · Пентест

🔗 Источники