9 сентября атакующий на 105 минут получил контроль над аккаунтом разработчика легитимного MCP пакета
@dforge-core/dforge-mcp. Этого хватило, чтобы выпустить заражённую версию с действительным подтверждением происхождения npm и встроить в неё скрытую цепочку удалённого выполнения команд.Исследователи CloudSEK обнаружили более широкую кампанию GHAPPIER: минимум 65 публичных репозиториев, 73 заражённых файла и 22 аккаунта.
⚙️ Как GitHub Actions превратился в механизм доставки
Получив доступ к основной ветке репозитория, атакующий изменил три строки в GitHub Actions, чтобы каждый push запускал публикацию пакета. Через 14 минут он дополнительно изменил процесс выпуска, сделав его полностью автоматическим.
В результате вредоносная версия была опубликована через npm Trusted Publishing с использованием OIDC. Она оставалась последней доступной версией 35 минут 38 секунд, пока разработчик не восстановил контроль и не выпустил чистую сборку.
Вредоносный релиз получил действительное подтверждение происхождения. Запись в Sigstore указывала на настоящий GitHub Actions и реальный коммит атакующего.
Никакой подделки подписи не потребовалось. npm подтвердил происхождение сборки из доверенного репозитория, содержимое которого уже контролировал злоумышленник.
💣 Одна строка запускала четыре этапа заражения
При запуске MCP сервера выполнялась четырёхэтапная цепочка, которая заканчивалась установкой удалённой командной оболочки. Финальный компонент удалял собственный файл с диска после запуска, затрудняя последующее расследование.
Заражение происходило при запуске MCP сервера. Сам факт установки не означал выполнения вредоносного кода.
Через пять дней после отзыва заражённого релиза все этапы инфраструктуры доставки продолжали отвечать.
🔬 След привёл к другой malware кампании
В одном из остальных заражённых репозиториев CloudSEK обнаружила второй payload, совпадающий с образцом PolinRider.
Этот вредоносный код получает конфигурацию управляющего сервера из транзакции Ethereum. Адрес назначения транзакции используется для передачи данных о соединении, поэтому инфраструктуру управления нельзя устранить обычной блокировкой домена.
Другие исследователи связывают PolinRider с КНДР, однако CloudSEK самостоятельно эту атрибуцию не подтвердила.
Способ первоначального получения доступа к аккаунту разработчика также остаётся неизвестным. Одна из рассматриваемых версий связана с кражей сохранённых Git credentials на заражённой машине.
🔗 Источник: CloudSEK: технический разбор GHAPPIER
Stay secure and read SecureTechTalks 📚
#кибербезопасность #AISecurity #GHAPPIER #MCP #SupplyChain #GitHubActions #npm #Malware #ThreatIntelligence #SecureTechTalks
