The Axios Security Alert: What You Need to Know and How to Check If You are Compromised
Jay Rathjen
On March 31, 2026, a major security breach struck Axios, one of the most trusted tools in the JavaScript ecosystem. By hijacking a lead maintainer’s account, attackers published two "poisoned" versions—1.14.1 and 0.30.4—directly to the npm registry. These versions were rigged with a hidden "Trojan Horse" designed to silently install a Remote Access Trojan (RAT) on any Windows, macOS, or Linux machine that ran an install command during a critical three-hour window.
While the malicious versions have been removed, the "landmines" remain: if your system pulled these updates, your private keys, cloud credentials, and browser sessions may have been sent to an attacker-controlled server. This incident serves as a stark reminder that even the most reputable tools are only as secure as the accounts that manage them. If you haven't checked your system yet, now is the time to verify your safety.
If you’re a developer, a student learning to code, or even just someone using AI tools like LiteLLM, you may have heard some chatter this morning about a "compromise" involving a popular tool called Axios.
Here is the plain-English breakdown of what happened, why it matters, and how to make sure your computer is safe.
What Happened?
Late last night (March 31, 2026), hackers gained access to the account of one of the lead maintainers of Axios—a "building block" library used by millions of apps to talk to the internet.
The hackers used this access to release "poisoned" versions of the library. Instead of just doing its normal job, this poisoned version contained a hidden "Trojan Horse." When a developer or an automated app updated its code during a 3-hour window (roughly 02:20 to 05:30 AM Berlin time), the Trojan quietly installed itself in the background.
Who is Affected?
You might be at risk if:
- You are a Developer: If you ran
npm installoryarnon a project this morning. - You use AI Tools: Tools like LiteLLM or certain VS Code extensions often update themselves automatically. If they did so during that 3-hour window, they might have pulled in the bad code.
- You have older projects: Even if you haven't touched a project in months, an automated "dependency bot" or a shared cache on your computer might have flagged these files.
What are the Risks?
The "poison" in this update was designed to do two things:
- Steal Secrets: It looks for files named
.env(which often contain passwords to databases or services like OpenAI and Stripe) and sends them to the hackers. - Monitor Your Activity: It installs a small program that stays on your computer even after you restart, potentially allowing hackers to see what you’re doing or steal your browser "cookies" (which let them log into your accounts without a password).
How to Check and Clean Your System
Below are three "Search and Destroy" scripts. They will scan your computer for the specific "fingerprints" left by this attack and delete the bad files.
🛡️ For Windows Users
How to run: 1. Right-click the Start button and select Terminal (Admin) or PowerShell (Admin). 2. Copy and paste the code below and hit Enter.
🍎 For macOS Users
How to run: 1. Open Terminal (Cmd + Space, type "Terminal"). 2. Copy and paste the code below and hit Enter.
🐧 For Linux Users
How to run: 1. Open your favorite terminal. 2. Copy and paste the code below and hit Enter.
One Final Step: Peace of Mind
If any of the scripts above found a "Poisoned Project," it is highly recommended that you change your primary passwords (especially for GitHub, your email, and any API keys you use for AI) just to be safe.
The internet is a wild place, but a little bit of cleanup goes a long way!
# 1. Check for the Trojan and 2. Scan for poisoned project files
$badFiles = @("$env:PROGRAMDATA\wt.exe", "$env:TEMP\6202033.ps1")
foreach ($f in $badFiles) { if (Test-Path $f) { Write-Host "!!! DANGER: $f found!" -Fore Red } }
Write-Host "Scanning projects for poisoned Axios versions..." -Fore Cyan
Get-ChildItem -Path "C:\" -Filter "package-lock.json" -Recurse -ErrorAction SilentlyContinue | ForEach-Object {
if ((Get-Content $_.FullName -Raw) -match "1\.14\.1|0\.30\.4|plain-crypto-js") {
Write-Host "FOUND POISONED PROJECT: $($_.DirectoryName)" -Fore Yellow
Remove-Item -Path (Join-Path $_.DirectoryName "node_modules") -Recurse -Force -ErrorAction SilentlyContinue
Remove-Item -Path $_.FullName -Force
Write-Host "Successfully Cleaned." -Fore Green
}
}
npm cache clean --forceAbout the Author
Jay Rathjen