- https://www.stepsecurity.io/blog/axios-compromised-on-npm-malicious-versions-drop-remote-access-trojan
- axios/axios#10604
On March 31, 2026, StepSecurity identified two malicious versions of the widely used axios HTTP client library published to npm: axios@1.14.1 and axios@0.30.4
The malicious versions inject a new dependency, plain-crypto-js@4.2.1, which is never imported anywhere in the axios source code. Its sole purpose is to execute a postinstall script that acts as a cross platform remote access trojan (RAT) dropper, targeting macOS, Windows, and Linux. The dropper contacts a live command and control server and delivers platform specific second stage payloads. After execution, the malware deletes itself and replaces its own package.json with a clean version to evade forensic detection.
If you have installed axios@1.14.1 or axios@0.30.4, assume your system is compromised.
Full instructions for checking your specific project and system can be found here - https://www.stepsecurity.io/blog/axios-compromised-on-npm-malicious-versions-drop-remote-access-trojan#am-i-affected
When you are working with a large team with multilple concurrent workstreams it can be a bit arduous to verify exactly what projects to check specifically, so this script scans an entire directory recursively. This way you can just point it at the place you clone your repositories and be assured you've covered verything.
This bash script scans your local file system
- look for globally installed node packages to ensure they are not at vulnerable versions
- looking for node
package-lock.jsonfiles with affected versions - a fallback check for the presence of any
./node_modules/plain-crypto-jsdirectories that need reviewed - check for RAT artifacts on linux and macOS systems
Copy the script and place it somewhere.
Execute it by running the following, this uses a find command to look for package-lock.json or node_modules/plain-crypto-js so it can take some time
bash scan-lockfile-vulns.sh /path/to/my/repositories/And get output like so
Checking for RAT artifacts
Checking global npm installs for vulnerable package versions
Scanning package-lock.json and node_modules/plain-crypto-js under /path/to/my/repositories/
Checking lockfile: /path/to/my/repositories/some-unrelated/package-lock.json
Checking fallback dir: /path/to/my/repositories/interesting-project/node_modules/plain-crypto-js
Checking lockfile: /path/to/my/repositories/some-other/package-lock.json
Scan complete. Printing matches.
MATCH_TYPE PACKAGE VERSION LOCKFILE_PATH
fallback-dir plain-crypto-js potentially infected /path/to/my/repositories/interesting-project/node_modules/plain-crypto-js
package-lock axios 0.30.4 /path/to/my/repositories/some-other/package-lock.jsonYou still need to reivew your CI pipelines, as they may use npm i or npm install which can pull in updated dependencies