Яндекс.Метрика
Услуги Портфолио Контакты БлогНовости +7 (800) 511‑32‑27 Обсудить проект
Безопасность

Взлом npm keyv: 400+ пакетов заражены, токены Kubernetes и облачные ключи похищены

13 августа 2026·7 мин чтения
Supply Chainnpm
Взлом npm keyv: атака на цепочку поставок, 400+ пакетов заражены

Коротко о главном

4 августа 2026 года хакеры взломали аккаунт мейнтейнера популярной npm-библиотеки keyv (около 127 млн скачиваний в неделю) и внедрили в неё многоступенчатый вредонос Shai-Hulud, который мгновенно распространился на более чем 400 пакетов-зависимостей. Заражённые версии автоматически похищали токены Kubernetes, ключи AWS/GCP/Azure, GitHub-токены и AI-учётные данные прямо из CI/CD-пайплайнов. Суммарные загрузки затронутого семейства превысили 2 млрд в месяц.

Если ваш проект использует зависимости Node.js — в первую очередь keyv, cache-manager, cacheable-request или flat-cache, — нужно немедленно проверить установленные версии, удалить вредоносные артефакты и ротировать все облачные и инфраструктурные учётные данные. Атака уже завершена, но скомпрометированные секреты могут использоваться злоумышленниками прямо сейчас.

Что произошло 4 августа 2026 года

В 09:30 UTC атакующие скомпрометировали GitHub-аккаунт ключевого мейнтейнера библиотеки keyv и начали действовать немедленно. В 09:35 в npm был опубликован релиз keyv@6.0.0 с вредоносным preinstall-хуком в package.json — это означало, что вредоносный код запускался автоматически при каждом npm install, ещё до того, как разработчик успевал что-либо сделать. К 10:14 UTC атакующие расширили зону поражения: в npm-реестре появились девять скомпрометированных версий пакетов из семейства cacheable — включая cacheable-request, flat-cache и file-entry-cache.

Исследователи Wiz Research и Socket Security зафиксировали атаку как вариант кампании «Mini Shai-Hulud», ранее связанной с группой TeamPCP. Параллельно те же атакующие внедрили вредоносное ПО в Docker Hub-репозиторий инструмента Checkmarx KICS — широко используемого сканера безопасности инфраструктуры как кода. Это говорит о целенаправленной атаке именно на DevSecOps-инструментарий.

Как работал двухэтапный вредонос

Схема заражения была выстроена так, чтобы обойти базовые проверки безопасности. На первом этапе preinstall-хук запускал файл setup.mjs, который скачивал платформенно-подходящий рантайм Bun без верификации контрольной суммы — это позволяло обойти стандартные проверки целостности. Затем Bun выполнял второй этап — основной бандл Math_Symbol.js весом 728 КБ, замаскированный под легитимный JS-код.

Для сокрытия инфраструктуры управления (C2) атакующие использовали нестандартный трюк: адреса командных серверов хранились не в коде, а извлекались из смарт-контракта в сети Ethereum. Это затрудняло блокировку по IP и доменам. Вредонос также умел самораспространяться: используя похищенные npm-токены, он публиковал заражённые версии других пакетов в реестре, создавая волновой эффект заражения.

Для закрепления в системе вредонос устанавливал несколько механизмов персистентности: скрытый сервис gh-token-monitor в виде systemd-юнита (Linux) или LaunchAgent (macOS), а также внедрял вредоносные хуки в .claude/settings.json и .vscode/tasks.json, которые автоматически выполнялись при следующем открытии IDE.

Что именно похищал вредонос

Shai-Hulud прицельно собирал самые ценные учётные данные разработческой среды. Из инфраструктуры Kubernetes вредонос читал файл /var/run/secrets/kubernetes.io/serviceaccount/token, а также обращался к Kubernetes API напрямую, извлекая все секреты текущего namespace. Параллельно сканировались переменные окружения и конфигурационные файлы CI/CD: Jenkins, Argo CD, Harbor.

Облачные провайдеры атаковались через официальные metadata API: AWS Instance Metadata Service, GCP metadata endpoint, Azure IMDS. У HashiCorp Vault забирались токены через стандартный API. Вредонос также целенаправленно собирал AI-токены — Claude (Anthropic), OpenAI, Cursor и Gemini. Дополнительно под прицелом оказались приватные ключи криптокошельков Solana, Monero и Foundry.

Похищенные данные эксфильтровались через создание приватных GitHub-репозиториев в аккаунте жертвы — механизм, практически неотличимый от легитимной активности разработчика.

Кто стоит за атакой — группа TeamPCP

По оценке Wiz Research, атака является частью кампании «Mini Shai-Hulud» и приписывается группе TeamPCP. Эта же группа была связана с предыдущими атаками на npm-экосистему через пакеты из пространства имён antv. Эволюция техник — переход на Ethereum-смарт-контракты для хранения C2-инфраструктуры — свидетельствует о том, что атакующие системно совершенствуют методы обхода защиты.

Параллельное заражение Checkmarx KICS указывает на стратегию целенаправленного удара по DevSecOps-инструментам: именно они имеют широкий доступ к секретам и инфраструктурным ключам в CI/CD-пайплайнах. Команды, использующие инструменты безопасности с открытым исходным кодом, оказались особенно уязвимы — парадоксальным образом именно защитный инструментарий стал вектором атаки.

Как понять, что вас затронуло

