Mini Shai-Hulud: самораспространяющийся червь через GitHub Actions, npm и PyPI

Фото автора

CyberSecureFox Editorial Team

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. Подтверждены следующие скомпрометированные пакеты и версии:

Анализ 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 качественно новым уровнем угрозы для цепочки поставок программного обеспечения:

  1. Самораспространяющийся червь в экосистеме npm. Вредонос не просто разово компрометирует пакет, а активно ищет и заражает другие пакеты того же мейнтейнера, используя особенности управления токенами npm и интеграции с GitHub OIDC.
  2. Злоупотребление доверенными механизмами — SLSA и OIDC. Организации, полагавшиеся на SLSA Build Level 3 и «безсекретные» конвейеры с OIDC как на гарантию доверия, получили наглядный пример того, что компрометация раннера и workflow способна превратить эти механизмы в канал доставки вредоносного кода.
  3. Эвристическое уклонение и нетривиальная деструктивность. Использование инфраструктуры 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 в облачных аккаунтах.
  • Ограничить использование триггера pull_request_target только случаями, где он объективно необходим; рассмотреть перевод чувствительных workflow на pull_request без повышенных прав.
  • Усилить политику прав для GitHub Actions:
    • минимально необходимые разрешения (principle of least privilege) для GITHUB_TOKEN и отдельных workflow;
    • запрет на запись в репозиторий из workflow, связанных с обработкой внешних pull request, без дополнительной валидации.

4. Политика доверия к SLSA и артефактам сборки

  • Пересмотреть внутренние политики, которые автоматически доверяют пакетам с «высоким уровнем» SLSA или иным аттестациям provenance: аттестация источника сборки не отменяет необходимости анализа содержимого.
  • Включить в pipeline:
    • статический и динамический анализ зависимостей;
    • проверку на известные IOC и домены командования;
    • отдельный контроль безопасности для артефактов, приходящих из fork-репозиториев или внешних контрибьюторов.

Ключевой вывод для команд разработки и безопасности: Mini Shai-Hulud показал, что одних лишь доверенных конвейеров сборки, аттестаций SLSA и механизма OIDC недостаточно — необходимо немедленно провести аудит зависимостей на наличие затронутых версий, отозвать и переиздать все токены npm/GitHub, связанные с компрометированными проектами и раннерами, и ужесточить конфигурацию GitHub Actions (ограничить pull_request_target и права workflow), чтобы закрыть продемонстрированные в этой кампании векторы распространения.


CyberSecureFox Editorial Team

Редакция CyberSecureFox освещает новости кибербезопасности, уязвимости, malware-кампании, ransomware-активность, AI security, cloud security и security advisories вендоров. Материалы готовятся на основе official advisories, данных CVE/NVD, уведомлений CISA, публикаций вендоров и открытых отчётов исследователей. Статьи проверяются перед публикацией и обновляются при появлении новых данных.

Оставьте комментарий

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.