axios npm compromise checker: did you install a malicious version?

On 31 March 2026 two malicious axios releases, 1.14.1 and 0.30.4, were on npm for about three hours. They added a dependency, plain-crypto-js, that installs a remote access trojan when npm runs its install script. You are affected only if one of them was installed; a lockfile is the way to tell.

Disclosed . This page was last updated .

Add your lockfile: it says which versions were installed.

Checked against OSV.dev, CISA KEV, FIRST EPSS, npm, PyPI, deps.dev, endoflife.date and Docker Hub, live.

What happened

An attacker took over the npm account of axios’s lead maintainer and published axios 1.14.1 at 00:21 UTC and 0.30.4 at about 01:00 UTC on 31 March 2026. Both were removed at 03:15 UTC, roughly three hours later, according to the maintainers’ post-mortem. The maintainer was targeted with a social-engineering campaign that installed a remote access trojan on their machine.

Both releases added plain-crypto-js@4.2.1 as a dependency. Its install script contacts the attacker’s server and drops a platform-specific remote access trojan on Windows, macOS and Linux (Microsoft Threat Intelligence, which attributes it to Sapphire Sleet, a North Korean state actor).

GitHub published the malware advisories GHSA-fw8c-xr5c-95f9 (axios) and GHSA-2x9r-6wxq-hrr7 (plain-crypto-js); OSV.dev carries them as MAL-2026-2307 and MAL-2026-2306.

Affected versions

  • axios

    Affected
    1.14.1 and 0.30.4 (removed from npm)
    Fixed or safe
    Any other release; the maintainers pointed to 1.14.0 and 0.30.3 at the time
  • plain-crypto-js

    Affected
    Every version (a malicious package)
    Fixed or safe
    Remove it

Who is affected

Affected: any machine or CI runner that ran npm install (or yarn, pnpm or bun) and resolved axios to 1.14.1 or 0.30.4 between 00:21 and 03:15 UTC on 31 March 2026, directly or through another package. GitHub’s advisory says to treat such a machine as fully compromised.

Not affected: installs that kept a lockfile pinning another axios version, installs before or after that window, and projects that don’t use axios at all. A range such as ^1.14.0 could only have pulled 1.14.1 during the window, because npm no longer serves it.

What to do

  1. Search every lockfile (package-lock.json, yarn.lock, pnpm-lock.yaml, bun.lock) for plain-crypto-js: only the two malicious axios releases pulled it in. The maintainers’ post-mortem gives a grep for it. Check CI logs from 31 March too.
  2. If you find either: rotate every secret and key that machine or runner could reach, from a different computer. Removing the package doesn’t guarantee the trojan is gone, so rebuild the machine or runner.
  3. Look for outbound traffic to sfrclak[.]com or 142.11.206.73 on port 8000, the indicators Microsoft and OSV list.
  4. Move axios to the current release (the check above shows which), and keep exact versions in a committed lockfile so a new release can’t reach you unreviewed.

Sources

Hear about the next one first

Connect GitHub and StackPrism re-checks your repos every day, with an alert when a new critical finding such as a known-exploited advisory turns up. Free to start.