Context
On March 31, 2026, a supply chain attack was identified targeting axios, one of the most downloaded npm packages (over 60 million weekly downloads). The attacker published compromised versions that inject malicious code attempting to establish connections to a Command & Control server.
Affected Versions
axios@1.14.1— malicious version, safe version: 1.14.0axios@0.30.4— malicious version, safe version: latest clean 0.x releaseplain-crypto-js@4.2.1— rogue dependency introduced by the attack (should not exist)
The malicious versions introduced plain-crypto-js@4.2.1 as a dependency, which is not a legitimate package and serves as the primary payload carrier.
Attack Vector
The compromised package contains code that:
- Contacts a C2 server at the domain
sfrclak.comfrom build environments - Exfiltrates environment variables, which commonly contain API keys, database credentials, and cloud tokens
- Runs during install/build, meaning CI/CD pipelines are the primary targets
This follows the same playbook seen in recent supply chain attacks on ua-parser-js (2021) and the TeamPCP campaign (2026): compromise a widely-used package, inject a stealer that harvests secrets from CI/CD environments.
Impact
Any project that installed axios@1.14.1 or axios@0.30.4 may have had its build environment secrets exfiltrated. This includes:
- API keys and tokens (AWS, GCP, Stripe, etc.)
- Database credentials stored as environment variables
- CI/CD secrets (GitHub tokens, deploy keys)
- Private keys accessible in the build context
Detection
Check if your project is affected:
# Search lockfiles for the malicious dependency
grep -r "plain-crypto-js" package-lock.json yarn.lock pnpm-lock.yaml
# Check installed version
npm ls axios
# Search node_modules directly
find node_modules -name "plain-crypto-js" -type d
If plain-crypto-js appears anywhere in your dependency tree, you are affected.
Remediation
- Pin axios to a safe version — downgrade to
axios@1.14.0immediately - Delete node_modules and lockfile, then reinstall:
rm -rf node_modules package-lock.json npm install axios@1.14.0 - Rotate all secrets — treat every credential accessible during build as compromised:
- API keys (cloud providers, SaaS services)
- Database passwords
- Deploy keys and tokens
- Session signing secrets
- Audit CI/CD logs — check for outbound connections to
sfrclak.com - Redeploy clean builds — ensure no cached artifacts from compromised versions remain
Timeline
- March 31, 2026 — Malicious versions
1.14.1and0.30.4published to npm - March 31, 2026 — Vercel security team identifies the compromise, blocks C2 domain
- March 31, 2026 — Malicious versions reported to npm for unpublishing
Recommendations
- Pin exact versions in production lockfiles — avoid
^or~ranges for critical dependencies - Use
npm auditand tools like Socket.dev to detect supply chain anomalies - Monitor for unexpected new dependencies —
plain-crypto-jsappearing in a lockfile is a clear indicator of compromise - Limit CI/CD secret exposure — only inject secrets into steps that actually need them
- Enable npm provenance where available to verify package build origins