Axios npm Supply Chain Compromise: Phantom Dependency RAT Delivery
A compromised npm maintainer account published malicious Axios versions that introduced a hidden transitive dependency delivering a cross-platform Remote Access Trojan through install-time execution.
The compromised Axios releases introduced a malicious dependency chain: application -> axios@1.14.1 or axios@0.30.4 -> plain-crypto-js@4.2.1 -> postinstall execution -> platform-specific RAT delivery. The attack targeted multiple operating systems and was designed around install-time compromise rather than runtime HTTP client behavior. Affected environments are those that resolved and installed the malicious versions during the exposure window, including local developer machines, ephemeral CI workers, Docker build stages, package cache mirrors and artifact registries that retained the poisoned tarballs.
The operational impact is broader than a normal library CVE. Any environment that installed the poisoned versions must be treated as potentially compromised, because execution occurred during dependency installation, before application runtime controls, SSRF protections, WAF rules or code-level mitigations would apply. The most critical blast radius includes npm tokens, Git credentials, SSH keys, cloud provider secrets, CI secrets, deployment keys, package registry credentials, source code access and production release integrity. This class of incident should be modeled as build-plane compromise, not only dependency vulnerability exposure.
Remove axios@1.14.1 and axios@0.30.4 from all dependency manifests, lockfiles, caches and artifact mirrors. Block plain-crypto-js@4.2.1. Rebuild affected artifacts from clean environments. Rotate npm tokens, Git credentials, SSH keys, cloud credentials, CI/CD secrets and deployment tokens exposed to any system that installed the malicious versions. Review CI job logs, npm install logs, endpoint telemetry, EDR alerts, process execution, outbound network activity and package cache contents. Enforce lockfile review, package provenance validation, npm script restrictions where feasible, ephemeral CI isolation and allowlisted dependency policy for critical build pipelines.
{
"dependency": "axios",
"versions": ["1.14.1", "0.30.4"],
"unexpected_transitive_dependency": "plain-crypto-js@4.2.1",
"execution_vector": "npm postinstall",
"affected_plane": "developer and CI/CD build environments",
"source_repository_state": "may appear clean while registry artifact is malicious"
}
{
"blocked_versions": ["axios@1.14.1", "axios@0.30.4", "plain-crypto-js@4.2.1"],
"recommended_baseline": "axios>=1.18.0",
"required_response": [
"remove poisoned versions",
"purge caches and mirrors",
"rebuild artifacts",
"rotate exposed credentials",
"review install-time telemetry"
]
}
View mitigation code
{
"package_policy": {
"deny": [
"axios@1.14.1",
"axios@0.30.4",
"plain-crypto-js@4.2.1"
],
"require_lockfile_review": true,
"prefer_safe_baseline": "axios>=1.18.0",
"ci_controls": [
"run npm ci in isolated ephemeral workers",
"restrict install scripts for untrusted dependency updates",
"monitor package manifest deltas",
"alert on newly introduced transitive dependencies"
]
}
}
View FRES detection heuristic
IF dependency.name == "axios" AND dependency.version IN ["1.14.1", "0.30.4"] THEN critical_supply_chain_exposure = true;
IF lockfile.contains("plain-crypto-js@4.2.1") THEN critical_supply_chain_exposure = true;
IF dependency_delta.added_transitive_dependency == "plain-crypto-js" AND parent == "axios" THEN phantom_dependency_alert = true;
IF install_script_detected == true AND dependency_trust == "new_or_unexpected" THEN build_plane_execution_risk += 40;
IF ci_environment == true AND secrets_available == true THEN blast_radius = "credential_and_release_pipeline_compromise";