Кампания Mini Shai-Hulud: вредоносные npm-пакеты Red Hat Cloud Services похищают секреты разработчиков

security

В начале июня 2026 года специалисты по информационной безопасности зафиксировали масштабную атаку на цепочку поставок программного обеспечения. Злоумышленники скомпрометировали десятки npm-пакетов из пространства @redhat-cloud-services, выпущенных под брендом Red Hat. Инцидент получил неофициальное название Mini Shai-Hulud - по аналогии с недавно опубликованным в открытом доступе инструментарием для атак такого типа. Главная цель атаки - кража учётных данных разработчиков и секретов систем непрерывной интеграции и доставки (CI/CD).

Описание

Атака была обнаружена аналитиками компании Socket, которая специализируется на выявлении угроз в открытых реестрах пакетов. Согласно их данным, вредоносные версии пакетов были опубликованы в реестре npm 1 июня 2026 года. В общей сложности под удар попали более 90 различных пакетов, включая такие популярные, как @redhat-cloud-services/chrome, @redhat-cloud-services/frontend-components, @redhat-cloud-services/vulnerabilities-client и многие другие. Все они предназначены для работы с облачными сервисами Red Hat и широко используются в корпоративной разработке.

Механизм атаки типичен для современных кампаний по компрометации цепочки поставок. Вредоносный код внедрялся через скрипт preinstall в файле package.json. Это означает, что при выполнении команды npm install пакет запускал заражённый код ещё до того, как разработчик успевал импортировать или использовать библиотеку. Первичный загрузчик (файл index.js) содержал обфусцированный код, который восстанавливался с помощью простого преобразования символов и затем выполнялся через eval.

Далее загрузчик расшифровывал две встроенные полезные нагрузки с помощью симметричного шифрования AES-128-GCM. Первая нагрузка представляла собой вспомогательный скрипт для установки среды выполнения Bun, если она ещё не была установлена в системе. Вторая - основная вредоносная программа, отвечающая за сбор и кражу секретов. После расшифровки эта программа записывалась во временный файл со случайным именем в каталоге /tmp, запускалась на выполнение с помощью Bun, а затем сразу удалялась. Такой подход позволяет обойти статический анализ и затрудняет обнаружение.

Вредоносная программа содержит несколько модулей, каждый из которых нацелен на определённый тип учётных данных. Среди целей - токены GitHub CLI, личные токены доступа GitHub, токены npm, учётные данные облачных провайдеров (AWS, Azure, GCP), конфигурационные файлы Docker и Kubernetes, ключи SSH, а также файлы криптовалютных кошельков. Особое внимание уделено среде GitHub Actions: злоумышленники пытаются извлечь секреты из памяти runner-ов с помощью привилегированного выполнения команд. Кроме того, программа собирает переменные окружения, имя хоста и имя пользователя.

Кража осуществляется по двум каналам. Основной - зашифрованная HTTP-сессия на удалённый сервер, адрес которого замаскирован под легитимный API Anthropic. Резервный - использование GitHub API для создания коммитов с зашифрованными JSON-файлами в репозиториях жертвы. В commit message встраивается строка "IfYouInvalidateThisTokenItWillNukeTheComputerOfTheOwner", которая, по всей видимости, служит идентификатором для злоумышленников.

Специалисты Socket сообщили, что атака использует тактики, очень близкие к инструментарию Shai-Hulud, который недавно был опубликован командой TeamPCP в открытом доступе. Поскольку инструмент стал общедоступным, установить точную принадлежность атакующих крайне сложно. Барьер для проведения подобных операций существенно снизился, и теперь с ними может справиться широкий круг злоумышленников.

Любопытно, что в коде присутствует проверка на русскоязычную локаль системы. Если переменные окружения указывают на русский язык, вредоносное поведение изменяется или вовсе не запускается. Это может свидетельствовать о желании авторов избежать атак на системы, расположенные в России, либо о попытке усложнить анализ. Также имеется механизм демонизации: на обычных (не CI) системах программа порождает фоновый процесс, который продолжает работу после завершения установки пакета, используя блокировочный файл tmp.0987654321.lock для предотвращения дублирования.

Последствия инцидента могут быть серьёзными. Любой разработчик или CI-система, установившие одну из заражённых версий пакета, должны считать себя потенциально скомпрометированными. Утечка токенов GitHub и npm грозит дальнейшим распространением атаки на другие репозитории и пакеты. Облачные учётные данные могут быть использованы для доступа к инфраструктуре компаний, а SSH-ключи - для проникновения на серверы. Особенно опасна ситуация для организаций, использующих GitHub Actions: злоумышленники могут не только украсть секреты, но и модифицировать рабочие процессы, внедряя вредоносный код в другие проекты.

Компания Red Hat, вероятно, уже предприняла меры по удалению заражённых версий из реестра. Однако пользователям необходимо самостоятельно проверить свои файлы блокировок зависимостей (package-lock.json, yarn.lock и другие) на наличие версий, указанных в списке Socket. Если заражённый пакет был установлен, недостаточно просто удалить node_modules или деинсталлировать пакет - вредоносная программа могла оставить следы в системе, включая фоновые процессы и изменённые конфигурационные файлы. Рекомендуется полностью переустановить окружение с чистого образа и отозвать все учётные данные, которые могли быть доступны в момент атаки.

Данный инцидент в очередной раз напоминает о важности контроля зависимостей и необходимости использования инструментов, анализирующих поведение пакетов в реальном времени. Даже подписанные и прошедшие проверку подлинности пакеты не гарантируют безопасность, если сам процесс публикации был скомпрометирован. В условиях, когда инструменты для атак становятся открытыми и доступными, защита цепочки поставок программного обеспечения превращается в одну из приоритетных задач для любой организации, использующей открытый код.

Индикаторы компрометации

Domains

  • api.anthropic.com

URLs

  • http://169.254.169.254/latest/api/token
  • http://169.254.169.254/latest/meta-data/iam/security-credentials/
  • http://169.254.170.2
  • https://api.anthropic.com:443/v1/api
  • https://api.github.com
  • https://api.github.com/graphql
  • https://cloudresourcemanager.googleapis.com
  • https://fulcio.sigstore.dev/api/v2/signingCert
  • https://github.com/oven-sh/bun/releases/download/bun-v1.3.13/
  • https://login.microsoftonline.com
  • https://management.azure.com
  • https://registry.npmjs.org/-/npm/v1/oidc/token/exchange/package/
  • https://registry.npmjs.org/-/npm/v1/tokens
  • https://registry.npmjs.org/-/v1/search?text=maintainer:&size=250
  • https://registry.npmjs.org/-/whoami
  • https://rekor.sigstore.dev/api/v1/log/entries
  • https://secretmanager.googleapis.com
  • https://vault.azure.net

SHA256

  • 0dc06ecdaa63fe24859cfd955053c23245c536e4733480239d14bebf12688e35
  • 21b6409a7b84446310daca5409ad6112ac60a1e4bef97736e53fff5f63bfdef4
  • 88896d478986d453f5da79b311de39d9b4b1bea95c21af1d8ef181b0f4e52fe9
  • ac2a2208e1726e008be6c73dc0872d9bba163319259dff1b62055ac933ca46b6
  • ee262510cb246d2b904991aee7fc61162bdae34463439ec6383bd5356479d362

Комментарии: 0