14 июля 2026 года злоумышленник, действовавший под учётной записью GitHub с идентификатором 148100, получил доступ к двум репозиториям проекта AsyncAPI и опубликовал вредоносные версии четырёх npm-пакетов. Инцидент затронул как основной репозиторий asyncapi/generator, так и asyncapi/spec-json-schemas. На момент публикации новости все скомпрометированные версии продолжают числиться как актуальные (latest или alpha) в реестре npm. Пользователям настоятельно рекомендуется зафиксировать зависимости на безопасных версиях.
Описание
Атака началась в 06:58 UTC с отправки коммита 3eab3ec в ветку next репозитория asyncapi/generator. Коммит использовал фиктивную подпись (Your Name, you@example.com) и был неподписан. Через двенадцать минут после внесения изменений сборочный конвейер CI/CD опубликовал три новых пакета: @asyncapi/generator версии 3.3.1, @asyncapi/generator-helpers версии 1.1.1 и @asyncapi/generator-components версии 0.7.1. Позднее, в 08:06 UTC и 08:30 UTC, тем же злоумышленником были выпущены @asyncapi/specs@6.11.2-alpha.1 и @asyncapi/specs@6.11.2 через отдельный репозиторий asyncapi/spec-json-schemas. Совокупное количество еженедельных загрузок всех затронутых пакетов превышает 2,9 миллиона, при этом наибольшую аудиторию имеет @asyncapi/specs с показателем около 2,74 миллиона загрузок в неделю.
Согласно предоставленным данным, техника внедрения вредоносного кода различалась для разных репозиториев. В генераторных пакетах злоумышленник применил метод сокрытия с помощью пробелов: в конце строки существующего легитимного кода были добавлены сотни пробелов, которые отодвигали обфусцированный JavaScript далеко за правую границу окна редактора. Таким образом код был незаметен при визуальном просмотре. Взломанный файл validator.js содержал загрузчик, который порождал дочерний процесс Node.js с флагом detached, что позволяло ему продолжать работу даже после завершения родительского процесса. Результатом выполнения становилась загрузка бинарного файла стилера Miasma RAT из IPFS по хешу QmQobZSp1wRPrpSEQ56qnyq7ecZh5Bg5k1fnjt4SUwwHb9.
В пакете @asyncapi/specs применялся более прямолинейный подход: вредоносный код был размещён в самом начале файла index.js, без попыток скрыть его в легитимном коде. Загрузчик использовал аналогичную технику, но обращался к другому IPFS-адресу (Qmet4fhsAaWMBUxNDfREHwgiyDeSWy4YSYs9wiKUW5jGyf). В любом случае итоговая процедура одинакова: скачанный файл сохраняется в каталог данных приложения под именем sync.js, после чего выполняется. Пути размещения зависят от операционной системы: для Linux это ~/.local/share/NodeJS/sync.js, для macOS ~/Library/Application Support/NodeJS/sync.js, а для Windows %LOCALAPPDATA%\NodeJS\sync.js.
Miasma RAT представляет собой вредоносное ПО для кражи учётных данных, активное с июня 2026 года под идентификатором кампании miasma-train-p1. Инструмент нацелен на сбор паролей, файлов cookie и данных автозаполнения из браузеров, а также на извлечение SSH-ключей, токенов аутентификации npm, маркеров GitHub CLI, учётных данных AWS и данных криптовалютных кошельков. C2-сервер, зафиксированный по адресу 85.137.53.71 (Нидерланды, AS43641), принимает скомпрометированную информацию. Дополнительно в коде упоминается смарт-контракт Ethereum 0x12c37A86a0Ed0beBe5d1d6a43E42f07860eAc710, что может указывать на использование блокчейна для маршрутизации команд или эксфильтрации данных.
Последствия компрометации весьма серьёзны. Любая система, где были установлены заражённые версии пакетов (независимо от того, выполняется ли она на рабочем месте разработчика или в среде CI/CD), могла подвергнуться краже секретов. Особенно уязвимы сборочные конвейеры, которые автоматически устанавливают зависимости: если они работали в период с 06:58 до момента исправления, все токены и ключи, используемые в конвейере, могли быть скомпрометированы. Поскольку два набора пакетов публиковались из разных репозиториев, вращения токенов только для asyncapi/generator недостаточно - необходимо также изменить секреты для asyncapi/spec-json-schemas.
Для пользователей, установивших вредоносные версии, рекомендуется немедленно проверить наличие файла sync.js по указанным путям и удалить его. Затем следует сменить все учётные данные на затронутой машине: пароли браузеров, токены npm, маркеры GitHub, SSH-ключи, ключи AWS и доступ к криптокошелькам. Если CI/CD среда использовала заражённые пакеты, секреты конвейера также подлежат замене. Безопасными версиями являются @asyncapi/generator@3.3.0, @asyncapi/generator-helpers@1.1.0, @asyncapi/generator-components@0.7.0 и @asyncapi/specs@6.11.1.
Разработчики AsyncAPI уже удалили скомпрометированную ветку next и планируют выпустить чистые исправления (3.3.2, 1.1.2, 0.7.2). До этого момента всем пользователям рекомендуется зафиксировать зависимости на точных безопасных версиях и проверить lock-файл на наличие перечисленных вредоносных релизов. Атака ещё раз подтверждает критическую важность защиты цепочки поставок программного обеспечения: компрометация одного репозитория с последующей автоматической публикацией пакетов способна затронуть миллионы систем по всему миру.
Индикаторы компрометации
Package
- @asyncapi/generator-3.3.1.tgz
- @asyncapi/generator-helpers-1.1.1.tgz
- @asyncapi/generator-components-0.7.1.tgz
- @asyncapi/specs-6.11.2.tgz
- @asyncapi/specs-6.11.2-alpha.1.tgz
SHA256
- 082d733db0687dcd768104972b065d4b58cb1e6043688c6c20fa3702337f36ab
- 34014776d3d3ff11bc4439b02fd7ac0f02a887eb3a052eeafff236e2f6db8ad1
- 9b2e65db653ca8575c9b10eefb9a80c6006404812c2ec212bf5675e3c690233b
- bfaeb987faa6de2b5a5eb63b1233d055215b09b0349a9394f2175fd7cdf385e4