
Shai-Hulud was the best thing to happen to supply chain security
Aikido Security tracks npm's Trusted Publishing (OIDC-based, short-lived credential) adoption over 18 months and shows it only spiked after each major supply-chain attack rather than from advisories or blog posts — jumping from a ~40/week baseline to 430/week after the Nx Console/AntV compromise, yet still leaving 40,369 of the top 51,370 packages (75% of download volume) on long-lived tokens. It chronicles the full attack progression from credential-phishing (Debug/Chalk, Axios) through Pwn Request-driven CI compromise (S1ngularity, Shai-Hulud 2.0) to the Mini Shai-Hulud II/TanStack attack, which poisoned the GitHub Actions cache to extract a live OIDC token from runner memory and publish packages with valid SLSA Build Level 3 provenance — proving Trusted Publishing itself can be turned into the attack vector rather than just bypassed. It closes by arguing the security community should proactively pressure high-download holdout maintainers rather than wait for the next worm.
What it is
Aikido's data analysis of npm Trusted Publishing adoption (OIDC-based short-lived tokens, GA July 2025) against the 2025–2026 supply-chain worm wave. The reason to read past the summary is the mechanism of the latest attacks, which invert the premise that Trusted Publishing protects you.
How it works — the escalation the summary only names
Trusted Publishing replaces a stored NPM_TOKEN with a per-run token that expires in minutes: "nothing to steal." The attacks defeated this without stealing the token:
- Mini Shai-Hulud II / TanStack (May 7–11, 2026): attackers used a Pwn Request to poison the GitHub Actions cache, then waited for the legitimate release workflow to run. Because that workflow runs with
id-token: write, attacker code from the poisoned cache extracted the OIDC token from runner memory and exchanged it through npm's own token endpoint. Published packages carried valid SLSA Build Level 3 provenance. Trusted Publishing wasn't bypassed — it was the attack vector. - Miasma / Hades (June 1–7, 2026): abused the OIDC publishing endpoint directly rather than stealing tokens; later waves added a
binding.gyptrick to evade install-script detection and crossed to PyPI via.pthstartup execution.
flowchart TD
A[Pwn Request via pull_request_target] --> B[Poison GitHub Actions cache]
B --> C{Legitimate release<br/>workflow runs}
C -->|id-token: write| D[Attacker code reads OIDC<br/>token from runner memory]
D --> E[Exchange at npm token endpoint]
E --> F[Publish with VALID SLSA provenance]
G[Harden pull_request_target /<br/>scope id-token] -.cuts.-> APreconditions / Affected
Matters if your release pipeline runs on GitHub Actions with id-token: write and accepts pull_request_target-triggered workflows, or restores caches populated by untrusted PRs. Trusted Publishing adopters are not exempt — provenance attestation does not prove the build wasn't attacker-influenced. The earlier, simpler attacks (Debug/Chalk phishing via npmjs.help, Axios compromised-maintainer account) still apply to anyone holding long-lived tokens.
What to do
The page states no commands. Its actionable conclusion: adopting Trusted Publishing is necessary but insufficient — the real exposure is now the CI pipeline's trust boundary (Pwn Requests, cache poisoning, id-token: write scope), not token storage. Treat SLSA provenance as evidence of who built, not that the build was clean.
Caveats
Coverage remains thin: only 11,001 of the top 51,370 packages and ~25% of download volume use Trusted Publishing despite 3.4x growth. The post is a vendor (Aikido) adoption-tracking piece; the causal claim that attacks "moved the needle more than the security industry" is correlational — spikes follow named incidents but the data is weekly adoption counts, not verified attributions.
Organisations named here
- AsyncAPI
- CISA
- Shai-Hulud
Technologies named here
- Nx monorepo packages
- npm Package Provenance
- npm trusted publishing
- Debug and Chalk npm packages
- SLSA Build Level 3 provenance attestations
- asyncapi/cli repository
- OpenVSX extension
- GitHub Actions
- CircleCI
- Zapier, ENS Domains
- axios
- tanstack
- Nx Console VS Code extension
- @antv npm packages
- Red Hat Cloud Services npm packages
- PyPI wheels/packages
- Packagist packages
- Mastra framework
- npm
- PyPI
- OIDC
- Packagist
- Open VSX
- SLSA
- AntV
- Nx Console
- chalk
- debug
- Red Hat
- Zapier
Techniques named here
- Pwn Request
- Phishing for maintainer credentials
- Self-propagating worm via npm token discovery
- GitHub Actions cache poisoning
- Direct OIDC publishing endpoint abuse
- binding.gyp bypass technique
- .pth injection / startup execution
- Shell profile payload injection
- Browser wallet interception
- AI CLI tool abuse for credential extraction
- Fake dependency injection for RAT delivery
- Compromised maintainer account
Threat actors named here
- Shai-Hulud
- Shai-Hulud 2.0
- SHA1-Hulud
- s1ngularity
- Debug/Chalk attack
- TeamPCP
- CanisterWorm
- CanisterSprawl
- Mini Shai-Hulud I
- Mini Shai-Hulud II / TanStack
- Mini Shai-Hulud III / Nx & AntV
- Miasma / Hades
- Sapphire Sleet
- UnknownWonderer1
- Mini Shai-Hulud
- Miasma
- Miasma worm
- Hades
- DPRK
Related in Supply Chain


