Skip to content

Back to the catalog

Socket: Mini Shai-Hulud
socket.devarticle

Socket: Mini Shai-Hulud

Socket reports that npm invalidated all granular access tokens with write access that bypass 2FA after a fresh Mini Shai-Hulud wave hijacked the maintainer account "atool" and pushed 639 malicious versions across 323 packages in the @antv ecosystem, including echarts-for-react. The piece traces the broader campaign (attributed to TeamPCP, 1,055 compromised versions across npm/PyPI/Composer) through the TanStack pwn-request/OIDC-memory-extraction compromise and the resulting GitHub internal repo breach via Nx Console, and covers npm's new opt-in staged-publishing feature (npm stage publish/approve) that adds an MFA-gated human approval step before releases go live.

TL;DR npm mass-invalidated 2FA-bypass tokens after Mini Shai-Hulud hit 323 packages via a hijacked maintainer account, and rolled out staged publishing as an MFA-gated approval gate to blunt future worm waves.
Document

What it is

Socket's report on npm's May 19 platform-wide invalidation of every granular access token with write access that bypasses 2FA, triggered by a Mini Shai-Hulud wave (attributed to TeamPCP). The summary covers the campaign scope; what it can't carry is the operational detail an engineer needs to decide whether migrating to Trusted Publishing actually helps.

What to do

npm's stated action for maintainers: update stored tokens and rerun any automation that uses them — anything relying on a bypass-2FA token stopped working on May 19. npm points to OIDC Trusted Publishing as the replacement. Relevant shipped state if you go that route:

  • Bulk trusted-publishing config reached GA in npm CLI v11.10.0 (February).
  • CircleCI joined GitHub Actions and GitLab CI/CD as a supported OIDC provider (April).

Preconditions / Affected

Any maintainer using long-lived bypass-2FA tokens in CI/CD. Directly hit in the triggering wave: the @antv ecosystem, echarts-for-react (~1.1M weekly downloads), timeago.js, size-sensor, canvas-nest.js — 639 malicious versions across 323 packages via the hijacked atool account.

Caveats — why the reset and Trusted Publishing may not cover you

The report's core argument, and the reason to read past the summary: the token reset "does not close the underlying hole." The worm is still active and simply re-harvests newly issued tokens.

More importantly, the most damaging recent attacks needed no long-lived token and walked straight through Trusted Publishing:

  • TanStack (May 11): attackers minted publish tokens through the project's legitimate OIDC trusted-publisher binding — abusing a pull_request_target Pwn Request, Actions cache poisoning, and pulling an OIDC token from runner memory, then POSTing to npm directly.
  • Bitwarden CLI (Apr 23): payload shipped by compromising the publish-ci.yml workflow itself.

Trusted Publishing's own documented gaps: it cannot publish a new package, and it has no human-approval step at publish time. OpenJS declined to recommend it for critical projects. So Trusted Publishing raises the bar against stolen static tokens but does not stop CI/CD pipeline compromise or OIDC-binding hijack — match the control to your risk profile rather than treating migration as a fix.

flowchart TD
    W[Mini Shai-Hulud on runner] --> T[Steal bypass-2FA token]
    T --> R[May 19 reset cuts this path]
    W --> P[Compromise CI pipeline / OIDC binding]
    P --> Pub[Publish via legit trusted-publisher]
    R -.does not block.-> Pub
    style R fill:#cfc
    style Pub fill:#fcc

Organisations named here

  • Adnan Khan
  • Isaac Schlueter
  • OpenJS Foundation
  • Wes Todd

Technologies named here

  • npm CLI
  • @antv ecosystem npm packages
  • echarts-for-react
  • OIDC Trusted Publishing
  • Staged Publishing
  • timeago.js
  • size-sensor
  • minimumReleaseAge
  • canvas-nest.js
  • Socket
  • TanStack npm packages
  • @tanstack/react-router
  • Nx Console
  • Bitwarden CLI
  • Checkmarx KICS/AST
  • Aqua Trivy
  • SAP CAP
  • Intercom
  • Mistral AI
  • UiPath
  • npm granular access tokens
  • npm
  • OIDC
  • GitHub Actions
  • tanstack
  • pnpm
  • AntV

Techniques named here

  • Pwn Request abuse
  • GitHub Actions cache poisoning
  • Runtime OIDC token extraction from CI runner memory
  • Hijacking legitimate OIDC trusted-publisher binding
  • CI/CD pipeline / workflow file compromise
  • Stolen maintainer account takeover
  • Credential/secret harvesting worm payload
  • Supply chain propagation via poisoned VS Code extension
  • Pwn Request

Threat actors named here

  • Mini Shai-Hulud
  • TeamPCP
  • Shai-Hulud
  • atool compromise attacker
  • TanStack compromise attacker
  • GitHub internal repo attackers
  • Bitwarden CLI CI/CD attackers
  • atool