← all case studies Case study · npm · DPRK

How CyberXYZ blocks
axios@1.14.1 at install.

A compromised maintainer shipped two malicious axios tags that pulled in a North Korean RAT dropper. No CVE existed. Here is the timeline, the signals that look for this kind of change, and the block CyberXYZ returns for it today.

Live attack · case study

The axios@1.14.1 compromise,
and where the firewall stops it.

In March 2026, attackers social-engineered the lead axios maintainer, hijacked his npm tokens, and shipped two malicious versions that pulled in a purpose-built RAT dropper. No CVE existed. Here is the timeline, and where CyberXYZ blocks it. One thing to be clear about: we did not block this attack while it was live. Socket found and disclosed it; the release entered CyberXYZ's malicious-package intelligence on April 4, about four days after Socket's disclosure, and our install telemetry began in early April 2026. axios@1.14.1 has been blocked by CyberXYZ since then; the first block in our install log is dated April 7, 2026.

~100Mweekly downloads
174Kdependent packages
~3 hrsexposure window
Sapphire SleetDPRK attribution
  1. ~2 weeks before

    The maintainer is targeted

    An attacker impersonates a company founder, lures the lead axios maintainer from a fake Slack into a Microsoft Teams call, and gets him to install a fake "missing component". It steals his npm tokens, bypassing 2FA entirely.

  2. Mar 30 · 05:57 UTC

    A clean decoy is planted

    plain-crypto-js@4.2.0 is published, completely clean, to build legitimate-looking registry history before the payload lands.

  3. Mar 30 · 23:59 UTC

    The payload ships · what the commit-level signal looks for

    plain-crypto-js@4.2.1 adds a malicious postinstall hook (setup.js) using reversed-base64 and XOR to hide a cross-platform RAT dropper. A new lifecycle hook plus obfuscation is the pattern CyberXYZ's commit-level signal is built to flag, no CVE required.

  4. Mar 31 · 00:21 UTC

    axios pulls it in · what the dependency-injection signal looks for

    axios@1.14.1 (tagged latest), then 0.30.4 (legacy), add plain-crypto-js as a dependency, one that has never existed in any prior axios. A brand-new dependency on a trusted package is the second pattern CyberXYZ looks for.

  5. Mar 31 · 03:15 UTC

    npm removes the versions

    Roughly a three-hour exposure window for everyone relying on after-the-fact takedown.

  6. Apr 1

    Attribution: Sapphire Sleet

    Microsoft Threat Intelligence links the campaign to a North Korean state actor and maps it to MITRE ATT&CK supply-chain techniques.

  7. Apr 7 · 04:51 UTC

    BLOCK, at install time · from here on

    This is the first block of axios@1.14.1 in CyberXYZ's install log, a week after the attack: our telemetry only began in early April, and the block came from our malicious-package intelligence, not from a signal firing. Since then, across every surface, npm install axios@1.14.1 through the proxy returns 403, CI gates fail, the editor flags it and xyz Scanner exits non-zero.

  8. Apr 20

    The CISA advisory lands · three weeks later

    By the time the formal advisory existed, the window was long closed. Even the first public malware records came late in the window: OSV listed plain-crypto-js at 02:07 UTC on March 31, and GitHub's advisory for axios itself (GHSA-fw8c-xr5c-95f9) followed at 03:15 UTC, about when npm removed the versions. A gate that waits for an advisory missed most of the exposure. That gap is why CyberXYZ decides at install time instead of waiting for a CVE.

Blocked at install

What the proxy returns
for axios@1.14.1.

These are real rows from CyberXYZ's own install log, from our own scans and CI, not a customer's. They start in April 2026, after the attack: we did not block it while it was live. Full IOC tables and the MITRE ATT&CK mapping are in the technical write-up.

app.cyberxyz.io/proxy/findings
Search package, IP, OS…All typesAll risk levels live
Apr 7, 04:51 UTCnpmaxios@1.14.1BLOCKEDSBOM scaninternalCRITICAL
May 28, 17:40 UTCnpmaxios@1.14.1BLOCKEDgha/runner CI/CD LinuxinternalCRITICAL
Aug 5, 23:43 UTCnpmaxios@0.30.4BLOCKEDAPI checkinternalCRITICAL

fig. 01 · proxy findings · real rows from CyberXYZ's install log, which begins on April 6, 2026, a week after the attack

app.cyberxyz.io/notifications
illustrationnot a recorded notification

Blocked install: axios@1.14.1 on gha/runner · GitHub Actions

0/10
XYZ SCORE critical · verdict block
SIGNALS
BLAST RADIUS0K dependent packages · 0M weekly installs
axios@1.14.1 · latestaxios@0.30.4 · legacyplain-crypto-js@4.2.1
STATEMENTEcosystem npm · decision block (confidence 1.0) · malicious dependency plain-crypto-js@4.2.1
SIGNALS · 3 described
01Commit-Level AnalysistriggeredCRITICAL

plain-crypto-js@4.2.1 added an obfuscated postinstall (setup.js, reversed-base64 + XOR) dropping a cross-platform RAT. Read at the commit level, no CVE required.

02Dependency ProvenancetriggeredCRITICAL

axios@1.14.1 added plain-crypto-js, a dependency that had never existed in any prior axios release. Two independent signals now agree.

03Live Threat IntelmatchedCRITICAL

Campaign linked to Sapphire Sleet (DPRK), mapped to MITRE ATT&CK supply-chain techniques.

PACKAGE CONTEXT
version 1.14.1 · published Mar 31 · 0 weekly downloads · source github.com/axios/axios · MIT
PACKAGE axiosVERSION 1.14.1ECOSYSTEM npmDECISION BLOCK

fig. 02 · illustration · how the signals described above present this attack. These signals did not see it in March 2026. The score is the one our API returns for axios@1.14.1 today, and the real blocks in fig. 01 come from our malicious-package intelligence, a known-malicious-version match

Sources: CyberXYZ threat intelligence, Socket (the public disclosure, Mar 2026), Microsoft Threat Intelligence (Sapphire Sleet attribution, Apr 2026) and the CISA advisory (Apr 2026). Full technical write-up on the CyberXYZ blog.

// book a demo

Watch it block a real attack. Then run it on your own installs.

Book 15 minutes. We run real packages through CyberXYZ while you watch, including axios 1.14.1, a hijacked release that dropped remote-control malware in March 2026, and show you exactly what your team would see. Then we connect one laptop or one pipeline for a 30-day proof of value.

What happens next

  1. 01A 15-minute callReal packages, real verdicts, and your questions.
  2. 02Connect one laptop or one pipelineOne setup command, or one line in CI. Under an hour.
  3. 03A 30-day proof of value on your own installsEvery signal, no card.

Not ready for a call?

Check any package, free, and see the verdict we would give it.

npm

Try faker@6.6.6ua-parser-js@0.7.29express@4.21.2

Thanks! We'll be in touch.

Check your inbox. We'll reach out within 24 hours.

Where should we send the invite?

  • 15 minutes
  • Video call
  • Times in your time zone

We reply within 24 hours to set a time.

We only use these details to arrange the call. Privacy policy