Опасна атака по веригата за доставки засегна проекта AsyncAPI в регистъра на npm, излагайки на риск разработчиците и автоматизираните системи за компилация.
На 14 юли 2026 г. атакуващите препубликуваха пет версии на пакета в рамките на около деветдесет минути. Всяка версия съдържаше същия скрит зареждач, който се изпълнява веднага след импортирането на кода.
Зловредният софтуер не разчита на обичайните скриптове за инсталиране, които много екипи вече блокират. Вместо това той се активира, когато дадено приложение или инструмент за компилация зареди компрометирания модул. Този дизайн означава, че общата настройка за безопасност, наречена ignore-scripts, не предлага реална защита срещу тази заплаха.
Анализатори от Microsoft идентифицираха кампанията и проследиха как слаб работен процес в GitHub Actions е отворил вратата за компрометирането.
В доклад, споделен с „Cyber Security News (CSN)“, Microsoft посочва, че втория етап доставя модулна среда за изпълнение, наречена „Miasma“. Тази рамка може да комуникира с отдалечени сървъри, да остане в системата и да съхранява модули, готови да откраднат идентификационни данни.
Тъй като @asyncapi/specs се намира в основата на много други инструменти на AsyncAPI, радиусът на поражение достигна лаптопи на разработчици, CI конвейери, контейнери и дори някои производствени услуги.
Всеки, който е изтеглил компрометираните версии по време на краткия прозорец на излагане, може да е изпълнил зловредния код, без да забележи нищо необичайно. Общото въздействие е сериозно за екипи, които боравят с облачни ключове, токени за контрол на версиите и тайни за AI платформи.
Въпреки че някои от модулите за кражба са били изключени в тази компилация, кодът вече е присъствал и е можело да бъде активиран по-късно чрез канали за поддържане на присъствие.
Рамката „Miasma“ включва широк код за достъп до идентификационни данни, насочен към тайни, които разработчиците и CI системите често съхраняват наблизо. Тя търси повече от сто имена на променливи на средата, обхващащи системи за управление на кодове, регистри на пакети, основни облачни доставчици, контейнерни платформи, мениджъри на тайни и популярни AI услуги.
Целите включват GITHUB_TOKEN и GITLAB_TOKEN за хостване на код, NPM_TOKEN и NODE_AUTH_TOKEN за публикуване на пакети, както и ключове за AWS, Azure и Google Cloud. Същият код ловува и API ключове за Anthropic и OpenAI, заедно с токени за Docker и Kubernetes.
На диска рамката търси познати файлове като .npmrc, идентификационни данни за AWS, kubeconfig, частни SSH ключове, токени за Vault, .netrc, конфигурация на Docker и JSON файлове за сервизни акаунти в Google.
Когато бъде открит токен на GitHub, той може да извлече списък с достъпните хранилища и CI контекст чрез публични API.
В анализираната извадка модулите за събиране на данни са останали неактивни, но пълната логика е била доставена в криптирания пакет. Каналите за персистентност и управление вече са били активни, така че последващо дистанционно обновяване е можело да активира тези функции без необходимост от ново издаване на пакет.
Microsoft призова екипите да премахнат петте компрометирани версии, да изчистят npm и Yarn кешовете и да подменят всяка тайна, достъпна от хостове, които са импортирали пакетите. Защитниците трябва също така да търсят файл с име sync.js в директории, които се маскират като папки за поддръжка на NodeJS под Windows, macOS и Linux.
Внедряването е започнало със злонамерена заявка за сливане (pull request) срещу хранилището asyncapi/generator. Лошо конфигуриран работен процес, използващ pull_request_target, е изпълнил недоверен код и е разкрил привилегирован бот токен. След това атакуващите са изпратили компрометирани комити и са позволили на собствения доверен път за публикуване на проекта да пусне зловредния софтуер под валидна npm идентичност.
Легитимните работни процеси са публикували @asyncapi/generator 3.3.1, generator-components 0.7.1, generator-helpers 1.1.1 и две версии на @asyncapi/specs. Когато потребител импортира някой от тези пакети, зареждачът стартира скрит процес на Node. Този процес изтегля криптиран втори етап от IPFS, записва sync.js в специфична за операционната система папка на NodeJS и отключва средата „Miasma“.
Основните сървъри за контрол са били разположени на един IP адрес на портове 8080, 8081 и 8091, с резервни възможности за откриване през няколко децентрализирани мрежи.
Екипите за сигурност трябва да фиксират известните добри версии, да прекомпилират от чисти lock файлове и да блокират изброените идентификатори на съдържание в IPFS.