Mini Shai-Hulud, связанный с группой TeamPCP, превратился в один из наиболее опасных червей в экосистемах npm и PyPI: он скомпрометировал пакеты TanStack, UiPath, Mistral AI, OpenSearch и Guardrails AI, публикуя вредоносные версии через легитимные GitHub Actions с валидной SLSA-подписью и затем автоматически распространяясь на другие пакеты того же мейнтейнера; разработчикам и компаниям, использующим эти экосистемы, необходимо немедленно пересмотреть используемые версии, отозвать токены npm/GitHub и проверить инфраструктуру CI/CD на признаки компрометации.
Технические детали атаки Mini Shai-Hulud
Основной вектор в экосистеме TanStack — цепочка атак на GitHub Actions. По данным команды TanStack, злоумышленники использовали три ключевых элемента: триггер pull_request_target, отравление кэша GitHub Actions и извлечение токена OIDC из памяти процесса раннера на этапе выполнения (postmortem TanStack; исследование по кэшу GitHub Actions — Adnan Khan).
Дальнейшие шаги атаки на TanStack выглядели следующим образом:
- подготовка вредоносного payload в форке проекта на GitHub;
- инъекция вредоносных файлов в публикуемые tarball npm пакетов;
- захват легитимного workflow TanStack/router через украденный OIDC-токен и выпуск скомпрометированных версий через официальный конвейер релизов.
В результате были опубликованы вредоносные версии 42 пакетов (84 версии) в экосистеме TanStack; инциденту присвоен идентификатор CVE-2026-45321 с оценкой CVSS 9.6, что отражено в advisory проекта на GitHub (GitHub Security Advisory) и в базе NVD (NVD CVE-2026-45321).
Ключевой компонент вредоносного кода в npm-пакетах — обфусцированный JavaScript-файл router_init.js, который:
- профилирует окружение исполнения (операционная система, контекст запуска, инструменты разработки);
- запускает многофункциональный похититель учетных данных, нацеленный на облачные провайдеры, криптовалютные кошельки, средства работы с ИИ, мессенджеры и системы CI, включая GitHub Actions;
- эксфильтрирует данные на домен filev2.getsession[.]org, относящийся к децентрализованному мессенджеру Session, что снижает вероятность блокировки трафика в корпоративных сетях;
- как резервный канал, коммитит зашифрованные данные в репозитории под контролем атакующих через GitHub GraphQL API, используя похищенные токены GitHub; автор коммитов маскируется под
[email protected].
Для закрепления в системе вредонос внедряет персистентность в IDE Claude Code и Visual Studio Code, чтобы похититель учетных данных запускался при каждом старте среды разработки. Дополнительно устанавливается сервис gh-token-monitor для мониторинга и повторной эксфильтрации токенов GitHub, а также добавляются два вредоносных workflow GitHub Actions, которые сериализуют секреты репозитория в JSON и отправляют их на сервер api.masscan[.]cloud.
Особенность червя — способность самостоятельного распространения в экосистеме npm. Вредоносный код:
- ищет публикуемый токен npm с флагом bypass_2fa=true;
- перечисляет все пакеты, опубликованные тем же мейнтейнером;
- через украденный OIDC-токен GitHub получает индивидуальные токены публикации для каждого пакета, обходя традиционные механизмы аутентификации.
Скомпрометированные npm-пакеты распространяются с валидными аттестациями SLSA Build Level 3, то есть атака впервые продемонстрировала возможность выпуска вредоносных, но формально «доказуемо воспроизводимых» сборок через доверенный конвейер (анализ StepSecurity).
Расширение кампании за пределы TanStack
Червь Mini Shai-Hulud вышел за рамки TanStack и затронул другие проекты и экосистемы, включая PyPI. Подтверждены следующие скомпрометированные пакеты и версии:
- [email protected] (PyPI)
- [email protected] (PyPI)
- @opensearch-project/opensearch: 3.5.3, 3.6.2, 3.7.0, 3.8.0
- @squawk/[email protected]
- @squawk/[email protected]
- @squawk/[email protected]
- @tallyui/connector-medusa: 1.0.1, 1.0.2, 1.0.3
- @tallyui/connector-vendure: 1.0.1, 1.0.2, 1.0.3
Анализ Microsoft по вредоносному пакету [email protected] показывает, что он загружает похититель учетных данных с хоста 83.142.209[.]194 и содержит логику, зависящую от страны и языка системы: вредонос избегает русскоязычных окружений и имеет «географически ограниченную деструктивную ветку» с вероятностью 1 к 6 выполнить rm -rf /, когда система, по его оценке, находится в Израиле или Иране (анализ Microsoft Threat Intelligence).
Компрометация [email protected] особенно опасна, поскольку вредоносный код выполняется уже при импорте модуля. Согласно анализу Socket (разбор Socket), пакет:
- проверяет, что выполняется на Linux;
- скачивает артефакт по адресу https://git-tanstack.com/transformers.pyz;
- записывает его в
/tmp/transformers.pyzи выполняет с помощьюpython3без какой-либо проверки целостности.
Контекст и особенности угрозы
Минимум три аспекта делают Mini Shai-Hulud качественно новым уровнем угрозы для цепочки поставок программного обеспечения:
- Самораспространяющийся червь в экосистеме npm. Вредонос не просто разово компрометирует пакет, а активно ищет и заражает другие пакеты того же мейнтейнера, используя особенности управления токенами npm и интеграции с GitHub OIDC.
- Злоупотребление доверенными механизмами — SLSA и OIDC. Организации, полагавшиеся на SLSA Build Level 3 и «безсекретные» конвейеры с OIDC как на гарантию доверия, получили наглядный пример того, что компрометация раннера и workflow способна превратить эти механизмы в канал доставки вредоносного кода.
- Эвристическое уклонение и нетривиальная деструктивность. Использование инфраструктуры Session (домен getsession[.]org) снижает вероятность сетевой блокировки, а геозависимая логика в версии для mistralai создает комбинированную угрозу шпионажа и целевого уничтожения данных.
Атака демонстрирует зрелое понимание злоумышленниками внутренних механизмов GitHub Actions и управления кэшем, как ранее подробно описано в исследовании по отравлению кэша (анализ кэша GitHub Actions), и показывает, что даже «инфраструктурный» код CI/CD должен рассматриваться как приоритетный объект защиты.
Оценка воздействия
Наиболее подвержены риску:
- команды разработки, использующие TanStack и перечисленные выше пакеты npm/PyPI напрямую или транзитивно (через зависимости);
- организации, где GitHub Actions имеет широкие права (write на репозитории, управление релизами, раздача токенов OIDC в облачные аккаунты);
- компании, активно использующие ИИ-инструменты и библиотеки (Mistral, Guardrails, AI-плагины) и CI/CD-инфраструктуру на базе GitHub Actions.
Потенциальные последствия при отсутствии реакции включают:
- компрометацию цепочки поставок ПО: выпуск вредоносных версий внутренних библиотек и приложений через легитимные конвейеры сборки;
- утечку секретов (токены, пароли, ключи API) из GitHub, CI/CD и облачных окружений через внедренные workflow и сервис gh-token-monitor;
- прямой ущерб инфраструктуре — от несанкционированного доступа к репозиториям и облачным ресурсам до потенциального стирания файловой системы на отдельных целевых хостах;
- репутационные и регуляторные риски, если через зараженные цепочки поставок пострадают клиенты или партнеры.
Учитывая характер червя и критический балл CVSS 9.6 для CVE-2026-45321, инцидент следует рассматривать как инцидент высшего приоритета для всех организаций, полагающихся на GitHub Actions и публичные реестры зависимостей.
Практические рекомендации
1. Инвентаризация и очистка зависимостей
- Немедленно проверить, использовались ли в проектах следующие версии:
- все затронутые пакеты TanStack по advisory GHSA-g7cv-rxg3-hmpx;
guardrails-ai==0.10.1,mistralai==2.4.6(PyPI);@opensearch-project/opensearchверсий 3.5.3, 3.6.2, 3.7.0, 3.8.0;@squawk/[email protected],@squawk/[email protected],@squawk/[email protected];@tallyui/connector-medusaи@tallyui/connector-vendureверсий 1.0.1–1.0.3.
- Проверить файлы блокировок (package-lock.json, pnpm-lock.yaml, poetry.lock, requirements.txt) и журналы сборок CI, а не только текущую конфигурацию зависимостей.
- Для обнаруженных вредоносных версий:
- немедленно обновиться на исправленные версии или откатиться на известные безопасные релизы;
- пересобрать и заново задеплоить затронутые приложения.
2. Проверка признаков компрометации
- По логам сети и прокси: поиск обращений к
filev2.getsession[.]org,api.masscan[.]cloud,83.142.209[.]194,git-tanstack.com/transformers.pyz.
- В файловой системе разработческих машин и CI-раннеров:
- наличие
router_init.jsвне ожидаемого контекста; - следы
/tmp/transformers.pyzи его запусковpython3 /tmp/transformers.pyzв журналах shell.
- наличие
- В GitHub:
- поиск коммитов с автором
[email protected]:
git log --author="[email protected]"; - аудит каталога
.github/workflowsна предмет недавно добавленных или измененных workflow, особенно содержащих сериализацию секретов и сетевые обращения к внешним хостам; - проверка установленных и обновленных расширений для VS Code и Claude Code, появившихся синхронно с использованием скомпрометированных пакетов.
- поиск коммитов с автором
3. Управление токенами npm/GitHub и OIDC
- Отозвать и заново выпустить:
- токены публикации npm, особенно с флагом
bypass_2fa; - персональные токены доступа GitHub и секреты, используемые в GitHub Actions;
- ролей и доверительные политики, связанные с OIDC-токенами GitHub в облачных аккаунтах.
- токены публикации npm, особенно с флагом
- Ограничить использование триггера
pull_request_targetтолько случаями, где он объективно необходим; рассмотреть перевод чувствительных workflow наpull_requestбез повышенных прав. - Усилить политику прав для GitHub Actions:
- минимально необходимые разрешения (principle of least privilege) для
GITHUB_TOKENи отдельных workflow; - запрет на запись в репозиторий из workflow, связанных с обработкой внешних pull request, без дополнительной валидации.
- минимально необходимые разрешения (principle of least privilege) для
4. Политика доверия к SLSA и артефактам сборки
- Пересмотреть внутренние политики, которые автоматически доверяют пакетам с «высоким уровнем» SLSA или иным аттестациям provenance: аттестация источника сборки не отменяет необходимости анализа содержимого.
- Включить в pipeline:
- статический и динамический анализ зависимостей;
- проверку на известные IOC и домены командования;
- отдельный контроль безопасности для артефактов, приходящих из fork-репозиториев или внешних контрибьюторов.
Ключевой вывод для команд разработки и безопасности: Mini Shai-Hulud показал, что одних лишь доверенных конвейеров сборки, аттестаций SLSA и механизма OIDC недостаточно — необходимо немедленно провести аудит зависимостей на наличие затронутых версий, отозвать и переиздать все токены npm/GitHub, связанные с компрометированными проектами и раннерами, и ужесточить конфигурацию GitHub Actions (ограничить pull_request_target и права workflow), чтобы закрыть продемонстрированные в этой кампании векторы распространения.