317 npm-пакетов скомпрометированы вредоносом Mini Shai-Hulud
Вредонос связан с атакой на SAP трёхнедельной давности. Под угрозой — echarts-for-react (3,8 млн загрузок/мес), size-sensor (4,2 млн) и более 250 пакетов @antv.
Новости TprogerЕсли вы используете echarts-for-react, size-sensor или пакеты из семейства @antv — проверьте package-lock.json прямо сейчас. 19 мая 2026 года за 22 минуты был взломан npm-аккаунт atool: атакующий опубликовал 637 вредоносных версий 317 пакетов, суммарно набирающих десятки миллионов загрузок в месяц.
Ключевые выводы
317 npm-пакетов скомпрометированы через взломанный аккаунт atool: под угрозой echarts-for-react (3,8 млн загрузок/мес), size-sensor (4,2 млн) и более 250 пакетов @antv.
Вредонос — тот же тулкит Mini Shai-Hulud, что три недели назад атаковал SAP: одинаковая архитектура сканера, те же регулярные выражения для поиска учётных данных.
Payload объёмом 498 КБ крадёт учётные данные AWS (включая EC2 metadata и ECS), GitHub PAT, токены npm, SSH-ключи, данные 1Password и Bitwarden.
Двойная эксфильтрация: через публичные GitHub-репозитории с зашифрованными Git-объектами и HTTPS-запросы к t.m-kosche[.]com под видом OpenTelemetry-трейсов.
Вредонос перехватывает AI-агентов: внедряет SessionStart-хуки в Claude Code и Codex, а также задачи runOn:folderOpen в VS Code.
Масштаб атаки
Аккаунт atool на npm поддерживает 547 пакетов. Атакующий опубликовал вредоносные версии двумя волнами: первая — с 01:39 до 01:56 UTC (~317 версий), вторая — с 02:05 до 02:06 UTC (~314 версий). В результате 309 пакетов получили по два заражённых релиза каждый.
- size-sensor — 4,2 млн загрузок/мес
- echarts-for-react — 3,8 млн загрузок/мес
- @antv/scale — 2,2 млн загрузок/мес
- timeago.js — 1,15 млн загрузок/мес
- @antv/x6, @antv/g, @antv/g6 и более 250 других пакетов @antv
Важно: атакующий не переставил тег latest — но это не защищает. npm выбирает наибольшую версию, удовлетворяющую semver-диапазону, независимо от тега. Проект с "echarts-for-react": "^3.0.6" при следующей чистой установке получит вредоносную 3.2.7.
Как работает вредонос
498-килобайтный обфусцированный Bun-скрипт запускается через preinstall-хук. Дополнительно 630 из 637 версий добавляют в optionalDependencies ссылку на «сиротские» коммиты в репозитории antvis/G2 на GitHub с поддельным авторством. Этот механизм позволяет доставить payload даже при блокировке preinstall-хуков: npm резолвит github:-зависимости по SHA без проверки истории ветки.
Скрипт собирает учётные данные по всей цепочке AWS: переменные окружения, файлы конфигурации, EC2 Instance Metadata Service (169.254.169.254), ECS container metadata (169.254.170.2), Secrets Manager. Помимо этого — токены Kubernetes, HashiCorp Vault, GitHub PAT, токены npm, SSH-ключи и хранилища паролей: 1Password, Bitwarden, pass, gopass.
Эксфильтрация идёт двумя параллельными каналами: украденные данные коммитятся как Git-объекты в публичные GitHub-репозитории с названиями в формате Dune-вселенной (sardaukar-sandworm-42, fremen-stillsuit-7 и т.п.), а также отправляются RSA+AES-зашифрованными POST-запросами к t.m-kosche[.]com — замаскированными под данные OpenTelemetry.
Для закрепления в системе вредонос устанавливает systemd-сервис kitty-monitor (или LaunchAgent на macOS), который каждый час опрашивает GitHub Commit Search API в поиске RSA-PSS-подписанных команд по ключевому слову firedalazer. Это классический GitHub dead-drop C2-бэкдор.
Связь с атакой на SAP
Исследователи SafeDep идентифицировали payload как Mini Shai-Hulud — тот же тулкит, который три недели назад был использован в компрометации SAP. Совпадают архитектура сканера, набор регулярных выражений для поиска учётных данных и паттерны обфускации. Название отсылает к Дюне Фрэнка Герберта: Shai-Hulud — гигантский песчаный червь, пожирающий всё на своём пути.
Что делать
- Проверить
package-lock.jsonилиyarn.lock— найти версии из списка скомпрометированных пакетов (полный список в источнике). - Удалить
node_modulesи переустановить зависимости после того, как npm отзовёт вредоносные версии. - Проверить наличие
kitty-monitor.service(Linux) илиcom.user.kitty-monitor.plist(macOS). - Проверить файл
~/.claude/settings.json— не должно быть SessionStart-хуков, запускающихnode .claude/setup.mjs. - Ротировать все учётные данные: AWS IAM, GitHub PAT, npm-токены, SSH-ключи — если машина устанавливала заражённые пакеты.
Индикаторы компрометации
FAQ
Как проверить, затронуты ли мои проекты?
Откройте package-lock.json или yarn.lock и поищите пакеты из опубликованного SafeDep списка 317 пакетов. Особое внимание: echarts-for-react версий 3.0.7, 3.1.7, 3.2.7; size-sensor 1.0.4, 1.1.4, 1.2.4; timeago.js 4.1.2, 4.2.2. Если нашли — машина, запустившая npm install, потенциально скомпрометирована.
Что такое Mini Shai-Hulud?
Это многоцелевой credential-stealer тулкит, названный по гигантскому песчаному червю из романа «Дюна». Он охватывает AWS, GCP, Azure, Kubernetes, HashiCorp Vault, GitHub, npm, SSH и менеджеры паролей. Тот же тулкит был использован в атаке на SAP в начале мая 2026 года.
Почему semver-диапазоны опасны при таких атаках?
npm выбирает наибольшую версию, подходящую под диапазон, независимо от тега latest. Если у вас "echarts-for-react": "^3.0.6", при npm install вы получите 3.2.7 (вредоносную), а не 3.0.6. Зафиксируйте точные версии через npm shrinkwrap или используйте lockfile-проверку в CI.
Источник: SafeDep — Mini Shai-Hulud Strikes Again: 317 npm Packages Compromised