Скомпрометированные пакеты AsyncAPI распространяют ботнет Miasma
Команда исследователей угроз компании Socket обнаружила скомпрометированные npm-пакеты в популярном пространстве имен @asyncapi, которые тайно разворачивали многоступенчатый загрузчик ботнета. Злоумышленники использовали доверие к инструментам автоматизации API, чтобы внедрить вредоносный код непосредственно в среды разработки и процессы CI/CD.
Затронутые пакеты
Атака затронула три пакета с конкретными версиями:
@asyncapi/generator-helpersверсии 1.1.1@asyncapi/generator-componentsверсии 0.7.1@asyncapi/generatorверсии 3.3.1
Механизм компрометации: скрытый вызов через require()
Пакеты AsyncAPI широко применяются для генерации документации и клиентского кода на основе спецификаций AsyncAPI. Их обычно вызывают в ходе обычной разработки или в пайплайнах непрерывной интеграции (CI). Атакующие учли это: вредоносная нагрузка не нуждалась в специальном install hook, а активировалась сразу при импорте модуля.
Ключевым элементом заражения стал файл src/utils.js. В нем злоумышленники замаскировали вредоносный код с помощью избыточных пробелов. Как только исполняющая среда Node.js обрабатывает require() для этого модуля, запускается detached-процесс, ответственный за загрузку основной полезной нагрузки. Такой подход позволял избегать подозрительных сетевых вызовов на этапе установки и исполнял код в контексте легитимного приложения.
Двухэтапный загрузчик: от обфускации до ботнета
Атака реализована в два этапа:
- Первый этап содержит зашифрованный полезный груз, который загружает и расшифровывает вторую стадию.
- Второй этап — вредоносный фреймворк, известный как Miasma, — доставляется через пиринговую сеть IPFS (InterPlanetary File System) и сохраняется в платформозависимых директориях под видом легитимного файла
sync.js.
Начальная obfuscation-схема построена на вызове команды spawn для отделения вредоносного процесса. Исследователи приводят следующий фрагмент кода, отвечающий за запуск второй стадии:
const { spawn } = require('child_process');
spawn('node', '-e', downloadStage2Code, {
detached: true,
stdio: 'ignore',
windowsHide: true
}).unref();
Таким образом, индикаторы вредоносной активности тщательно скрывались от мониторинга стандартных потоков вывода, а процесс оставался независимым от родительского приложения.
Возможности ботнета Miasma
Расшифрованная вторая стадия представляет собой полнофункциональный ботнет-фреймворк, который предоставляет операторам следующие возможности:
- выполнение команд оболочки (shell);
- операции с файлами;
- сбор учетных записей и аутентификационных данных;
- техники уклонения от обнаружения;
- закрепление в системе после перезагрузок (persistence);
- многопротокольное C2-управление для связи с командными серверами.
Набор функций указывает на то, что целью атакующих было долговременное присутствие в скомпрометированных средах разработки и использование их в качестве узлов ботнета.
Рекомендации для пользователей AsyncAPI
Исследователи Socket призывают всех разработчиков, использующих указанные пакеты, немедленно принять меры:
- избегать использования версий @asyncapi/generator-helpers 1.1.1, @asyncapi/generator-components 0.7.1 и @asyncapi/generator 3.3.1;
- обновиться до исправленных версий, как только они будут опубликованы;
- проверить локальные среды разработки и CI-окружения на наличие признаков компрометации, включая появление подозрительных файлов вроде
sync.jsи неожиданных дочерних процессов Node.js.
Отчет получен из сервиса CTT Report Hub. Права на отчет принадлежат его владельцу.
Ознакомиться подробнее с отчетом можно по ссылке.



