TL;DR
Mini Shai-Hulud is a warning about how npm compromise spreads after the first malicious publish. The attacker does not need to compromise every downstream application directly. They need one maintainer account, one CI path, or one install-time execution path that exposes credentials.
As of 2026-05-19, Socket reported 639 compromised package versions across 323 unique packages in a Mini Shai-Hulud wave concentrated around the @antv ecosystem. The affected package set included charting, graphing, mapping, and React wrapper packages used by engineering teams that may never think of those dependencies as security-critical.
The pattern is the real issue. npm is useful because it centralizes publishing, scanning, and takedown. The same centralization becomes dangerous when lifecycle scripts, trusted publishing, and maintainer credentials are abused to turn packages into a distribution network.
What happened in the AntV wave
The AntV wave used a familiar npm entry point: install-time execution. Socket's analysis describes a root-level index.js payload that modified package.json so the payload ran during preinstall.
That matters because npm install, pnpm install, and yarn install are not passive download steps. Package lifecycle scripts can execute code before a developer reviews the package contents or runs the application.
The payload was heavily obfuscated. Socket reported that it used runtime string decoding, encrypted exfiltration, GitHub API usage, npm registry API usage, and a hardcoded HTTPS exfiltration path. The goal was not just to run malware once. The goal was to collect credentials that let the malware publish again.
How Mini Shai-Hulud creates the snowball effect
The payload targets developer and CI/CD environments because those environments hold publishing power. A browser application may only need a charting package, but the machine or workflow that installs it may also have access to npm, GitHub, AWS, Kubernetes, Vault, SSH, Docker, or database credentials.
The credential targets include:
- GitHub tokens and GitHub Actions OIDC material
- npm publishing tokens
- AWS credentials and instance metadata
- Kubernetes service account files
- HashiCorp Vault tokens
- Docker authentication files
- SSH keys and private keys
- Database connection strings
Once the malware finds usable npm credentials, it can enumerate packages the victim can maintain, modify package tarballs, add an install-time hook, bump versions, and republish compromised packages under a trusted maintainer identity.

Why Axios and TanStack matter
The AntV wave did not happen in isolation. The npm ecosystem has seen a series of incidents where attackers abuse trusted maintainers, transitive dependencies, and CI/CD automation.
Datadog's Axios analysis describes how an attacker hijacked an Axios maintainer account on 2026-03-31 and published malicious axios releases that added a trojanized plain-crypto-js dependency. That dependency downloaded and executed a cross-platform remote access trojan during install.

Endor Labs' TanStack analysis shows a different lesson. TanStack used npm OIDC trusted publishing, which removes long-lived static npm tokens. The attacker still obtained a valid publishing path through repository and workflow mechanics. The result was malicious versions across the TanStack namespace with valid-looking provenance.
The common thread is not one broken tool. It is the amount of authority concentrated in developer environments and release workflows.
npm is both a defender tool and an attack path
npm gives defenders a central place to inspect packages, flag malware, deprecate releases, and revoke tokens. That centralized model is better than opaque one-off downloads.
But npm also gives attackers a central distribution layer. If a trusted package ships a malicious version, downstream users can fetch it through ordinary installs, lockfile updates, CI rebuilds, or transitive dependency resolution.
| npm feature | Defensive value | Attack value |
|---|---|---|
| Central registry | Enables scanning, advisories, and takedown | Gives malicious versions broad distribution |
| Lifecycle scripts | Supports package setup and native builds | Runs attacker code during install |
| Maintainer accounts | Lets projects publish quickly | Turns one compromised identity into many poisoned packages |
| Trusted publishing | Reduces long-lived token exposure | Can be abused if the workflow or trust boundary is compromised |
The lesson is not to abandon npm. The lesson is to reduce automatic trust at each stage where code executes.
What teams should do now
Start with the build and developer environment. Any machine or CI runner that installed an affected package should be treated as exposed until credentials are reviewed.
- Check lockfiles and package manager logs for affected versions installed on or after 2026-05-19
- Rotate npm, GitHub, cloud, Vault, SSH, Docker, and database credentials that were accessible to those systems
- Audit maintainer-owned packages for unexpected versions, install hooks, or added git dependencies
- Use strict lockfile installs such as
npm ci,pnpm install --frozen-lockfile, oryarn install --frozen-lockfile - Disable lifecycle scripts where practical with
--ignore-scripts, especially in CI jobs that do not need native builds - Add dependency cooldowns or review gates so newly published package versions do not enter production automatically
- Monitor outbound traffic from CI and developer workstations for suspicious exfiltration paths
These controls reduce the chance that one malicious package becomes a publishing incident across every package a developer maintains.
Where cside fits
cside is not an npm registry scanner, and it does not replace CI/CD hardening. You still need dependency scanning, lockfiles, token hygiene, and strict release controls.
cside covers the browser-runtime part of the supply chain. Many production sites load third-party scripts, SDKs, tag manager payloads, analytics packages, and dynamically delivered code that never behaves like a fixed npm dependency. A package or vendor can look legitimate at build time and still deliver risky behavior to the browser later.
cside monitors script behavior as it runs in the user's browser. That includes script changes, unexpected data access, suspicious exfiltration attempts, and browser-side activity that dependency scanners cannot see once the code is already in production.
The right defense is layered: secure the registry path, harden CI, rotate secrets fast, and monitor runtime behavior where users actually execute the code.








