Axios NPM Distribution Compromised in Supply Chain Attack

A compromised axios maintainer account led to malicious npm releases that propagated across environments. Learn how to assess impact, detect compromise, and secure your development workflows.

Overview

On March 31, 2026 (at 00:21 UTC for v1.14.1 and 01:00 UTC for v0.30.4), an unknown threat actor compromised the npm account of an axios maintainer and published two malicious versions of the npm package (v1.14.1, v0.30.4), which introduced a dependency on plain-crypto-js, a newly created malicious package. Although the malicious versions were removed within a few hours, axios’s widespread usage - present in ~80% of cloud and code environments and downloaded ~100 million times per week - enabled rapid exposure, with observed execution in 3% of affected environments. Organizations are strongly advised to audit their environments for potential execution of these versions (tracked as GHSA-fw8c-xr5c-95f9 and MAL-2026-2306).

Technical Details

The malicious versions of axios differed from legitimate releases by including a dependency on plain-crypto-js, a trojanized package. These versions were published directly via a compromised maintainer account and later removed from npm following disclosure. Due to the short exposure window but high prevalence of axios, even limited availability resulted in measurable execution across environments.

The malicious package includes a dropper (setup.js) that downloads and executes platform-specific second-stage payloads from sfrclak.com:8000, and then self-cleans by deleting itself and restoring a clean package.json. The second-stage payloads function as lightweight remote access trojans (RATs) and beacon to the C2 server every 60 seconds, transmitting system inventory and awaiting commands.

All three variants implement similar capabilities, including remote shell execution, binary injection, directory browsing, process listing, and system reconnaissance, while differing by operating system. On macOS, the payload is a C++ compiled Mach-O universal binary, and is capable of self-signing injected payloads via codesign. On Windows, the payload is a PowerShell script that establishes persistence via a registry Run key (MicrosoftUpdate) and a re-download batch file. On Linux, the payload is delivered as a Python script.

Which actions should security teams take?

  1. Audit axios usage: Identify whether the affected versions (1.14.1, 0.30.4) were downloaded or executed in your environment. Immediately remove any malicious artifacts from endpoints, build systems, and production workloads.

  2. Rotate exposed credentials: If there is any indication that the malicious packages were executed, assume credential compromise. Scan affected systems for secrets (e.g., environment variables, API keys, tokens) and rotate them accordingly.

  3. Investigate potential compromise paths: Review build pipelines and developer machines for signs of unauthorized access or persistence, as the malware executes during installation and may enable upstream supply chain compromise.

  4. Monitor for suspicious activity: Detect and investigate outbound connections to sfrclak.com:8000, and analyze logs for beaconing behavior, anomalous HTTP POST requests, or unexpected process execution related to package installation.

How can Wiz help?

Wiz customers can refer to the advisory in the Wiz Threat Center for ongoing guidance, pre-built queries, and references to relevant detections they can use to assess the risk in their environment and detect the presence of the malicious package or past executions.

Worried you’ve been impacted? Connect with the Wiz Incident Response team.

References

Appendix - Indicators of compromise (IOCs)

CategoryIndicatorDetailsHash
Compromised packageaxios-0.30.4.tgzStage 1, npm packageSHA256: 59336a964f110c25c112bcc5adca7090296b54ab33fa95c0744b94f8a0d80c0f
Compromised packageaxios-1.14.1.tgzStage 1, npm packageSHA256: 5bb67e88846096f1f8d42a0f0350c9c46260591567612ff9af46f98d1b7571cd
Malicious packageplain-crypto-js-4.2.1.tgzStage 1.5, trojanized npm packageSHA256: 58401c195fe0a6204b42f5f90995ece5fab74ce7c69c67a24c61a057325af668
Filecom.apple.act.mondStage 2 (macOS), Mach-O binarySHA256: 92ff08773995ebc8d55ec4b8e1a225d0d1e51efa4ef88b8849d0071230c9645a
Filestage2.ps1Stage 2 (Windows), PowerShell scriptSHA256: 617b67a8e1210e4fc87c92d1d1da45a2f311c08d26e89b12307cf583c900d101
Fileld.pyStage 2 (Linux), Python scriptSHA256: fcb81618bb15edfdedfb638b4c08a2af9cac9ecfa551af135a8402bf980375cf
Domainsfrclak[.]comC2 domain-
IP142.11.206[.]73C2 IP-
NetworkPort 8000C2 port-
Network/6202033Campaign path-
File Path/Library/Caches/com.apple.act.mondmacOS persistence path-
File Path%PROGRAMDATA%\wt.exeWindows artifact-
File Path%TEMP%\6202033.vbsWindows script-
File Path%TEMP%\6202033.ps1Windows script-
File Path/tmp/ld.pyLinux script-
Package@shadanai/openclawVersions: 2026.3.28-2; 2026.3.28-3; 2026.3.31-1; 2026.3.31-2-
Package@qqbrowser/openclaw-qbotVersion: 0.0.130-
Accountnpm:jasonsaaymanCompromised maintainer (email changed to ifstap@proton.me)-
Accountnpm:nrwisePublished plain-crypto-js (nrwise@proton.me)-

Continue reading

Get a personalized demo

Ready to see Wiz in action?

"Best User Experience I have ever seen, provides full visibility to cloud workloads."
David EstlickCISO
"Wiz provides a single pane of glass to see what is going on in our cloud environments."
Adam FletcherChief Security Officer
"We know that if Wiz identifies something as critical, it actually is."
Greg PoniatowskiHead of Threat and Vulnerability Management