Астрологи объявили неделю атак на цепочку поставок.

История Shai-Hulud перестала быть обычной кампанией по краже секретов у разработчиков. Группа TeamPCP, связанная с серией атак на npm и PyPI, фактически открыла исходный код своего инструментария на GitHub. Репозиторий быстро удалили, но копии уже разошлись по форкам, а сторонние злоумышленники начали добавлять собственные изменения.
OX Security сообщает, что код появился, вероятно, через скомпрометированные GitHub-аккаунты. В репозитории лежал не просто набор файлов, а рабочая инструкция по развёртыванию вредоносного фреймворка. Все коммиты были датированы 1 января 2099 года и подписаны TeamPCP_OSS, что похоже на намеренную маскировку следов. Авторы отчёта также нашли связанные аккаунты agwagwagwa, headdirt и tmechen. Прямая принадлежность к TeamPCP не доказана, но один из них (agwagwagwa) уже предложил добавить поддержку FreeBSD, что может расширить охват Shai-Hulud.
Datadog Security Labs изучила копию репозитория до удаления и пришла к более тревожному выводу. Перед специалистами оказался не черновой код, а модульный TypeScript/Bun-фреймворк для кражи учётных данных, заражения проектов и вывода данных через зашифрованные каналы. Архитектура разделена на загрузчики, сборщики секретов, диспетчер доставки, каналы вывода и модули распространения. Такая схема позволяет быстро менять части атаки без переписывания всего инструментария.
Shai-Hulud ищет ценные данные на рабочих станциях и в CI/CD. В зоне интереса находятся SSH-ключи, файлы .env, токены GitHub и npm, конфиги AWS, Kubernetes, HashiCorp Vault, Docker, облачные учётные записи, криптокошельки, данные мессенджеров и настройки ИИ-инструментов. На GitHub Actions фреймворк пытается читать память процесса Runner.Worker через /proc, чтобы достать секреты до маскировки. Такой приём обходит защиту, которая скрывает токены только в логах, но не мешает читать их из памяти раннера.
Вывод данных построен аккуратно. Сначала Shai-Hulud сжимает собранные сведения, затем шифрует их AES-256-GCM, а ключ закрывает RSA-4096. Основной канал ведёт на домен git-tanstack[.]com, который имитирует легитимную инфраструктуру. Если сервер недоступен, код ищет на GitHub специально подписанные коммиты с резервным адресом C2. При полном отказе сетевого канала украденные токены используются для создания публичных репозиториев, куда данные попадают в зашифрованных JSON-файлах.
Особенно опасна часть, отвечающая за распространение. Фреймворк может подменять содержимое репозиториев, добавляя .vscode/tasks.json и хуки Claude Code. В результате вредоносный код запускается при открытии проекта в VSCode или старте сессии Claude Code.
Для npm предусмотрены два пути: публикация заражённой версии через украденный токен и злоупотребление OIDC-механизмом доверенной публикации. Во втором сценарии Shai-Hulud формирует Sigstore-происхождение через Fulcio и Rekor, из-за чего вредоносный пакет может выглядеть как легитимная сборка с подтверждённой аттестацией.
Отдельный риск связан с так называемым «переключателем мертвеца» (deadman switch). Если фреймворк закрепился через gh-token-monitor, отзыв GitHub-токена может запустить команду удаления домашнего каталога. Поэтому Datadog советует сначала отключать LaunchAgent на macOS или systemd-службу на Linux, а уже затем менять ключи и токены.
Публикация кода меняет масштаб угрозы. Раньше Shai-Hulud был инструментом конкретной группы, однако теперь его логику могут скопировать менее квалифицированные злоумышленники. Для защитников утечка тоже полезна: стали видны цели сбора данных, механика заражения пакетов, обходы детектирования и новые риски вокруг цепочки поставок ИИ-инструментов разработки.
Организациям стоит проверить CI/CD, рабочие станции разработчиков, npm-пакеты и репозитории на следы .claude/setup.mjs, .vscode/setup.mjs, коммитов от claude@users.noreply.github.com и описаний репозиториев «Shai-Hulud: Here We Go Again».