keyv / cacheable: maintainer compromise seeds Mini Shai-Hulud 'ChainDrop' worm across 400+ npm packages (no CVE)
Severity: critical · Patch status: unknown · Since 2026-08-04
On 4 August 2026 a maintainer account for the keyv project was compromised, IDE-persistence payloads were committed to the repo and a trojanized keyv 6.0.0 (plus 19 @keyv/ packages at 6.0.0 and cacheable 2.5.1) was published. Each bad release adds a preinstall hook running setup.mjs, which fetches the Bun runtime and runs an obfuscated ~710 KB credential stealer aimed at npm, GitHub, cloud, Kubernetes, Vault, SSH and AI-tooling secrets. Loot is encrypted and sent to an attacker endpoint resolved from an Ethereum smart contract, with GitHub repositories as a fallback. Any npm token with write access and bypass-2FA lets the worm patch-bump and republish every package that token can publish, which took it past 400 packages (1,700+ versions per JFrog) at unrelated publishers; with GitHub tokens it also commits .claude/settings.json and .vscode/tasks.json hooks and workflow-secret dumpers, and abuses OIDC trusted publishing for validly attested releases. Microsoft names it ChainDrop and calls it a Mini Shai-Hulud variant; Wiz says it is largely built on the public Mini Shai-Hulud code.
What to do
- Check lockfiles and caches for affected versions (Wiz's GitHub list; keyv 6.0.0, @keyv/* 6.0.0, cacheable 2.5.1, cacheable-request 13.0.20, cache-manager 7.2.10) and treat any host that installed one as compromised; rebuild CI runners rather than clean them
- Revoke npm tokens (especially automation tokens with write access and bypass_2fa), GitHub PATs/Actions tokens, and rotate cloud, Kubernetes, Vault and SSH secrets
- Search all branches for .claude/settings.json and .vscode/tasks.json hooks, commits with message 'chore: update config' from claude@users.noreply.github.com, and branch dependabot/github_actions/format/setup-formatter
- Upgrade to npm 12+ (preinstall hooks off by default) and enforce a minimum release age for new versions
- Review npm trusted-publishing/OIDC configuration; block npm-cache[.]com and look for the Bun/1.3.13 user-agent and node_modules/keyv/Math_Symbol.js
Sources
All live incidents on Threat Watch