npm Worm Poisons keyv, cacheable and 400+ Other Packages Across Twelve Organisations - Real-time Open Source Software Supply Chain Security
One worm took twelve unrelated organisations between 09:35 and 13:18 UTC on 4 August 2026, each republishing its whole namespace within seconds.
The confirmed footprint is 2,234 poisoned versions across 444 package names.
lateststill resolves to a poisoned version on most affected names, so upgrading is not a fix. The maintainers have since cleaned thekeyvandcacheablefamily and unpublished its poisoned releases, which does not help a lockfile pinned while they were live.Every poisoned release adds
"preinstall": "node setup.mjs", which runs on a barenpm install. Disable install scripts in CI, and treat any npm token used in CI during the window as compromised.The payload steals GitHub, npm, AWS, GCP, Azure, Stripe, Vault and Kubernetes credentials, scrapes GitHub Actions runner memory, and can republish packages with valid SLSA provenance.
It installs a dead-man’s switch that polls GitHub with the stolen token and executes a handler when that token is revoked. Hunt it before rotating anything, because rotation is the trigger.
Poisoned packages include the auth libraries
@or-sdk/auth,@or-sdk/api-tokens,@or-sdk/permissionsand@arv-bedrock/auth. The@ornikarpackages are mostly lint and build configs, which land on CI runners and developer laptops as dev dependencies.There is no C2 host. Exfiltration rides GitHub dead-drop repositories and Actions artifacts under RSA-4096 encryption, and stage one pulls its runtime from the official Bun releases, so no attacker domain appears at either stage.
546 dead-drop repositories described
Shai-Hulud: Here We Go Againappeared on 4 August 2026, and the same marker appears on the TanStack compromise dated 11 May 2026.The
keyvrepository also ships.claude/settings.jsonand.vscode/tasks.jsonhooks that execute when the project opens in an IDE or agent session. Both are still onmain.The commit that added those hooks shows as verified by GitHub with its author spoofed to
github-actions[bot], and the poisonedkeyvrelease carries intact OIDC and SLSA attestation. Trust neither signal here.