Исследователи из Socket Threat Research зафиксировали новую волну атак в рамках кампании Miasma Mini Shai-Hulud, направленной на цепочку поставок программных компонентов. На этот раз под удар попали легитимные npm-пакеты, опубликованные под учётной записью @immobiliarelabs. Среди скомпрометированных артефактов оказались плагины Backstage, используемые для интеграции с GitLab и аутентификации через LDAP (облегчённый протокол доступа к каталогам). Атака представляет серьёзную угрозу для разработчиков, внутренних порталов и систем непрерывной поставки.
Описание
Событие является прямым продолжением активности, описанной днём ранее: тогда злоумышленники скомпрометировали пакеты LeoPlatform и RStreams, злоупотребили рабочими процессами GitHub Actions, внедрили механизмы закрепления через ИИ-агентов и взломали модуль Verana на Go. Нынешняя атака повторяет ту же схему: компрометация доверенной инфраструктуры разработчика, публикация вредоносных версий пакетов, скрытое внедрение JavaScript-нагрузки через среду выполнения Bun, кража секретов разработчиков и токенов CI/CD (систем непрерывной интеграции и доставки), а затем использование украденного доступа для дальнейшего распространения.
Ключевое отличие этой волны - не новый тип вредоносной нагрузки, а расширение атаки на ещё одного легитимного мэйнтейнера открытого кода. На этот раз мишенью стали плагины Backstage, которые работают в непосредственной близости к внутренним порталам разработчиков, интеграциям с системами управления исходным кодом и процессам аутентификации.
Пакеты были опубликованы в узком временном окне 26 июня 2026 года. Согласно телеметрии Socket, вредоносные версии затронули несколько семейств пакетов: @immobiliarelabs/backstage-plugin-gitlab (версии 1.0.1, 2.1.2, 3.0.3, 4.0.2, 5.2.1, 6.13.1, 7.0.2), @immobiliarelabs/backstage-plugin-gitlab-backend (3.0.3, 4.0.2, 5.2.1, 6.13.1, 7.0.2), а также @immobiliarelabs/backstage-plugin-ldap-auth и его бэкенд-версии (от 1.1.4 до 5.2.1). Примечательно, что злоумышленники перевыпустили множество исторических версий, а не только последнюю. Это указывает на автоматизированную волну перепубликации: атакующие стремились поразить пользователей, зафиксированных на старых мажорных версиях.
ImmobiliareLabs - технологическое подразделение итальянской платформы недвижимости Immobiliare.it. Компания активно использует открытый код, GitLab-ориентированные CI/CD, инфраструктуру Kubernetes и публичные GitHub-репозитории. Backstage, в свою очередь, является популярной платформой для создания внутреннего портала разработчика, где сходятся метаданные исходного кода, каталоги сервисов, сигналы CI/CD, аутентификация и рабочие процессы разработчиков. Компрометация пакетов, работающих в таком контексте, особенно опасна: среда установки может иметь доступ к токенам для работы с системой контроля версий, учётным данным публикации пакетов, секретам CI/CD, облачным токенам и настройкам аутентификации.
Вредоносная нагрузка не обязательно эксплуатирует GitLab или LDAP напрямую - ей достаточно выполниться в среде, где эти пакеты установлены или собираются. Начальный анализ архива @immobiliarelabs/backstage-plugin-gitlab@7.0.2 показал характерную маскировку. Стандартная точка входа dist/index.cjs.js выглядит безобидной, но вредоносный архив добавляет корневой index.js, который расшифровывает и запускает скрытую полезную нагрузку, при необходимости загружает Bun и выполняет скрипт второго этапа. Проверяющий, который инспектирует только объявленную точку входа или скомпилированный вывод dist, может пропустить вредоносный путь выполнения, добавленный на уровне корня пакета.
Это продолжает общую тенденцию Miasma - прятать выполнение вне самых очевидных метаданных пакета, уходя от простых скриптов preinstall или postinstall в сторону менее заметных триггеров: менеджеров пакетов, процессов сборки, рабочих процессов и инструментов разработчика. Вредоносный код использует приём "Phantom Gyp": команда node-gyp (инструмент для сборки нативных модулей Node.js) через расширение из binding.gyp выполняет index.js, не полагаясь на стандартные хуки установки. Корневой index.js представляет собой однострочный загрузчик с шифром Цезаря, за которым идёт расшифровка AES-128-GCM и многоэтапная доставка. Финальная нагрузка запускается под Bun 1.3.13 (если его нет - скачивает) и крадёт секреты: файлы .env, токены npm/PyPI/GitHub/Slack/Twilio/AWS/Azure/GCP/Vault, SSH-ключи, учётные данные Docker и конфигурации Kubernetes. Она также инжектирует вредоносные шаги в GitHub Actions, создаёт точки закрепления в плагинах ИИ-помощников по коду и расширениях IDE, а затем эксфильтрует украденное через GitHub API в подконтрольные атакующим репозитории.
Отдельное расследование выявило возможный путь начального проникновения. 24 июня 2026 года был скомпрометирован сторонний GitHub Action codfish/semantic-release-action. По данным StepSecurity, злоумышленник выполнил force-push вредоносных коммитов и перезаписал изменяемые теги версий, что заставило рабочие процессы, ссылающиеся на эти теги, выполнять код атакующего на раннерах GitHub Actions. Вредоносное действие превратило оригинальное Docker-действие в композитное, установило Bun и выполнило обфусцированный JavaScript. Целью были OIDC-токены (OpenID Connect), персональные токены GitHub и секреты CI/CD. Такая схема предоставляет правдоподобный сценарий: если рабочий процесс, контролируемый учётной записью simonecorsi (связанной с ImmobiliareLabs), использовал codfish/semantic-release-action по mutable-тегу, то атакующий мог получить доступ к учётным данным для публикации npm-пакетов и запуска последующих действий.
Аналитики также отметили, что GitHub недавно ввёл защиту выполнения рабочих процессов (в публичной предварительной версии), позволяющую ограничивать, кто и какие события могут запускать workflows. Событие deployment (развёртывание) следует считать особенно рискованным триггером. В атаке, описанной исследователем Аднаном Ханом, злоумышленник может создать временные Git-объекты, фиктивный коммит, инициировать развёртывание, нацеленное на этот коммит, и запустить рабочий процесс без прямого изменения файлов в .github/workflows. В репозитории immobiliare/backstage-plugin-gitlab был обнаружен workflow с именем Dependabot Updates, запущенный 26 июня 2026 года через событие deployment - такое имя может маскировать вредоносный релизный процесс.
В результате всей цепочки скомпрометированные пакеты, установленные в средах разработки, могут привести к крате токенов, облачных учётных данных и дальнейшему распространению. Socket также зафиксировал всплеск эксфильтрационных репозиториев, созданных от имени services-admin-pearlhealthlabs с сотнями публичных репозиториев со случайными именами - они используются как промежуточные хранилища для украденных данных.
Командам, установившим любую из затронутых версий @immobiliarelabs, следует считать среду скомпрометированной. Рекомендуется идентифицировать все машины разработчиков, CI-раннеры, сборочные контейнеры и среды Backstage, где произошла установка. Необходимо удалить затронутые версии и восстановить пакеты из заведомо чистых версий и lock-файлов. Следует отозвать все секреты (npm, GitHub, GitLab, облачные, Kubernetes, Docker, Vault, SSH, Slack, Twilio, CI/CD), ротируя их с чистой машины. Аудит GitHub Actions должен выявить подозрительные запуски, особенно на событие deployment, рабочие процессы с названиями вроде Dependabot Updates, а также неожиданные release-процессы. Важно проверить репозитории на наличие инжектированных файлов .github/workflows, .github/setup.js, корневых index.js / _index.js, конфигураций ИИ-помощников (например, .gemini/settings.json, .claude hooks, .vscode tasks, Cursor rules) и необъяснимое использование Bun. Закрепление GitHub Actions по полным SHA коммитов вместо mutable-тегов и ограничение прав на публикацию пакетов защищёнными ветками и минимальными разрешениями OIDC/contents/actions/packages существенно снижают риск повторения подобных атак. Кампания Miasma Mini Shai-Hulud продолжает демонстрировать, что цепочка поставок и CI/CD являются не просто автоматизацией, а полноценной поверхностью атаки, требующей такого же уровня защиты, как и основные производственные системы.