Атака на цепочку поставки ПО: червь Miasma заражает LeoPlatform и RStreams

📋 Кратко

В конце июня 2026 года исследователи безопасности обнаружили новую волну атак червя Miasma — самораспространяющегося вредоносного ПО, которое атакует цепочку поставок через npm-реестр. Злоумышленники взломали аккаунт мейнтейнера LeoPlatform и опубликовали троянизированные версии 20 пакетов. Разбираем технические детали атаки и даём практические рекомендации по защите.

Иллюстрация к статье

В конце июня 2026 года экосистема JavaScript-пакетов получила очередной сокрушительный удар. Исследователи безопасности из компаний Socket, StepSecurity, JFrog и SafeDep одновременно сообщили о новой волне атак червя Miasma — самораспространяющегося вредоносного ПО, которое атакует цепочку поставок через менеджеры пакетов. На этот раз жертвами стали экосистемы LeoPlatform и RStreams, а также блокчейн-проект Verana.

Атака началась 24 июня 2026 года с компрометации npm-аккаунта разработчика с ником czirker, связанного с LeoPlatform. Злоумышленники, предположительно использовавшие утёкшие учётные данные, получили токен npm и в течение нескольких секунд загрузили все вредоносные релизы. Среди пострадавших пакетов оказались leo-auth, leo-aws, leo-cli, leo-sdk, leo-streams, serverless-leo, rstreams-metrics — всего более 20 вредоносных версий.

⚠ Ключевая статистика: По данным аналитиков Socket, к концу июня 2026 года выявлено 474 скомпрометированные публикации пакетов, связанных с Miasma. Атака затронула более 70 репозиториев Microsoft на GitHub, 20 пакетов в экосистемах LeoPlatform и RStreams. Скорость компрометации — секунды на загрузку вредоносных релизов после получения доступа к аккаунту. Источник: отчёты Socket, SafeDep, StepSecurity, JFrog.

🧬 Эволюция Miasma: от Shai-Hulud к новой волне

Miasma считается вариацией червя Shai-Hulud, исходный код которого группировка TeamPCP опубликовала в открытом доступе в мае 2026 года. Если оригинальный Shai-Hulud использовал typosquatting и postinstall-скрипты для распространения, то Miasma пошёл дальше, внедрив механизмы самопропагации и обхода двухфакторной аутентификации.

Первые сообщения о Miasma появились в июне 2026 года, когда червь скомпрометировал более 70 GitHub-репозиториев Microsoft. Однако июньская атака на LeoPlatform и RStreams стала крупнейшей операцией Miasma на сегодняшний день. Исследователи отметили, что в этой волне злоумышленники изменили способ запуска вредоноса.

🔬 Ключевое отличие Miasma от Shai-Hulud: В новой волне атак вредоносные релизы больше не используют lifecycle-хуки в package.json. Вместо этого код выполняется во время установки через файл binding.gyp. Загрузчик проверяет систему и, если необходимо, устанавливает рантайм Bun, после чего запускает стилер. Использование Bun вместо Node.js помогает малвари оставаться незамеченной для систем, мониторящих стандартные Node.js-процессы.

🔍 Технический разбор: как работает Miasma

Архитектура Miasma основана на принципе самораспространения через компрометированные аккаунты. В отличие от традиционных C2-серверов, червь использует сам GitHub как инфраструктуру управления: через публичные коммиты он получает команды, конфигурации и информацию о каналах для эксфильтрации данных. Это делает Miasma исключительно устойчивым к блокировке.

Механизм заражения

  1. Начальная компрометация: Злоумышленники получают доступ к npm-аккаунту разработчика через утёкшие учётные данные или фишинг. В случае LeoPlatform — компрометация аккаунта czirker.
  2. Публикация вредоносных версий: Используя токен npm, злоумышленники загружают троянизированные версии легитимных пакетов. Вредоносная нагрузка внедряется в binding.gyp, который выполняется при установке.
  3. Установка рантайма Bun: Загрузчик проверяет наличие Bun в системе. Если он отсутствует, червь устанавливает его, обеспечивая среду для выполнения вредоносного кода вне стандартного Node.js-процесса.
  4. Кража данных: Малварь собирает обширный набор конфиденциальных данных (см. ниже) и шифрует их.
  5. Эксфильтрация через CI/CD: Miasma создаёт workflow с названием Run Copilot в GitHub Actions, через который извлекает данные из памяти раннера и загружает собранную информацию в публичный GitHub-репозиторий, созданный через аккаунт жертвы.
  6. Самораспространение: Используя похищенные токены, Miasma публикует заражённые версии всех пакетов, к которым имеет доступ жертва. Это превращает заражение в эпидемию.

Какие данные похищает Miasma

