Исходный код вредоносного фреймворка Shai-Hulud, связанного с атаками на цепочки поставок, попал в открытый доступ

security

Группа TeamPCP, стоявшая за серией громких атак на реестры пакетов npm и PyPI в начале и середине 2026 года, неожиданно выложила в открытый доступ полный исходный код своего наступательного инструментария. Речь идет о фреймворке Shai-Hulud, который применялся для кражи учетных данных, отравления цепочек поставок и шифрованной эксфильтрации данных. Событие произошло 12 мая: на GitHub появился репозиторий с соответствующим названием, который вскоре был удален, однако за это время несколько пользователей успели сделать форки. Благодаря этому аналитики получили возможность изучить код, ранее доступный только в виде скомпилированных артефактов.

Описание

Содержимое репозитория не оставляет сомнений в авторстве. В файле README указано: "Love - TeamPCP" и "Change keys and C2 as needed". Все три коммита подписаны псевдонимом TeamPCP_OSS и имеют поддельную дату - 1 января 2099 года. Исходный код фреймворка полностью соответствует ранее наблюдаемым вредоносным сборкам, включая файлы router_init.js, setup.mjs и opensearch_init.js. Как сообщили специалисты по безопасности, этот инструментарий представляет собой модульное приложение на TypeScript и Bun, предназначенное для развертывания в конвейерах непрерывной интеграции (CI/CD) и на рабочих станциях разработчиков.

Архитектура Shai-Hulud построена по принципу конвейера с четким разделением этапов. Первая стадия - загрузчики (BASH_LOADER.sh, PYTHON_LOADER.py и config.mjs), которые скачивают среду выполнения Bun и запускают упакованный JavaScript-модуль. Затем в дело вступают поставщики - модули сбора учетных данных, нацеленные на файловую систему, переменные окружения, раннеры GitHub Actions, облачные платформы AWS, Kubernetes и HashiCorp Vault. Собранная информация буферизируется в коллекторе с настраиваемым порогом сброса (по умолчанию 100 Кбайт) и передается диспетчеру, который отвечает за шифрованную отправку по одному из каналов. Для эксфильтрации используются HTTPS-запросы к C2-домену или скрытые репозитории GitHub, выполняющие роль "почтовых ящиков". Наконец, модули-мутаторы обеспечивают распространение заражения через компрометацию веток репозиториев и публикацию отравленных пакетов в npm.

Сбор учетных данных охватывает более сотни целевых путей на Linux, macOS и Windows. Среди них - файлы облачных провайдеров (~/.aws/credentials, ~/.config/gcloud), SSH-ключи, конфигурации Kubernetes, данные криптокошельков, мессенджеров и инструментов разработки. Особого внимания заслуживает модуль для чтения памяти процесса Runner.Worker на раннерах GitHub Actions. Он напрямую извлекает секреты из виртуальной памяти до того, как сработает механизм маскировки GitHub. Кроме того, фреймворк умеет перехватывать OIDC-токены, выданные GitHub Actions, и обменивать их на токены для публикации пакетов в npm через доверенное издательство (trusted publishing). Эта техника позволяет подделывать цифровые подписи Sigstore: злоумышленник получает настоящий сертификат от Fulcio и вносит запись в реестр Rekor, делая вредоносный пакет неотличимым от легитимного.

Шифрование эксфильтруемых данных реализовано по гибридной схеме: полезная нагрузка сжимается gzip, шифруется алгоритмом AES-256-GCM, а ключ шифрования дополнительно защищается асимметричным шифрованием RSA-4096 с OAEP. Приоритетным каналом отправки является HTTPS-соединение на домен git-tanstack.com, имитирующий легитимный проект TanStack. Если он недоступен, атакующий использует поиск по GitHub для обнаружения подписанного резервного домена: специальный коммит с строкой "thebeautifulmarchoftime" и криптографической подписью позволяет динамически менять C2. В крайнем случае данные сохраняются в открытые репозитории с названиями, взятыми из вселенной "Дюны" (Shai-Hulud: Here We Go Again). Именно этот канал несет в себе скрытую угрозу: если вместе с токеном GitHub будет передан управляющий токен, в системе жертвы устанавливается демон, который опрашивает API GitHub каждую минуту и в случае отзыва токена выполняет команду rm -rf ~/. Авторы назвали этот механизм "выключателем мертвеца" - он призван препятствовать реагированию на инциденты.

Закрепление в системе осуществляется двумя способами. На обычных хостах фреймворк запускает фоновый процесс с файлом блокировки. Но главный вектор - внедрение вредоносных файлов в репозитории через хуки среды разработки. В частности, код добавляет в репозиторий файлы .vscode/tasks.json и .claude/settings.json. Первый заставляет VSCode выполнить полезную нагрузку при открытии папки с проектом, второй - при запуске инструмента Claude Code. Это означает, что любому разработчику достаточно клонировать зараженный репозиторий, и вредоносный код выполнится без дополнительных действий. Похожий механизм использовался для атак на пакеты: злоумышленник добавляет в package.json скрипт preinstall, который скачивает и запускает загрузчик.

Обфускация итогового файла router_init.js заслуживает отдельного упоминания. Каждая сборка генерирует уникальную случайную пассфразу, на основе которой с помощью PBKDF2 создается ключ для полиалфавитного шифрования всех строк. Две сборки из одного исходника дают совершенно разные бинарные файлы, что делает бесполезным сигнатурный анализ. Дополнительно применяется минификатор Bun и javascript-obfuscator, а имена переменных окружения также шифруются. Перед выполнением фреймворк проверяет системную локаль: если она указывает на русский язык (префикс ru), выполнение немедленно прекращается. Это типичный для восточноевропейских киберпреступников "географический предохранитель", исключающий поражение систем в СНГ.

С одной стороны, она резко снижает порог входа для других злоумышленников, желающих применить тактики TeamPCP, включая подделку провенанса и атаки через ИИ-инструменты. С другой - дает защитникам полную картину методов противника: список целей для сбора данных, механизмы обфускации, схемы распространения. Теперь можно целенаправленно выявлять подобные индикаторы в инфраструктуре. Эксперты рекомендуют уделить особое внимание проверке хуков в .vscode и .claude, а также анализу необычных задач в системе непрерывной интеграции. Революция в методах атак требует такой же решительной эволюции в защите, и утечка Shai-Hulud - серьезный шаг к пониманию правил новой игры.

Индикаторы компрометации

IPv4

  • 83.142.209.194

Domains

  • git-tanstack.com

SHA256

  • 2258284d65f63829bd67eaba01ef6f1ada2f593f9bbe41678b2df360bd90d3df
  • 29ac906c8bd801dfe1cb39596197df49f80fff2270b3e7fbab52278c24e4f1a7
  • 3f3f42d072bd36860ab7bd7fb5e10ac0d22c741c13c89505ccd6ec0ea572eea7
  • 619c56acf572df75b6004a6fc013c80900316a76099b241d64312da3a44f10b4
  • 77d92efe7af3547f71fd41d4a884872d66b1be9499eaa637e91eac866911694d
  • ab4fcadaec49c03278063dd269ea5eef82d24f2124a8e15d7b90f2fa8601266c
  • c55a10759f6f415a536940a75f42aa372878a51f8eb97468551eabf6d88ae492
  • f2157f1cecbf3995aafad750e6e805c472cec466a53d17c2063f266ad2b3d625
  • f7a1e56b6dbd42778fe349b8412ab9749c78fa2bf41ea90b1165615ddfee52e4

Комментарии: 0