supply-chainvendorNewsThe Broadside1 min read

AsyncAPI npm compromise bypasses install-script defenses

Import-time execution turns a familiar npm incident into a CI/CD credential problem, because clean installs alone do not remove exposure.


TL;DR

Microsoft says five versions across four @asyncapi npm packages were republished on July 14 with the same malicious loader, affecting systems that resolved and imported them during a roughly 90-minute window. The payload ran on import or require, so npm install --ignore-scripts did not help. Teams should remove the versions, purge npm and Yarn caches, hunt for sync.js, block 85.137.53[.]71 on ports 8080, 8081 and 8091, and rotate credentials reachable from affected environments.

This is the npm supply-chain pattern compliance and security teams already know, with the safety rail moved. Microsoft Threat Intelligence says the compromised @asyncapi packages executed when a consuming build or application imported the package, rather than through a postinstall hook. That matters operationally: a pipeline that relied on npm install --ignore-scripts could still have run the malicious loader once the poisoned dependency was loaded.

The affected versions are specific: @asyncapi/specs 6.11.2-alpha.1 and 6.11.2, @asyncapi/generator 3.3.1, @asyncapi/generator-components 0.7.1, and @asyncapi/generator-helpers 1.1.1. Microsoft says @asyncapi/specs is a transitive dependency for numerous AsyncAPI tooling packages, so the affected population includes developer workstations, CI/CD pipelines, container builds, and production services that resolved and imported those versions during the exposure window.

The ugly part is the provenance story. According to Microsoft, the compromise began with a misconfigured GitHub Actions pull_request_target workflow that exposed an asyncapi-bot personal access token. Legitimate GitHub Actions OpenID Connect release workflows then published the poisoned packages under the automated npm identity, producing artifacts with valid provenance signatures from unauthorized source commits. Provenance did not fail here; it certified the wrong thing very cleanly.

The practical response is inventory first, then credential hygiene. Remove the five package versions, purge npm and Yarn caches, look for sync.js in OS-specific NodeJS masquerade directories, block outbound traffic to 85.137.53[.]71 on ports 8080, 8081, and 8091, and rotate credentials accessible from any environment that imported the compromised packages. Treat CI/CD tokens as exposed if the environment loaded the dependency. The loader pulled a Miasma runtime with command-and-control, persistence, and fallback channels, even though Microsoft says some high-risk modules were disabled in this instance.


Published ·Deep Fathom