Прежде чем ротировать учётные данные, необходимо убедиться, что вредоносные артефакты удалены, иначе ротация бессмысленна. Проверьте наличие следующих признаков заражения:

Файлы-индикаторы на машинах разработчиков и CI-агентах:

  • ~/.local/bin/gh-token-monitor.sh
  • ~/.config/gh-token-monitor/ (директория)
  • macOS: ~/Library/LaunchAgents/com.user.gh-token-monitor.plist
  • Linux: ~/.config/systemd/user/gh-token-monitor.service
  • Изменения в .claude/settings.json или .vscode/tasks.json с подозрительными командами

Проверка npm-зависимостей: запустите npm list keyv cacheable-request cache-manager flat-cache и сверьте версии с опубликованными IOC. Если в lock-файле зафиксирован keyv@6.0.0 с хэшом setup.mjs: 54dc7ea5... — ваша среда была затронута.

Проверка активности: просмотрите историю GitHub-репозиториев аккаунтов, которые имели доступ к npm-токенам в период с 4 по 6 августа — атакующие создавали скрытые приватные репозитории для эксфильтрации данных.

Что делать прямо сейчас — порядок реагирования

Реагирование требует строгого порядка действий: сначала изолировать и удалить вредонос, затем ротировать учётные данные. Ротация до удаления вредоноса бессмысленна — новые ключи будут немедленно похищены.

Шаг 1. Заморозьте CI/CD-пайплайны. Остановите все автоматические деплои до завершения расследования, чтобы предотвратить дальнейшее распространение и использование похищенных ключей для деплоя.

Шаг 2. Удалите артефакты вредоноса. На всех машинах разработчиков и CI-агентах удалите файлы-индикаторы из предыдущего раздела. Отключите и удалите systemd/LaunchAgent-сервис gh-token-monitor. Восстановите легитимные версии .vscode/tasks.json и .claude/settings.json из Git-истории.

Шаг 3. Обновите зависимости. Обновите keyv, cacheable-request, cache-manager, flat-cache и связанные пакеты до последних безопасных версий, опубликованных после 6 августа 2026. Пересоберите все образы Docker и CI-артефакты с нуля (не из кэша).

Шаг 4. Ротируйте все потенциально скомпрометированные учётные данные. Сюда входят: npm-токены публикации, GitHub Personal Access Tokens, ключи AWS/GCP/Azure, токены Kubernetes service accounts, секреты HashiCorp Vault, AI API-ключи (Anthropic/OpenAI/Google), ключи развёртывания Jenkins, Argo CD, Harbor. Это масштабная операция — планируйте её последовательно, начиная с ключей с наиболее широким доступом.

Шаг 5. Проверьте историю доступов. Изучите облачные audit logs за период с 4 по 10 августа на предмет аномальной активности: необычные создания ресурсов, доступ к S3/GCS/Azure Blob, изменения IAM-ролей, создание новых пользователей или сервисных аккаунтов.

Подробная проверка кода и зависимостей поможет выявить другие уязвимые точки в цепочке поставок и предотвратить повторение подобных инцидентов.

Часто задаваемые вопросы

Какие конкретно версии пакетов заражены? Прежде всего keyv@6.0.0, cacheable-request@13.0.20, cache-manager@7.2.10. Полный список IOC опубликован Socket Security и Wiz Research — сверяйтесь с актуальными источниками, так как список постоянно уточняется.

Достаточно ли обновить зависимости без ротации ключей? Нет. Если заражённая версия пакета была установлена в вашем CI/CD или на машине разработчика, вредонос уже выполнился и мог передать учётные данные атакующим. Обновление устраняет угрозу дальнейшего заражения, но не отменяет факт возможной компрометации.

Задета ли только экосистема Node.js? Основной удар пришёлся на npm, однако параллельное заражение Docker Hub-образа Checkmarx KICS свидетельствует о более широком охвате. Команды, использующие скомпрометированные Docker-образы в CI/CD, также могли быть затронуты независимо от технологического стека.

Есть ли CVE для этой атаки? На момент публикации отдельный CVE для этой цепочки атаки не присвоен. Отслеживайте обновления через Socket Security Advisory и Wiz Research.

Нужно ли уведомлять регуляторов и клиентов? Если в скомпрометированных секретах находились ключи доступа к данным пользователей или клиентским средам — да. Проконсультируйтесь с юридической командой на предмет обязательств по GDPR (72-часовое уведомление), ФЗ-152 и отраслевым стандартам.

Источники

Wiz Research — keyv and cacheable npm Supply Chain Attack Analysis, 4 августа 2026 (первоисточник: исследование атаки).

Socket Security — Popular npm packages in the keyv and cacheable namespaces compromised in active supply chain attack, 4 августа 2026 (IOC, хронология, технический разбор).

Chainguard — The keyv and cacheable npm Supply Chain Attack: Inside the Mini Shai-Hulud Campaign, 2026 (атрибуция TeamPCP).

Aikido Security — Keyv and friends compromised in npm supply chain attack, 2026 (анализ вредоноса).

Ваши зависимости под контролем?

Атака на keyv показала: скомпрометированная npm-зависимость моментально опустошает CI/CD-секреты. YuSMP проведёт аудит кода и зависимостей вашего проекта — выявит уязвимые компоненты цепочки поставок до того, как это сделают злоумышленники.

Заказать аудит безопасности
Материал подготовлен редакцией YuSMP Group по открытым источникам. Нужна экспертиза по теме или разработка под задачу — обсудим проект.