
Socket: Mini Shai-Hulud Hits @antv Ecosystem
Socket's Threat Research team documents a Mini Shai-Hulud variant compromising the npm maintainer account "atool," affecting @antv data-visualization packages (g2, g6, x6, l7, s2, f2, graphin) plus echarts-for-react (~1.1M weekly downloads) and others, totaling 639 compromised versions across 323 packages in one wave (1,055 versions/502 packages campaign-wide across npm, PyPI, and Composer). The install-time payload (triggered via a preinstall "bun run index.js" hook) is heavily obfuscated, harvests GitHub/npm/AWS/Kubernetes/Vault/SSH credentials and CI/CD secrets, exfiltrates data via AES-256-GCM+RSA-OAEP encrypted HTTPS to t.m-kosche[.]com and via GitHub repo commits under a reversed "Shai-Hulud: Here We Go Again" marker, and self-propagates by using stolen npm tokens to republish trojanized packages with a malicious @antv/setup GitHub optionalDependency.
What it is
An active Mini Shai-Hulud npm supply chain compromise of packages tied to the npm maintainer account atool, spanning the @antv ecosystem. The summary gives the scale; this page gives the concrete indicators a defender needs to detect and scope exposure.
Named indicators (not in the summary)
- Exfiltration endpoint:
https://t[.]m-kosche[.]com:443/api/public/otel/v1/traces— disguised as an OpenTelemetry traces path. - Install hook:
package.jsonis modified to add"preinstall":"bun run index.js"; a root-level obfuscatedindex.jsruns at install. - Decryptor marker: a custom decoder exposed via
globalThisasfc2edea72. - GitHub fallback: with a usable GitHub token, the payload creates a repo under the victim account and commits stolen data to
results/results-<timestamp>-<counter>.json. Repos follow a<word>-<word>-<3 digits>Dune-themed pattern (e.g.sayyadina-stillsuit-852,harkonnen-phibian-552). - Campaign marker string: repo descriptions contain
niagA oG eW ereH :duluH-iahS— reverse of "Shai-Hulud: Here We Go Again". A GitHub search for the reversed phraseniaga og ew ereh :duluh-iahscurrently returns ~1.9k repos.
Affected packages named
echarts-for-react (~1.1M weekly downloads), @antv/g2, g6, x6, l7, s2, f2, g, g2plot, graphin, data-set; plus timeago.js, size-sensor, canvas-nest.js. The 5/19 wave also touched packages under @lint-md, @openclaw-cn, and @starmind. Only accounts that auto-pull new dependency versions are exposed; pinned lockfiles that predate the wave are not.
What to do
The page states no fixed versions or commands, but the indicators support concrete action:
- Block/alert on outbound connections to
t.m-kosche.com. - Grep dependency trees and lockfiles for the affected packages installed at versions published in the wave window (publishes ~01:56–02:56 UTC on 5/19).
- Search your GitHub org for repos matching the
<word>-<word>-<3 digits>name pattern, aresults/directory, or the marker string — these indicate a token was stolen and used. - Treat any exposed GitHub/npm/AWS/Kubernetes/Vault/SSH/Docker secrets in CI as compromised and rotate. The payload specifically targets GitHub Actions, GitLab CI, Travis, CircleCI, Jenkins, Azure DevOps, CodeBuild, Buildkite, AppVeyor, Bitbucket Pipelines, Drone, Semaphore, TeamCity, Bamboo, Bitrise, Vercel, Netlify, and Cloudflare Pages.
Caveats
Socket calls this a developing story — the full package/version list is not final. Detection was fast (median ~6.7 minutes from publish), so the exposure window for late auto-updaters is narrow but real. Stolen data is gzip + AES-256-GCM (key RSA-OAEP/SHA-256 wrapped), so network plaintext recovery is not feasible — detection must rely on the endpoint, install hook, and GitHub artifacts above.
Organisations named here
- Shai-Hulud
- t.m-kosche.com
- Zaynex/sayyadina-stillsuit-852
Technologies named here
- Socket
- @antv/g2
- @antv/g6
- npm registry API
- @antv/x6
- GitHub API
- Bun
- @antv/l7
- Sigstore
- @antv/s2
- @antv/f2
- @antv/g
- @antv/g2plot
- @antv/graphin
- @antv/data-set
- echarts-for-react
- timeago.js
- size-sensor
- canvas-nest.js
- @lint-md packages
- @openclaw-cn packages
- @starmind packages
- @antv/setup
- npm ecosystem packages
- npm
- GitHub
- PyPI
- Composer
Techniques named here
- Install-time execution through package lifecycle scripts
- JavaScript obfuscation
- Developer and CI/CD secret harvesting
- Encrypted exfiltration
- GitHub-based fallback exfiltration
- npm worm propagation / reinfection
Threat actors named here
- Mini Shai-Hulud
- atool
Also named here
- Shai-Hulud: Here We Go Again
Related in Supply Chain


