← AsyncAPI npm Supply Chain Attack (Miasma RAT) — July 20261 decision on this page
Audit log
Every state-changing event for AsyncAPI npm Supply Chain Attack (Miasma RAT) — July 2026: moderation decisions on community submissions, plus corrections and updates from the news pipeline. URL-based decisions are designed to carry three independent witnesses — the original source, an Internet Archive snapshot, and a Solana memo signed by our publicly-disclosed publisher key. Archive coverage is still being backfilled, so each decision below reports its own snapshot status rather than assuming one exists.
- #1publishby system:backfill2026-08-01 12:12:31ZScore: ? → ? (no score change)anchorpending
- chain
- ●—
- hash
F78UemPLKYRp…rrq6nSqmsha256 → base58
verifying row…canonical bytes (31637 B) ▸
{"actor":"system:backfill","investigation_id":"bdcdf64e-120b-461e-9325-3581e6ce2155","kind":"publish","page_slug":"asyncapi-npm-supply-chain-attack-miasma-rat-july-2026","published_at":"2026-08-01T12:12:31.612Z","sequence_num":1,"snapshot":{"content_type":"investigation","entity_name":"AsyncAPI npm Supply Chain Attack (Miasma RAT) — July 2026","sections":[{"content":"On July 14, 2026, beginning at approximately 05:08 UTC, an attacker opened pull request #2155 against the asyncapi/generator repository on GitHub. The PR contained obfuscated JavaScript hidden after approximately 1,000 bytes of whitespace. A misconfigured workflow file — manual-netlify-preview.yml — used the pull_request_target trigger, which runs in the context of the base repository and has access to repository secrets, while checking out attacker-controlled code from the PR branch. This class of vulnerability, known as a 'pwn request,' allowed the workflow to execute the attacker's code with full access to CI secrets. By 05:16 UTC the workflow had completed and credentials were exfiltrated to a Rentry pastebin dead-drop URL (slug: 'elzotebo'). The compromised token belonged to 'asyncapi-bot,' a service account with organization-wide write access. The vulnerability had been identified by a contributor on April 29, 2026, and a proposed fix was submitted May 17, 2026, but remained unmerged at the time of the attack — a gap of 58 days between identified risk and exploitation. The attacker opened 37 total pull requests to the generator repository; 36 of them attempted to add a fake charity donation page as noise and camouflage, while only one PR contained the actual exploit payload.","heading":"Attack Overview and GitHub Actions Exploitation","severity":"critical","sources":[{"credibility":1,"name":"Wiz M-Red-Team: AsyncAPI Supply Chain Compromise via GitHub Actions","type":"research","url":"https://www.wiz.io/blog/m-red-team-asyncapi-supply-chain-compromise-via-github-actions"},{"credibility":1,"name":"StepSecurity: Compromised Next Branch Pushes Malicious AsyncAPI Packages to npm","type":"research","url":"https://www.stepsecurity.io/blog/compromised-next-branch-pushes-malicious-asyncapi-generator-generator-helpers-and-generator-components-to-npm"},{"credibility":1,"name":"Chainguard: AsyncAPI Supply Chain Compromise — npm Packages Backdoored via GitHub Actions","type":"research","url":"https://www.chainguard.dev/unchained/asyncapi-supply-chain-compromise-npm-packages-backdoored-via-github-actions"},{"credibility":2,"name":"CyberSecurityNews: Hackers Abuse GitHub Actions to Backdoor AsyncAPI npm Packages With Miasma RAT","type":"news_article","url":"https://cybersecuritynews.com/hackers-abuse-github-actions/"}]},{"content":"Five malicious versions were published across four packages in the @asyncapi npm namespace. The affected packages and their malicious versions were: @asyncapi/generator version 3.3.1 (safe: 3.3.0, ~126,000 weekly downloads); @asyncapi/generator-helpers version 1.1.1 (safe: 1.1.0, ~45,000 weekly downloads); @asyncapi/generator-components version 0.7.1 (safe: 0.7.0, ~46,000 weekly downloads); and @asyncapi/specs versions 6.11.2-alpha.1 and 6.11.2 (safe: 6.11.1, ~2.7 million weekly downloads). The combined weekly download figure across all four packages was approximately 2.9 million at the time of the incident. The first three packages were published within a two-minute window (07:10–07:11 UTC). The specs package was compromised via a separate repository (asyncapi/spec-json-schemas) through 11 commits pushed between 07:51 and 08:28 UTC, with the two additional malicious versions published at 08:06 and 08:30 UTC. All five versions were unpublished from npm by approximately 11:12–11:18 UTC, giving an approximate exposure window of two to four hours depending on the package.","heading":"Affected Packages and Scale of Exposure","severity":"critical","sources":[{"credibility":2,"name":"SafeDep: AsyncAPI Generator Supply Chain Attack — Miasma RAT","type":"research","url":"https://safedep.io/asyncapi-generator-supply-chain-attack-miasma-rat/"},{"credibility":1,"name":"StepSecurity: Compromised Next Branch Pushes Malicious AsyncAPI Packages to npm","type":"research","url":"https://www.stepsecurity.io/blog/compromised-next-branch-pushes-malicious-asyncapi-generator-generator-helpers-and-generator-components-to-npm"},{"credibility":1,"name":"Chainguard: AsyncAPI Supply Chain Compromise","type":"research","url":"https://www.chainguard.dev/unchained/asyncapi-supply-chain-compromise-npm-packages-backdoored-via-github-actions"},{"credibility":2,"name":"Security Affairs: AsyncAPI npm Supply Chain Attack","type":"news_article","url":"https://securityaffairs.com/195395/security/asyncapi-npm-supply-chain-attack-malware-injected-into-packages-with-2-million-weekly-downloads.html/"}]},{"content":"Unlike the majority of npm supply chain attacks that rely on postinstall lifecycle hooks — a vector that npm v12 and many security scanners actively restrict — the Miasma payload embedded in these packages executes at module-load time, firing the moment application code calls require() or import() on an affected library. This technique evades install-time detection entirely; a developer's CI runner or local build system would need to actually use the library in code to trigger the payload, not merely install it. Three injection methods were identified across the compromised files: (1) whitespace obfuscation, where the payload was concealed after approximately 880 spaces following legitimate function closures; (2) direct prepending of unobfuscated malicious code at the start of a file; and (3) Babel-transpiled inline obfuscated JavaScript. Each variant spawns a detached Node.js child process that downloads the Miasma RAT stage-2 bundle from IPFS. Because the attacker did not steal an npm publishing token directly but instead gained push access to the repository's next branch and let the project's legitimate GitHub Actions release workflow do the publishing via npm's GitHub OIDC trusted-publisher integration, all five malicious versions were published with valid SLSA provenance attestations. Verification of provenance alone cannot be used to confirm a package's safety in this attack class.","heading":"Payload Delivery: Import-Time Execution and Provenance Attestation Bypass","severity":"critical","sources":[{"credibility":1,"name":"Wiz M-Red-Team: AsyncAPI Supply Chain Compromise via GitHub Actions","type":"research","url":"https://www.wiz.io/blog/m-red-team-asyncapi-supply-chain-compromise-via-github-actions"},{"credibility":1,"name":"StepSecurity: Compromised Next Branch Pushes Malicious AsyncAPI Packages to npm","type":"research","url":"https://www.stepsecurity.io/blog/compromised-next-branch-pushes-malicious-asyncapi-generator-generator-helpers-and-generator-components-to-npm"},{"credibility":1,"name":"Microsoft Security Blog: Unpacking AsyncAPI npm Supply Chain Compromise — Import-Time Payload Delivery","type":"research","url":"https://www.microsoft.com/en-us/security/blog/2026/07/15/unpacking-asyncapi-npm-supply-chain-compromise-import-time-payload-delivery/"},{"credibility":2,"name":"OX Security: AsyncAPI npm Organization Compromised, 2M Weekly Downloads Affected","type":"research","url":"https://www.ox.security/blog/asyncapi-npm-organization-compromised-2m-weekly-downloads-affected/"}]},{"content":"The Miasma RAT delivered in this attack is a three-stage payload. Stage 1 is the import-time dropper embedded in the poisoned npm package files, which spawns a detached child process. Stage 2 is an 8.25 MB encrypted bundle downloaded from IPFS containing configuration and runtime. Stage 3 is the full Miasma RAT framework — a 92,000-line modular Node.js application (91,973 lines per one analysis) comprising a hybrid info-stealer, crypto-stealer, and remote access trojan. Credential harvesting targets more than 130 file types and 300+ file paths including: AWS access keys and config files; SSH private keys; npm authentication tokens; GitHub CLI tokens and personal access tokens; browser-stored passwords from major browsers; macOS Keychain entries; cryptocurrency wallet seed phrases and keystore files (targeting Metamask, Phantom, and similar wallet software); and Claude Code, GitHub Copilot, and Cursor AI tool session tokens. For persistence, the RAT drops sync.js into platform-specific directories: ~/.local/share/NodeJS/ on Linux, ~/Library/Application Support/NodeJS/ on macOS, and %LOCALAPPDATA%\\NodeJS\\ on Windows. On Linux it also installs a systemd user service named miasma-monitor.service and may add crontab entries. On Windows it uses the Registry for persistence; on macOS it uses launchd. Additional capabilities include LAN lateral movement via subnet scanning and mDNS, a metamorphic mutation engine for polymorphic obfuscation to evade future detection, virtual machine and antivirus evasion logic, and self-propagation that attempts to use stolen npm, PyPI, and Cargo credentials to poison further packages. The malware contains a Russian locale detection routine that causes it to terminate automatically if the system locale is set to Russian — a pattern commonly used by threat actors operating from Russia or CIS countries to avoid accidentally compromising domestic targets, though this alone is insufficient for attribution.","heading":"Miasma RAT: Capabilities and Technical Architecture","severity":"critical","sources":[{"credibility":2,"name":"SafeDep: AsyncAPI Generator Supply Chain Attack — Miasma RAT","type":"research","url":"https://safedep.io/asyncapi-generator-supply-chain-attack-miasma-rat/"},{"credibility":1,"name":"StepSecurity: Compromised Next Branch Pushes Malicious AsyncAPI Packages to npm","type":"research","url":"https://www.stepsecurity.io/blog/compromised-next-branch-pushes-malicious-asyncapi-generator-generator-helpers-and-generator-components-to-npm"},{"credibility":1,"name":"Wiz M-Red-Team: AsyncAPI Supply Chain Compromise via GitHub Actions","type":"research","url":"https://www.wiz.io/blog/m-red-team-asyncapi-supply-chain-compromise-via-github-actions"},{"credibility":2,"name":"Security Affairs: AsyncAPI npm Supply Chain Attack","type":"news_article","url":"https://securityaffairs.com/195395/security/asyncapi-npm-supply-chain-attack-malware-injected-into-packages-with-2-million-weekly-downloads.html/"}]},{"content":"The Miasma RAT employs six independent C2 channels with failover logic, designed to remain operational even if individual channels are blocked. The primary channel is a plain HTTP endpoint at IP address 85.137.53.71 (hosted in the Netherlands, ASN AS43641) on ports 8080, 8081, and 8091. Fallback channels include: Nostr decentralized relay network; an Ethereum smart contract dead-drop at address 0x12c37A86a0Ed0beBe5d1d6a43E42f07860eAc710; a libp2p mesh network; BitTorrent DHT bootstrap nodes (router.bittorrent.com, router.utorrent.com, dht.transmissionbt.com); and mDNS for local network propagation. IPFS gateways (ipfs.io) were used for payload staging and retrieval. The token exfiltration in the initial GitHub Actions exploitation stage used rentry.co as a pastebin dead-drop. The multi-channel architecture means blocking the primary C2 IP is insufficient for remediation; the RAT will fall back to Nostr or blockchain-based channels.","heading":"Command and Control Infrastructure","severity":"critical","sources":[{"credibility":1,"name":"Wiz M-Red-Team: AsyncAPI Supply Chain Compromise via GitHub Actions","type":"research","url":"https://www.wiz.io/blog/m-red-team-asyncapi-supply-chain-compromise-via-github-actions"},{"credibility":1,"name":"Chainguard: AsyncAPI Supply Chain Compromise","type":"research","url":"https://www.chainguard.dev/unchained/asyncapi-supply-chain-compromise-npm-packages-backdoored-via-github-actions"},{"credibility":2,"name":"SafeDep: AsyncAPI Generator Supply Chain Attack — Miasma RAT","type":"research","url":"https://safedep.io/asyncapi-generator-supply-chain-attack-miasma-rat/"}]},{"content":"The Miasma RAT specifically targets cryptocurrency wallet data as a primary objective. The credential harvesting module scans for wallet seed phrases, private keys, and keystore files associated with browser-extension wallets (Metamask, Phantom, and similar), hardware wallet companion software, and command-line wallet tools. The RAT also targets exchange API keys stored in config files and environment variables on developer machines. The attacker embedded at least two Ethereum wallet addresses in the payload (0x12c37A86a0Ed0beBe5d1d6a43E42f07860eAc710 and 0x1969ab05d67b67fdcaa26240f738ccb077e1cd84), one of which is used as a blockchain-based C2 dead-drop channel. Given that AsyncAPI is widely used in financial technology, Web3 backend services, and crypto protocol development, a significant portion of the estimated exposure pool may be developers with access to production wallet infrastructure, validator keys, or treasury management systems. Any cryptocurrency wallets whose seed phrases or private keys were stored on an affected machine should be considered fully compromised; assets should be moved to new wallets immediately.","heading":"Cryptocurrency Wallet and Financial Asset Risk","severity":"critical","sources":[{"credibility":1,"name":"StepSecurity: Compromised Next Branch Pushes Malicious AsyncAPI Packages to npm","type":"research","url":"https://www.stepsecurity.io/blog/compromised-next-branch-pushes-malicious-asyncapi-generator-generator-helpers-and-generator-components-to-npm"},{"credibility":1,"name":"Chainguard: AsyncAPI Supply Chain Compromise","type":"research","url":"https://www.chainguard.dev/unchained/asyncapi-supply-chain-compromise-npm-packages-backdoored-via-github-actions"},{"credibility":2,"name":"Security Affairs: AsyncAPI npm Supply Chain Attack","type":"news_article","url":"https://securityaffairs.com/195395/security/asyncapi-npm-supply-chain-attack-malware-injected-into-packages-with-2-million-weekly-downloads.html/"}]},{"content":"Attribution for this attack remains uncertain as of July 2026. The payload self-identifies as 'M-RED-TEAM v6.4' and the campaign string embedded in the malware reads 'miasma-train-p1.' Researchers at Wiz noted the Rentry dead-drop slug 'elzotebo' matches naming patterns associated with the 'prt-scan' campaign, which has not been publicly linked to the Miasma malware family. OX Security researchers concluded that while the malware contains strings referencing 'Miasma' and similarities to the Shai-Hulud campaign exist, the embedded 'Miasma' strings are likely deliberate misdirection rather than genuine attribution markers. Technical differences from the open-source Miasma toolkit released in June 2026 include: use of Node.js instead of Bun as the runtime; dedicated HTTP server infrastructure instead of GitHub-only C2; five additional fallback channels beyond what the open-source version implements; and different cryptographic implementations. Wiz explicitly stated: 'At this time, we are not making any definitive attribution.' The attacker's GitHub account had user ID 148100. The Russian locale self-termination check is noted by researchers as a potential geographic indicator but is insufficient on its own for attribution.","heading":"Attribution","severity":"high","sources":[{"credibility":1,"name":"Wiz M-Red-Team: AsyncAPI Supply Chain Compromise via GitHub Actions","type":"research","url":"https://www.wiz.io/blog/m-red-team-asyncapi-supply-chain-compromise-via-github-actions"},{"credibility":2,"name":"Security Affairs: AsyncAPI npm Supply Chain Attack","type":"news_article","url":"https://securityaffairs.com/195395/security/asyncapi-npm-supply-chain-attack-malware-injected-into-packages-with-2-million-weekly-downloads.html/"},{"credibility":2,"name":"SafeDep: AsyncAPI Generator Supply Chain Attack — Miasma RAT","type":"research","url":"https://safedep.io/asyncapi-generator-supply-chain-attack-miasma-rat/"}]},{"content":"The following indicators of compromise (IOCs) were published by multiple security researchers investigating this incident. Network indicators: primary C2 IP 85.137.53.71 on ports 8080, 8081, and 8091 (Netherlands, AS43641); IPFS gateway traffic to ipfs.io for payload retrieval; IPFS content hashes QmQobZSp1wRPrpSEQ56qnyq7ecZh5Bg5k1fnjt4SUwwHb9 and Qmet4fhsAaWMBUxNDfREHwgiyDeSWy4YSYs9wiKUW5jGyf; outbound connections to Nostr relay endpoints, BitTorrent DHT bootstrap nodes, and libp2p peers; and exfiltration traffic to rentry.co. File system indicators: presence of sync.js at ~/.local/share/NodeJS/ (Linux), ~/Library/Application Support/NodeJS/ (macOS), or %LOCALAPPDATA%\\NodeJS\\ (Windows); systemd user service miasma-monitor.service on Linux; unexpected crontab entries or launchd plists referencing NodeJS directories. SHA1 hashes of malicious files: validator.js — 22bf76fe317ea6769bd38619bd440e42d119bd6b; utils.js — a7e18d96efd3cdb127ef4cdcad9e3ad26c482bf2; ErrorHandling.js — 9890950adcbc2478e7a080234f053214adbad44e; index.js — c70e105e212ff3c1daa04bb2a62507717f296b0b; sync.js — c8cb3f6d5b90c46686d2bf531dc1a5786e27edc5. Ethereum contract address used for C2: 0x12c37A86a0Ed0beBe5d1d6a43E42f07860eAc710. StepSecurity's Harden-Runner tool was reported to have blocked the exfiltration in monitored environments by detecting anomalous outbound connections to IPFS and BitTorrent endpoints.","heading":"Indicators of Compromise","severity":"critical","sources":[{"credibility":1,"name":"Wiz M-Red-Team: AsyncAPI Supply Chain Compromise via GitHub Actions","type":"research","url":"https://www.wiz.io/blog/m-red-team-asyncapi-supply-chain-compromise-via-github-actions"},{"credibility":1,"name":"Chainguard: AsyncAPI Supply Chain Compromise","type":"research","url":"https://www.chainguard.dev/unchained/asyncapi-supply-chain-compromise-npm-packages-backdoored-via-github-actions"},{"credibility":1,"name":"StepSecurity: Compromised Next Branch Pushes Malicious AsyncAPI Packages to npm","type":"research","url":"https://www.stepsecurity.io/blog/compromised-next-branch-pushes-malicious-asyncapi-generator-generator-helpers-and-generator-components-to-npm"}]},{"content":"Security researchers across multiple firms published consistent remediation guidance following the incident. Package pinning: developers and CI/CD systems should pin to safe versions — @asyncapi/generator at 3.3.0, @asyncapi/generator-helpers at 1.1.0, @asyncapi/generator-components at 0.7.0, and @asyncapi/specs at 6.11.1 — and regenerate lock files (package-lock.json, yarn.lock, or pnpm-lock.yaml) to remove any reference to the malicious versions. Persistence removal: scan for and remove sync.js from platform-specific NodeJS application support directories and disable or remove the miasma-monitor.service systemd unit and any related crontab or launchd entries. Credential rotation: all credentials stored on or accessible from any machine that imported an affected package during the exposure window (approximately 07:10–11:18 UTC on July 14, 2026) should be treated as compromised and rotated. This includes npm tokens, GitHub personal access tokens and fine-grained tokens, SSH private keys, AWS and other cloud provider access keys, browser-stored passwords, and any API keys for services whose configuration files resided on the machine. Cryptocurrency wallets: any wallet whose seed phrase or private key was accessible on an affected machine should be considered fully compromised; funds should be moved to new wallets generated on a clean machine. AI coding assistant sessions (Claude Code, GitHub Copilot, Cursor) on affected machines should also be treated as compromised due to the RAT's specific targeting of these tools. CI/CD hardening: organizations are advised to audit all GitHub Actions workflows for pull_request_target usage, restrict workflows from checking out untrusted code with elevated permissions, implement egress filtering for CI/CD runners to block unexpected outbound traffic to IPFS, DHT, and unknown IP addresses, and follow GitHub's documented guidance on securing the pull_request_target trigger.","heading":"Remediation Guidance","severity":"high","sources":[{"credibility":1,"name":"StepSecurity: Compromised Next Branch Pushes Malicious AsyncAPI Packages to npm","type":"research","url":"https://www.stepsecurity.io/blog/compromised-next-branch-pushes-malicious-asyncapi-generator-generator-helpers-and-generator-components-to-npm"},{"credibility":1,"name":"Chainguard: AsyncAPI Supply Chain Compromise","type":"research","url":"https://www.chainguard.dev/unchained/asyncapi-supply-chain-compromise-npm-packages-backdoored-via-github-actions"},{"credibility":2,"name":"SafeDep: AsyncAPI Generator Supply Chain Attack — Miasma RAT","type":"research","url":"https://safedep.io/asyncapi-generator-supply-chain-attack-miasma-rat/"},{"credibility":1,"name":"Microsoft Security Blog: Unpacking AsyncAPI npm Supply Chain Compromise","type":"research","url":"https://www.microsoft.com/en-us/security/blog/2026/07/15/unpacking-asyncapi-npm-supply-chain-compromise-import-time-payload-delivery/"}]},{"content":"Multiple researchers noted that this incident represents at least the third notable 'pwn request'-style GitHub Actions compromise of a high-download npm namespace in 2026, and the second targeting the AsyncAPI project specifically. The attack illustrates a broader pattern in which the npm OIDC provenance attestation system — intended to increase supply chain trust — can be bypassed when the underlying repository's CI/CD configuration is itself vulnerable. Valid provenance attestations signed by GitHub's OIDC identity provider were present on all five malicious package versions because the attack leveraged the legitimate release workflow rather than stolen publishing credentials. This undermines a widely cited defense-in-depth recommendation. Researchers from Wiz, Chainguard, and OX Security all independently noted that npm provenance verification alone is insufficient against this class of attack. The unit42 (Palo Alto Networks) npm threat landscape report, updated July 15, 2026, referenced this incident in the context of import-time payload delivery as an emerging dominant technique supplanting postinstall hooks.","heading":"Broader Context: Repeated Targeting of AsyncAPI and npm Ecosystem","severity":"medium","sources":[{"credibility":1,"name":"Chainguard: AsyncAPI Supply Chain Compromise","type":"research","url":"https://www.chainguard.dev/unchained/asyncapi-supply-chain-compromise-npm-packages-backdoored-via-github-actions"},{"credibility":1,"name":"Palo Alto Networks Unit42: The npm Threat Landscape (Updated July 15)","type":"research","url":"https://unit42.paloaltonetworks.com/monitoring-npm-supply-chain-attacks/"},{"credibility":2,"name":"Rescana: Active Exploitation Alert — AsyncAPI npm Supply Chain Attack","type":"news_article","url":"https://www.rescana.com/post/active-exploitation-alert-asyncapi-npm-supply-chain-attack-delivers-multi-stage-miasma-botnet-via-compromised-github-act"}]}],"sources_used":[{"credibility":1,"name":"Microsoft Security Blog: Unpacking AsyncAPI npm Supply Chain Compromise — Import-Time Payload Delivery","type":"research","url":"https://www.microsoft.com/en-us/security/blog/2026/07/15/unpacking-asyncapi-npm-supply-chain-compromise-import-time-payload-delivery/"},{"credibility":1,"name":"Wiz M-Red-Team: AsyncAPI Supply Chain Compromise via GitHub Actions","type":"research","url":"https://www.wiz.io/blog/m-red-team-asyncapi-supply-chain-compromise-via-github-actions"},{"credibility":1,"name":"Chainguard: AsyncAPI Supply Chain Compromise — npm Packages Backdoored via GitHub Actions","type":"research","url":"https://www.chainguard.dev/unchained/asyncapi-supply-chain-compromise-npm-packages-backdoored-via-github-actions"},{"credibility":1,"name":"StepSecurity: Compromised Next Branch Pushes Malicious AsyncAPI Packages to npm","type":"research","url":"https://www.stepsecurity.io/blog/compromised-next-branch-pushes-malicious-asyncapi-generator-generator-helpers-and-generator-components-to-npm"},{"credibility":2,"name":"SafeDep: AsyncAPI Generator Supply Chain Attack — Miasma RAT","type":"research","url":"https://safedep.io/asyncapi-generator-supply-chain-attack-miasma-rat/"},{"credibility":2,"name":"OX Security: AsyncAPI npm Organization Compromised, 2M Weekly Downloads Affected","type":"research","url":"https://www.ox.security/blog/asyncapi-npm-organization-compromised-2m-weekly-downloads-affected/"},{"credibility":2,"name":"Security Affairs: AsyncAPI npm Supply Chain Attack — Malware Injected into Packages with 2 Million Weekly Downloads","type":"news_article","url":"https://securityaffairs.com/195395/security/asyncapi-npm-supply-chain-attack-malware-injected-into-packages-with-2-million-weekly-downloads.html/"},{"credibility":2,"name":"GBHackers: AsyncAPI Supply Chain Attack Deploys Miasma Backdoor Through Trusted npm Workflows","type":"news_article","url":"https://gbhackers.com/asyncapi-supply-chain-attack/"},{"credibility":2,"name":"CyberSecurityNews: Hackers Abuse GitHub Actions to Backdoor AsyncAPI npm Packages With Miasma RAT","type":"news_article","url":"https://cybersecuritynews.com/hackers-abuse-github-actions/"},{"credibility":1,"name":"Palo Alto Networks Unit42: The npm Threat Landscape (Updated July 15, 2026)","type":"research","url":"https://unit42.paloaltonetworks.com/monitoring-npm-supply-chain-attacks/"},{"credibility":2,"name":"Rescana: Active Exploitation Alert — AsyncAPI npm Supply Chain Attack Delivers Multi-Stage Miasma Botnet","type":"news_article","url":"https://www.rescana.com/post/active-exploitation-alert-asyncapi-npm-supply-chain-attack-delivers-multi-stage-miasma-botnet-via-compromised-github-act"},{"credibility":2,"name":"InvisiRisk: AsyncAPI npm Supply Chain Attack Delivers Miasma RAT","type":"news_article","url":"https://www.invisirisk.com/blog/asyncapi-npm-supply-chain-attack-delivers-miasma-rat/"}],"summary":"On July 14, 2026, attackers exploited a misconfigured pull_request_target GitHub Actions workflow in the AsyncAPI repository to exfiltrate a privileged CI service-account token, then used it to publish five trojanized versions of four @asyncapi npm packages collectively downloaded approximately 2.9 million times per week. Each version contained the Miasma RAT, a 92,000-line modular malware framework that executes at module-load time rather than on install, harvesting browser credentials, SSH keys, cloud secrets, and cryptocurrency wallet data before establishing persistence via multiple C2 channels. All five malicious versions were unpublished from npm approximately four hours after publication, but any developer or CI runner that imported an affected package during the exposure window may have had credentials and wallet data exfiltrated.","timeline":[{"date":"2026-04-29","event":"A contributor identified the pull_request_target misconfiguration in AsyncAPI's manual-netlify-preview.yml workflow and submitted a proof-of-concept demonstrating the vulnerability.","source":"Wiz M-Red-Team research","source_url":"https://www.wiz.io/blog/m-red-team-asyncapi-supply-chain-compromise-via-github-actions"},{"date":"2026-05-17","event":"A proposed fix for the pull_request_target misconfiguration was submitted but was not merged into the AsyncAPI repository, leaving the vulnerability open for 58 more days.","source":"Wiz M-Red-Team research","source_url":"https://www.wiz.io/blog/m-red-team-asyncapi-supply-chain-compromise-via-github-actions"},{"date":"2026-07-14","event":"Payload compiled at approximately 04:10 UTC, approximately three hours before injection into the repository.","source":"SafeDep research","source_url":"https://safedep.io/asyncapi-generator-supply-chain-attack-miasma-rat/"},{"date":"2026-07-14","event":"At 05:08 UTC, attacker opened pull request #2155 against asyncapi/generator with obfuscated JavaScript payload hidden after approximately 1,000 bytes of whitespace. The attacker also opened 36 additional decoy pull requests proposing a fake charity donation page as camouflage.","source":"Wiz M-Red-Team research","source_url":"https://www.wiz.io/blog/m-red-team-asyncapi-supply-chain-compromise-via-github-actions"},{"date":"2026-07-14","event":"At 05:16 UTC, the misconfigured manual-netlify-preview.yml workflow executed the attacker's code and exfiltrated the asyncapi-bot service account token to a Rentry pastebin dead-drop (slug: elzotebo).","source":"Wiz M-Red-Team research","source_url":"https://www.wiz.io/blog/m-red-team-asyncapi-supply-chain-compromise-via-github-actions"},{"date":"2026-07-14","event":"At 06:58 UTC, attacker pushed malicious commit 3eab3ec to the next branch of asyncapi/generator, injecting the Miasma dropper into package source files using three obfuscation techniques.","source":"SafeDep research","source_url":"https://safedep.io/asyncapi-generator-supply-chain-attack-miasma-rat/"},{"date":"2026-07-14","event":"Between 07:10 and 07:11 UTC, three malicious packages were published to npm via AsyncAPI's legitimate GitHub Actions release workflow with valid OIDC provenance attestations: @asyncapi/generator@3.3.1, @asyncapi/generator-helpers@1.1.1, and @asyncapi/generator-components@0.7.1.","source":"StepSecurity and Chainguard research","source_url":"https://www.stepsecurity.io/blog/compromised-next-branch-pushes-malicious-asyncapi-generator-generator-helpers-and-generator-components-to-npm"},{"date":"2026-07-14","event":"Between 07:51 and 08:28 UTC, attacker pushed 11 commits to the asyncapi/spec-json-schemas repository, compromising the specs package.","source":"StepSecurity research","source_url":"https://www.stepsecurity.io/blog/compromised-next-branch-pushes-malicious-asyncapi-generator-generator-helpers-and-generator-components-to-npm"},{"date":"2026-07-14","event":"At 08:06 and 08:30 UTC, two additional malicious versions were published to npm: @asyncapi/specs@6.11.2-alpha.1 and @asyncapi/specs@6.11.2, each with valid OIDC provenance attestations.","source":"Chainguard and SafeDep research","source_url":"https://www.chainguard.dev/unchained/asyncapi-supply-chain-compromise-npm-packages-backdoored-via-github-actions"},{"date":"2026-07-14","event":"Between approximately 11:12 and 11:18 UTC, all five malicious package versions were unpublished from the npm registry, ending the active distribution window.","source":"StepSecurity research","source_url":"https://www.stepsecurity.io/blog/compromised-next-branch-pushes-malicious-asyncapi-generator-generator-helpers-and-generator-components-to-npm"},{"date":"2026-07-15","event":"Microsoft Security published its analysis of the incident, with specific focus on the import-time payload delivery technique as a mechanism for evading install-hook-based detections.","source":"Microsoft Security Blog","source_url":"https://www.microsoft.com/en-us/security/blog/2026/07/15/unpacking-asyncapi-npm-supply-chain-compromise-import-time-payload-delivery/"},{"date":"2026-07-15","event":"Palo Alto Networks Unit42 updated its npm threat landscape report to reference the AsyncAPI incident in the context of import-time payload delivery as an emerging technique.","source":"Palo Alto Networks Unit42","source_url":"https://unit42.paloaltonetworks.com/monitoring-npm-supply-chain-attacks/"},{"date":"2026-07-21","event":"GBHackers, CyberSecurityNews, and Rescana published public reports summarizing the incident, including the 'M-RED-TEAM v6.4' self-identification and the broader campaign context.","source":"GBHackers / CyberSecurityNews","source_url":"https://gbhackers.com/asyncapi-supply-chain-attack/"}]},"v":1}Verify offline (run on your own machine)python -m src.verify_decision 541ebaad-30d9-499f-87c7-165012b0d04b
How verification works. The “Row integrity” check above is computed in your browser — your machine recomputes the SHA-256 of the canonical bytes and compares against the stored hash. No avoid.net server can fake that check. The “full verify” link goes one level deeper: your browser fetches the on-chain transaction from a Solana RPC node and confirms the same hash is in the memo. If you don’t want to trust either avoid.net or the public RPC, run the CLI verifier on your own machine —
python -m src.verify_decision <event_id>.