Атака использовала именно те механизмы защиты, которым разработчики доверяли больше всего.

Mini Shai-Hulud снова ударил по цепочке поставок. Но если первая волна атак затронула пакеты SAP, теперь вредоносная схема разрослась до сотен заражённых версий и стала бить по местам, где обычно хранятся самые ценные доступы разработчиков.
Новая волна затронула npm и PyPI, прошла через популярные инструменты разработки и показала неприятную деталь: даже 2FA, доверенная публикация через GitHub Actions и корректная запись о происхождении сборки не гарантируют, что опубликованный пакет безопасен.
По данным Aikido, в npm обнаружили 373 вредоносные версии в 169 пакетах. Wiz.io связывает атаку с группой TeamPCP и пишет, что операция началась 11 мая 2026 года и затронула сразу несколько пространств имён. Endor Labs отдельно указывает на более чем 160 скомпрометированных версий и подчёркивает, что среди них были 84 пакета @tanstack, включая @tanstack/react-router с примерно 12 млн загрузок в неделю.
Помимо TanStack, в отчётах фигурируют пакеты @uipath, @mistralai, @squawk, @tallyui, @beproduct, @draftlab, @draftauth, @taskflow-corp и @tolka, а также отдельные пакеты без пространства имён. Wiz.io также сообщил о вредоносных версиях PyPI-пакетов guardrails-ai 0.10.1 и mistralai 2.4.6. Позже компания уточнила, что в нагрузке для @uipath и @mistralai нашли ошибку, из-за которой вредоносный код в этих случаях не работал.
Самая заметная часть атаки связана с TanStack. По данным Wiz.io и Endor Labs, злоумышленники использовали форк репозитория TanStack/router и отдельный коммит вне основной ветки с хешем 79ac49eedf774dd4b0cfa308722bc463cfe5885c. Хотя коммит не входил в основную историю проекта, GitHub позволял обращаться к нему напрямую. Так атакующие добавили зависимость @tanstack/setup с prepare-скриптом для запуска Bun и файла tanstack_runner.js.
В скомпрометированные пакеты также попал обфусцированный файл router_init.js размером около 2,3 МБ. При установке npm мог выполнить prepare-скрипт Git-зависимости, после чего вредоносная нагрузка запускалась на машине разработчика или CI-раннере. Завершение команды с ошибкой выглядело менее подозрительно, поскольку зависимость была необязательной.
Отдельный риск связан с доверенной публикацией через GitHub Actions. Атакующие могли получить временный npm-токен через OIDC и опубликовать вредоносные версии без кражи долгоживущих npm-ключей. Поэтому наличие записи о происхождении сборки показывало, где собрали пакет, но не доказывало, что сборка была разрешённой и безопасной.
Нагрузка Mini Shai-Hulud искала GitHub- и npm-токены, секреты GitHub Actions, облачные ключи AWS, GCP и Azure, токены Kubernetes, данные HashiCorp Vault, SSH-ключи и переменные окружения. На машинах разработчиков вредоносный код мог закрепляться через файлы в .claude и .vscode. Wiz.io также описывает демон gh-token-monitor для macOS и Linux, связанный с проверкой GitHub-токенов.
Для вывода данных использовались несколько каналов, включая домен git-tanstack.com, сеть Session через filev2.getsession.org и GitHub-репозитории-приманки с тематикой «Дюны». В Python-варианте Wiz.io описывает загрузку transformers.pyz с git-tanstack.com и кражу данных, включая хранилища паролей 1Password и Bitwarden.
Aikido, Wiz.io и Endor Labs сходятся в главном: Mini Shai-Hulud уже не просто похищает секреты, а пытается превращать доступы разработчиков и CI/CD в новый канал распространения.
ИБ-командам стоит проверить lock-файлы, кеши, журналы CI, наличие router_init.js, tanstack_runner.js, setup.mjs, @tanstack/setup и обращения к filev2.getsession.org. При признаках запуска заражённой версии нужно менять не только npm-токены, но и GitHub-доступы, облачные ключи, Kubernetes- и Vault-секреты, а также проверять собственные пакеты на неожиданные публикации после 11 мая 2026 года.