The Axios Supply Chain Attack: A Post-Mortem analysis

The Axios Breach: How 100 Million Downloads Became a Vector
On March 31, 2026, the JavaScript ecosystem faced a significant compromise. Axios, the industry-standard HTTP client, was used to distribute a Remote Access Trojan (RAT). The incident lasted only a few hours, but its reach was global.
When: The Timeline
The compromise occurred in a tight window between 00:21 and 03:15 UTC. During this time, two poisoned versions were pushed to the npm registry:
- v1.14.1
- v0.30.4
Registry security teams flagged the unusual publishing patterns and removed the versions within three hours, but by then, thousands of automated CI/CD pipelines had already pulled the code.
Who: The Compromise and the Actor
The attack originated from the account takeover of lead maintainer Jason Saayman.
- The Victim: Saayman’s npm credentials were harvested via a targeted social engineering campaign. The attackers posed as a legitimate firm, tricking him into using a compromised meeting tool that scraped local session tokens.
- The Attacker: Forensic analysis by Microsoft and Sophos points to North Korean state-sponsored groups (specifically NICKEL GLADSTONE). The infrastructure used to host the malware matched previous campaigns targeting the cryptocurrency and fintech sectors.
Why: Strategic Espionage
This wasn't a simple defacement. The objective was credential harvesting and lateral movement. By infecting a core library, the attackers sought:
- Environment Secrets: Automated scraping of
.envfiles and AWS/GCP tokens from developer machines. - Downstream Access: Injecting code into the build processes of major tech companies to compromise their end-users.
- Persistence: Setting up backdoors that would allow for remote access long after the initial npm package was deleted.
How: The "Phantom" Dependency
The technical execution avoided direct code changes to the Axios library to bypass manual review. Instead, the attackers used a stolen npm access token to publish directly from a CLI, bypassing GitHub's security oversight.
The attackers injected a 'phantom' dependency into the
package.jsoncalledplain-crypto-js. It wasn't actually used by the code, but npm's installer executed it anyway.
The attack chain worked as follows:
- The Hook: A
postinstallscript in the hidden dependency triggered a platform-check. - The Payload: Depending on whether the victim used Windows, macOS, or Linux, a specific binary was downloaded. On Windows, this was a PowerShell-based RAT; on Linux, it was a Python script.
- The Cleanup: The malware was designed to overwrite the
package.jsonwith a clean version immediately after the RAT was deployed, leaving no trace for local developers to find during a routine audit.
Final Thoughts
The Axios breach highlights a fundamental fragility in the modern software supply chain: when a "blindly trusted" dependency is compromised, the fallout is instantaneous. For teams that ran an npm install on March 31, 2026, the standard recovery protocol applies: auditing build logs for anomalies and rotating any secrets exposed to the environment during that window.
Read Next.
Atomic Arch: How 1,500 AUR Packages Got Hijacked Without an Exploit
We analyze the recent Atomic Arch supply chain campaign. Threat actors took over orphaned Arch Linux packages to distribute a credential stealer and eBPF rootkit. Here is what you need to know about the breach.
Copy Fail: Page Cache Corruption in the Linux Kernel (CVE-2026-31431)
CVE-2026-31431, dubbed 'Copy Fail,' allows local attackers to gain root privileges by corrupting the Linux page cache via the algif_aead crypto interface. This article breaks down the technical root cause and the exploitation timeline.
Dirty Frag: Memory Corruption in the Linux IPv6 Stack (CVE-2026-43500)
Dirty Frag represents a dual-CVE vulnerability in the Linux kernel network stack. By exploiting a race condition in IPv6 fragment reassembly, attackers can achieve kernel-mode heap corruption and local privilege escalation.


