Axios Supply Chain RAT: 100M Weekly Downloads, One Stolen npm Password, and Your 4-Hour Response Window
What Happened
Between approximately March 29 18:00 UTC and March 30 12:00 UTC, an unknown attacker hijacked the lead Axios maintainer's npm account and published malicious package versions containing a cross-platform remote access trojan. The attack was not a repository compromise — the attacker published directly to npm's registry, bypassing all code review and branch protection. Huntress identified the timeline; the poisoned versions were pulled within 2-3 hours, but at 100M weekly downloads, the blast radius is enormous.
The RAT was delivered through a fake transitive dependency called plain-crypto-js — your primary detection artifact. This dependency doesn't exist in legitimate Axios versions. The trojan deploys on Windows, macOS, and Linux, establishing persistence and credential theft capabilities across all three platforms.
Why This Is Different
Four independent sources converge on a consistent assessment: this is the highest-impact npm supply chain poisoning since SolarWinds in terms of potential downstream exposure. Key differentiators from prior incidents:
| Dimension | Axios (2026) | ua-parser-js (2021) | event-stream (2018) |
|---|---|---|---|
| Weekly Downloads | ~100M | ~8M | ~2M |
| Payload | Full RAT | Cryptominer + stealer | Wallet stealer |
| Exposure Window | ~2-3 hours | ~4 hours | ~2 months |
| Detection Method | Huntress (rapid) | Community report | Community (delayed) |
The RAT payload is materially more dangerous than a cryptominer — it gives the attacker persistent, interactive access for credential harvesting, lateral movement, and data exfiltration. Any developer workstation, CI/CD runner, or container that pulled the malicious version is a potential beachhead into your infrastructure.
Cross-Source Analysis
Sources disagree on one critical detail: whether npm's internal caches still serve poisoned packages. One source explicitly warns to purge internal npm proxies (Artifactory, Nexus, Verdaccio). Another notes the versions were pulled from npm. The safe assumption: your internal caches cached the malicious version during the window and will continue serving it until manually purged.
All four sources agree on a structural finding: npm's default behavior is the root cause. Post-install scripts execute automatically, no lockfile is required, and a single maintainer account is the only gate between attacker and 100M weekly installs. One source notes that pnpm and Bun block post-install scripts by default — npm does not. Another highlights npm's minimumReleaseAge feature (set a 72-hour cooldown before new versions are adopted) as a control that would have prevented exposure.
A single hijacked npm account turned a 2-3 hour window into a cross-platform RAT deployment across one of the most-downloaded packages in the JavaScript ecosystem.
The Parallel Attack
This wasn't isolated. SANS reports a simultaneous compromise of the Telnyx PyPi package (TeamPCP-related) — two major package ecosystems hit the same week. This pattern suggests a coordinated campaign, not an isolated incident.
What to do
Search all lockfiles, node_modules, and CI/CD pipelines for 'plain-crypto-js' within the next 4 hours. Run 'grep -r plain-crypto-js' across every repo and build artifact.
Purge internal npm caches (Artifactory, Nexus, Verdaccio) of any Axios versions published between March 29-30 by end of today.
For any confirmed compromise: forensic image, network isolate, rotate ALL credentials accessible from that machine — SSH keys, API tokens, cloud provider keys, code signing certs, VPN certificates.
Set npm minimumReleaseAge to 72 hours minimum (7 days recommended) and add ignore-scripts=true to .npmrc across all environments this week.
Evaluate migration from npm to pnpm or Bun for default-secure supply chain posture this quarter.