keyv, cacheable-request and 400+ npm Packages Hit by a "Mini Shai-Hulud" Worm
In August 2026 attackers compromised a maintainer's GitHub account and published malicious versions of keyv, cacheable-request, cache-manager and other widely used npm packages. The Shai-Hulud-style worm stole cloud, CI and AI-tool credentials, persisted through Claude Code hooks and VS Code tasks, and spread to over 400 packages. How it worked and how to clean up.
In early August 2026, security researchers at Wiz and Aikido reported a supply-chain worm spreading through npm, starting with packages from the popular keyv / cacheable ecosystem — dependencies of countless Node.js apps via HTTP caching libraries. Wiz describes it as a descendant of the "Mini Shai-Hulud" malware family.
What was compromised
Wiz's report (4 August 2026) lists compromised versions including:
keyv6.0.0cacheable-request13.0.20cache-manager7.2.10@cacheable/utils2.5.1http-metrics-middleware2.2.2
…plus many others, including packages in the @ornikar/* and @qlik/* scopes. The worm reached over 400 distinct npm packages. Wiz maintains the full list on GitHub.
How it worked
- Initial access: a compromised GitHub maintainer account, used to add persistence payloads to the keyv repository and publish a malicious release.
- Theft: cloud credentials, infrastructure secrets, developer credentials, AI-tool configuration files, crypto wallets, CI/CD secrets — with credential targets expanded by almost 70% over the open-source original.
- Persistence: via Claude Code hooks and VS Code
tasks.json— code that runs again when you open your editor or start your agent. - Exfiltration: to GitHub repositories created under stolen identities, with C2 addresses fetched from an Ethereum smart contract.
- Spread: using stolen npm credentials to publish into more packages.
The persistence through coding-agent hooks is a first for many teams: your .claude/settings.json and editor task files are now part of your attack surface. (Claude Code Hooks)
Cleanup
- Find affected versions in every lockfile (including transitive dependencies) and CI cache, and remove them.
- Treat machines that installed them as compromised — rebuild developer machines' environments and CI runners.
- Rotate credentials: cloud, GitHub, npm, SSH, Kubernetes, Terraform, AI provider keys. (Leaked API Key: What to Do)
- Inspect
.claude/settings.json,.vscode/tasks.jsonand similar files for hooks or tasks you didn't add — in repos and in your home directory. - Review GitHub for unfamiliar repositories created under your account and new workflow files.
- Monitor for Wiz's published indicators.
Defences that would have helped
- Lockfiles and
npm ciso new malicious versions don't arrive silently. (package-lock.json Explained) - A minimum release age before adopting new versions — many worm versions are pulled within hours.
- pnpm 10's default of not running dependency build scripts. (pnpm Workspaces)
- Short-lived tokens and trusted publishing instead of long-lived npm tokens on laptops.
- Isolating development (and coding agents) from your most valuable credentials. (npm Supply Chain Security)
September brought another worm, this time in AI-agent packages. (MemTensor sckit Worm)
Source: Wiz: keyv and cacheable npm packages hijacked · Aikido: Keyv and friends compromised
EasySpawn runs each project on its own isolated server, keeping a compromised dependency away from your laptop's keys and your other projects. See how it works or join the waitlist.
Related: npm audit Explained · Secret Scanning · Dependabot Explained · SBOMs and Signed Images
Keep reading
Next.js September 2026 Security Release: Upgrade to 16.3.8 or 15.5.27
Next.js patched seven vulnerabilities on 30 September 2026 in v16.3.8 and v15.5.27, after an out-of-band critical fix on 22 September. A high-severity SSRF in image optimisation, several cache-poisoning and cache-leak issues for SSG/ISR and 'use cache', and a dev-server MCP endpoint that leaked project data to malicious websites. Who's affected and what to do.
MemTensor npm and PyPI Packages Compromised With a Self-Spreading Credential Stealer
On 23 September 2026 attackers published malicious versions of @memtensor/memos-cloud-openclaw-plugin on npm and MemoryOS on PyPI carrying a Go implant ("sckit") that steals developer and CI credentials and spreads into other packages its victims publish. Affected versions, how it works, indicators, and the cleanup steps.