
Проверка IOC для атаки на цепочку поставок npm TanStack/Mini Shai-Hulud (CVE-2026-45321)
curl -fsSL https://raw.githubusercontent.com/nkopylov/tanscript-exploit-check/main/check-tanstack-exploit.sh | bash
Или склонируйте репозиторий и запустите локально:
git clone https://github.com/nkopylov/tanscript-exploit-check.git
cd tanscript-exploit-check
./check-tanstack-exploit.sh [project_dir ...]
Этот чекер покрывает две волны кампании атаки на цепочку поставок Mini Shai-Hulud от TeamPCP:
11 мая 2026 (19:20–19:26 UTC) злоумышленник опубликовал 84 вредоносные версии в 42 npm-пакетах @tanstack/* за 6-минутное окно. Атака также затронула пакеты Mistral AI, UiPath, OpenSearch и другие — в общей сложности более 170 пакетов в npm и PyPI.
Учётные данные мейнтейнеров не были похищены. Атакующий использовал саму цепочку доверия CI/CD через атаку в 3 этапа:
pull_request_target — одноразовый GitHub-форк открыл PR, который выполнял код атакующего в контексте безопасности базового репозитория19 мая 2026 (01:39–02:06 UTC) скомпрометированный npm-аккаунт atool ([email protected]) опубликовал 637 вредоносных версий в 314 пакетах двумя автоматизированными волнами. Цели с высоким влиянием включают:
size-sensor (4,2 млн загрузок/месяц)echarts-for-react (3,8 млн загрузок/месяц)@antv/scale (2,2 млн загрузок/месяц)timeago.js (1,15 млн загрузок/месяц)@antv/* и другихВ этой волне использовалась полезная нагрузка на основе Bun (498КБ index.js), запускаемая через "preinstall": "bun run index.js", с нагрузкой второй стадии, скрытой в поддельных коммитах, запушенных в GitHub-репозиторий antvis/G2 через эксплуатацию расшаривания fork-объектов.
Обе волны используют одно и то же семейство инструментов «Mini Shai-Hulud»:
gh-token-monitor (волна 1) и kitty-monitor (волна 2) через LaunchAgent/systemd; хуки в .claude/settings.json и .vscode/tasks.jsontoJSON(secrets), обмен npm OIDC-токеновrm -rf ~/ при отзыве GitHub-токена, пока демон активенfiredalazer, команды, подписанные RSA-PSS| # | Проверка | Описание |
|---|---|---|
| 1 | Рубильник («мёртвая рука») | Демоны постоянства: gh-token-monitor (волна 1), kitty-monitor (волна 2) |
| 2 | Вредоносные процессы | Известные имена процессов атакующего (обе волны) |
| 3 | Файлы полезной нагрузки | Известные вредоносные файлы по имени и SHA-256 хэшу (4 хэша) |
| 4 | Хуки Claude Code | Внедрённые хуки в .claude/settings.json + общая эвристика SessionStart |
| 5 | Задачи VS Code | Внедрённые задачи в .vscode/tasks.json + общая эвристика runOn: folderOpen |
| 6 | GitHub Actions | toJSON(secrets) в любом workflow + предупреждение о pull_request_target |
| 7 | npm lockfile | Скомпрометированные версии пакетов в lockfile |
| 8 | optionalDependencies | Вредоносные @tanstack/setup и @antv/setup + 4 SHA поддельных коммитов |
| 9 | Сетевые соединения | Активные подключения к инфраструктуре C2 (5 доменов/IP) |
| 10 | DNS-кэш | Раннее разрешение доменов атакующего (4 домена) |
| 11 | Git-ветки | Паттерн именования веток атакующего в тематике «Дюны» |
| 12 | Жизненные циклы скриптов | Эвристика: bun run в preinstall/postinstall (установленные пакеты) |
| 13 | Мёртвая точка C2 | Ключевое слово firedalazer и маркеры «Shai-Hulud» в истории git |
| 14 | GitHub-зависимости | Эвристика: зависимости github: привязанные к SHA коммита в optionalDeps |
Затронуты только @tanstack/router* и @tanstack/start*. НЕ затронуты: @tanstack/query*, @tanstack/table*, @tanstack/form*, @tanstack/virtual*, @tanstack/store.
| Пакет | Вредоносные версии | Первая безопасная версия |
|---|---|---|
@tanstack/react-router | 1.169.5, 1.169.8 | 1.169.9 |
@tanstack/router-core | 1.169.5, 1.169.8 | 1.169.9 |
@tanstack/vue-router | 1.169.5, 1.169.8 | 1.169.9 |
@tanstack/solid-router | 1.169.5, 1.169.8 | 1.169.9 |
@tanstack/react-start | 1.167.68, 1.167.71 | 1.167.72 |
@tanstack/router-plugin | 1.167.38, 1.167.41 | 1.167.42 |
Полный список всех 42 пакетов см. в полном уведомлении.
Все пакеты, опубликованные npm-пользователем atool ([email protected]), получили вредоносные версии 19 мая 2026 года. Пакеты с высоким влиянием включают:
| Пакет | Ежемесячные загрузки |
|---|---|
size-sensor | 4,2 млн |
echarts-for-react | 3,8 млн |
@antv/scale | 2,2 млн |
timeago.js | 1,15 млн |
Плюс 310+ пакетов, в основном в скоупе @antv/* (@antv/g2, @antv/g6, @antv/l7, @antv/s2, @antv/x6, @antv/f2 и т.д.), ai-figure, timeago-react, jest-canvas-mock, jest-date-mock и другие.
Полный список см. в анализе SafeDep.
КРИТИЧЕСКИ ВАЖНО: отключите рубильник («мёртвую руку») ПЕРЕД отзывом любых токенов. Вредоносное ПО стирает
$HOME, если токены отозваны, пока демон активен.
gh-token-monitor И kitty-monitor) и удалите службы LaunchAgent/systemd.claude/router_runtime.js, .vscode/setup.mjs, ~/.local/share/kitty/cat.py, /var/tmp/.gh_update_state и т.д.)node_modules и lockfile, переустановите с --ignore-scriptsapi.masscan.cloud, filev2.getsession.org, git-tanstack.com, t.m-kosche.com)