Червь ориентирован на кражу учётных данных для CI/CD-пайплайнов и облачной инфраструктуры. Полный список целей включает:

  • Облачные провайдеры: учётные данные AWS, Azure и Google Cloud
  • CI/CD и реестры: токены GitHub и npm, токены PyPI и RubyGems, данные JFrog Artifactory
  • Секреты инфраструктуры: Kubernetes-секреты, данные HashiCorp Vault, SSH-ключи, GPG-ключи
  • Менеджеры паролей: данные 1Password
  • Конфигурации IDE: файлы настроек сред разработки, AI-ассистентов (Claude, Gemini, Cursor, Copilot, Kiro, Cline)
  • .env-файлы: переменные окружения с токенами и ключами доступа
  • Docker-конфигурации: образы и настройки контейнеризации
Иллюстрация к статье

🎯 Атака на LeoPlatform и RStreams: хронология

Атака на LeoPlatform — классический пример supply chain-атаки, в которой одна компрометация приводит к цепной реакции. Ниже — хронология событий на основе анализа SafeDep и StepSecurity:

  1. 24 июня 2026, ~10:00 UTC: Злоумышленники компрометируют учётную запись czirker на npm. Используется утёкший токен или пароль.
  2. 24 июня 2026, ~10:05 UTC: В течение нескольких секунд через скомпрометированный аккаунт загружаются вредоносные версии 20 пакетов. Каждая версия содержит модифицированный binding.gyp с кодом загрузчика Miasma.
  3. 24–25 июня 2026: Пользователи, устанавливающие обновления пострадавших пакетов через npm install, автоматически заражаются. Червив начинает сбор данных из CI/CD-сред.
  4. 26–27 июня 2026: Исследователи Socket и SafeDep обнаруживают аномалии в публикациях пакетов и начинают анализ.
  5. 28–29 июня 2026: Обнаружены репозитории с описанием «Alright Lets See If This Works» — более 500 совпадений. Это репозитории, созданные Miasma для эксфильтрации данных.
  6. 30 июня 2026: Публичное раскрытие атаки. Исследователи публикуют детали на платформах Xakep.ru и в блогах компаний безопасности.

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

🔄 Механизм supply chain: как одна компрометация заражает тысячи

Miasma реализует полный цикл supply chain-атаки, превращая каждую заражённую машину в вектор распространения. Разберём этот цикл по фазам:

Фаза 1: Начальное заражение

Разработчик устанавливает или обновляет один из скомпрометированных пакетов LeoPlatform через npm install. Во время установки срабатывает код в binding.gyp, который загружает и выполняет вредоносный payload. Загрузка происходит из публичного репозитория GitHub, созданного злоумышленниками.

Фаза 2: Сбор и эксфильтрация

После запуска Miasma сканирует окружение жертвы в поисках токенов, ключей и паролей. Особое внимание уделяется переменным окружения CI/CD-систем. Для эксфильтрации червь создаёт в GitHub Actions workflow с названием Run Copilot, маскируя свою активность под легитимную работу AI-ассистента. Данные шифруются и загружаются на GitHub в виде коммитов.

Фаза 3: Обход 2FA и самопропагация

Используя похищенные токены npm, Miasma публикует троянизированные версии всех пакетов, к которым у жертвы есть доступ. Критически важно: Miasma умеет обходить двухфакторную аутентификацию npm через использование токенов автоматизации (automation tokens), которые не требуют 2FA при публикации в CI/CD. Таким образом, червь не просто крадёт данные — он активно размножается.

Фаза 4: Боковое перемещение

Miasma поддерживает перемещение внутри скомпрометированной инфраструктуры через SSH и AWS Systems Manager. Это позволяет червю проникать из среды разработчика в продакшен-окружение, серверы баз данных и другие критически важные системы. Аналитики SafeDep подтвердили, что Miasma способен внедрять вредоносные конфигурации в AI-инструменты для разработки, что делает его особенно опасным для компаний, активно использующих Copilot, Cursor и аналоги.

🛡 Методы защиты: как предотвратить заражение Miasma

Защита от supply chain-атак уровня Miasma требует комплексного подхода. Ниже — практические рекомендации, основанные на анализе атаки и рекомендациях исследователей Socket, StepSecurity и JFrog.

1. Внедрите контроль цепочки поставок

  • Используйте lock-файлы — все зависимости должны быть зафиксированы через package-lock.json, yarn.lock или pnpm-lock.yaml. Проверяйте их целостность в CI.
  • Socket.dev — анализирует поведение пакетов до установки, выявляет подозрительные binding.gyp и postinstall-скрипты.
  • JFrog Xray — сканирует артефакты на наличие вредоносного кода и CVE.
  • Избегайте публичных зависимостей — для критических пакетов используйте приватные npm-реестры (Verdaccio, GitHub Packages, AWS CodeArtifact).

2. Настройте безопасность npm-аккаунтов

  • Отключите automation tokens — токены, не требующие 2FA, — основная причина, по которой Miasma обходит двухфакторную аутентификацию. Используйте granular access tokens с ограниченными правами.
  • Включите 2FA для всех аккаунтов с правами публикации. Используйте аппаратные ключи (WebAuthn) вместо TOTP.
  • Регулярно аудируйте токены — отзывайте неиспользуемые токены, ограничивайте срок жизни токенов.
  • Мониторьте подозрительную активность — настройте алерты на неожиданные публикации пакетов, входы с новых IP, создание новых токенов.

