Ботнет с шестью C2-каналами проник в npm-пакеты @asyncapi через CI/CD
🔥 Ботнет с шестью C2-каналами проник в npm-пакеты @asyncapi через CI/CD
Четыре пакета в пространстве @asyncapi доставляли многоступенчатого загрузчика, который развертывал модульный ботнет Miasma. Зловред активировался не на этапе npm install, а при первом же require() — в CI или во время сборки. Первая ступень скачивала с IPFS зашифрованный JavaScript-лоадер sync.js, тот расшифровывал финальный фреймворк, собранный из 744 модулей. Фреймворк поддерживал шесть независимых C2-каналов: HTTP, Nostr-ретранслятор, IPFS, BitTorrent DHT, libp2p GossipSub P2P-меш и смарт-контракт Ethereum. Такой разброс делал перехват управления крайне неудобным.
Вредоносный код попал в репозитории не через кражу npm-токена, а прямой push под фиктивной учётной записью. Атакующий использовал легитимный GitHub Actions релизный конвейер, который публиковал пакеты с валидной OIDC-аттестацией и SLSA-провенансом. Все пять заражённых версий уже удалены из реестра, но любая среда, где эти модули загружались через require(), должна рассматриваться как скомпрометированная.
→ Пакеты: @asyncapi/generator-helpers@1.1.1, @asyncapi/generator-components@0.7.1, @asyncapi/generator@3.3.1, @asyncapi/specs@6.11.2/6.11.2-alpha.1
→ Второй этап: sync.js с ipfs[.]io/ipfs/QmQobZSp1wRPrpSEQ56qnyq7ecZh5Bg5k1fnjt4SUwwHb9
→ Возможности: кража учётных данных, отравление AI-инструментов, боковое движение, автозапуск через systemd/crontab/launchd/Registry, обнаружение песочниц и русской локали
SLSA-провенанс подтвердил, что пакет собран доверенным конвейером, но не проверил, кто сделал коммит. Пока мы изолированно доверяем подписям и аттестатам, не контролируя дифф исходного кода, CI/CD остаётся не границей защиты, а конвейером для компрометации.
The Hacker News
#AsyncAPI #npm #supplychain #Miasma #SLSA