3. Защитите CI/CD-пайплайн

  • Изолируйте CI/CD от публичных реестров — используйте прокси-серверы реестров с белыми списками разрешённых пакетов.
  • Проверяйте подозрительные workflow — настроите мониторинг на появление workflow с нестандартными названиями (например, «Run Copilot»).
  • Используйте OpenSSF Scorecard — оценивайте безопасность практик разработки для каждого внешнего пакета.
  • Ограничьте права GitHub Actions — токены в CI/CD должны иметь минимально необходимые права для конкретной задачи.
  • Аудит GitHub Actions логов — проверяйте необычные паттерны эксфильтрации (публикация в подозрительные репозитории).

4. Мониторинг на уровне инфраструктуры

  • Отслеживайте появление подозрительных процессов — Bun, запущенный без явной причины, может свидетельствовать о заражении Miasma.
  • Мониторьте сетевую активность — необычные соединения к GitHub API, особенно из CI-окружений, должны вызывать подозрения.
  • SIEM-алерты на дескриптор «Alright Lets See If This Works» — это точный индикатор заражения Miasma. При обнаружении репозитория с таким описанием — немедленное расследование.

5. Реагирование на инцидент

Если вы подозреваете заражение Miasma, действуйте по следующему протоколу:

  1. Отключите скомпрометированные системы от сети для предотвращения эксфильтрации.
  2. Отзовите все токены — npm, GitHub, AWS, Azure, GCP — немедленно.
  3. Проверьте GitHub Actions с названием «Run Copilot» и репозитории с описанием «Alright Lets See If This Works».
  4. Проведите аудит логов — проверьте Commit-активность на предмет подозрительных публикаций от имени скомпрометированного пользователя.
  5. Смените все пароли и ключи — с особым вниманием к HashiCorp Vault, Kubernetes-секретам и SSH-ключам.
  6. Сообщите в npm security — если были опубликованы вредоносные версии пакетов, запросите их депривацию.
✅ Чек-лист быстрой проверки для разработчиков и DevSecOps:
☑ Проверьте, установлены ли пакеты LeoPlatform (leo-*) или RStreams (rstreams-*) в вашем проекте
☑ Проверьте GitHub Actions на наличие workflow «Run Copilot»
☑ Проверьте GitHub-репозитории вашей организации на описание «Alright Lets See If This Works»
☑ Отзовите npm-токены, не использующие 2FA
☑ Включите в CI сканирование postinstall/preinstall скриптов и binding.gyp-файлов
☑ Настройте мониторинг новых публикаций пакетов от ваших мейнтейнеров

⚖️ Сравнение: Miasma, Shai-Hulud, IronWorm

Для понимания масштаба угрозы стоит сравнить три wave supply chain-атак, произошедших в 2026 году:

Характеристика Shai-Hulud (TeamPCP) Miasma IronWorm
Обнаружен Май 2026 Июнь 2026 Июнь 2026
Язык Python Python + Bun Rust
Метод запуска Postinstall-скрипты npm binding.gyp + Bun eBPF-руткит
Масштаб 636+ пакетов 474+ публикаций 36 пакетов
Жертвы Общий npm-реестр Red Hat, Microsoft, LeoPlatform, RStreams Общий npm-реестр
Обход 2FA Через automation tokens Через automation tokens Через GitHub Actions
C2-инфраструктура Традиционные C2-серверы GitHub (публичные коммиты) Tor + GitHub
Проверка локали Блокировка русской локали Блокировка русской локали Нет данных

📈 Прогноз: что будет дальше

Атаки семейства Miasma показывают эволюционную тенденцию: злоумышленники переходят от точечных взломов к полностью автоматизированным supply chain-кампаниям. Можно ожидать следующих трендов во второй половине 2026 года:

  • Рост числа атак через binding.gyp — этот метод сложнее обнаружить, чем postinstall-скрипты, так как он не попадает в стандартный аудит lifecycle-хуков.
  • Использование альтернативных рантаймов — Bun и Deno как среда для вредоносного кода вне стандартного Node.js-процесса, что позволяет обходить сигнатурные детекторы.
  • Атаки на AI-инструменты для разработки — Miasma уже внедряет конфигурации в Copilot, Cursor и Claude. Следующий шаг — компрометация цепочек поставок AI-агентов.
  • Ужесточение требований npm — GitHub (владелец npm) планирует ввести обязательное подписание всех публикуемых пакетов, запрет automation tokens для критических пакетов и обязательную 2FA.
  • Интеграция блокировки по локали — всё больше вредоносов будет проверять системную локаль перед активацией, усложняя анализ и сужая целевой охват.

📚 Читайте также

📖 Термины

CI/CD · Container Security · Supply Chain Attack

🔗 Источники