Keyv Maintainer Recounts ChainDrop Attack and Security Overhaul

Summary
Keyv maintainer Jared Wray recounts how attackers used an old GitHub token on his compromised desktop to publish malware that spread to 444 npm packages, and describes his account recovery and security changes.
Key points
- Wray said his desktop was compromised, but the initial access method remained unknown; attackers used an old, broadly privileged GitHub token stored there to publish through GitHub without accessing his npm account.
- Trojanized Keyv and Cacheable releases spread a worm to 444 npm packages; the worm code was based on TeamPCP’s Mini Shai-Hulud.
- npm took down the malware and removed publishing access, but malicious branches remained in Wray’s repositories after GitHub restored them. He disabled publishing and cleaned the repositories in an isolated environment.
- Wray described adopting isolated environments for pull requests and a defense-in-depth process to check and enforce repository security settings.
- His security bot checks sources for relevant issues, assesses whether his repositories are affected, and can open a pull request for review.
- His dependency-vetting process considers publishing frequency, OIDC use, dependency counts, contributor activity, pull request engagement, and whether a package is listed in OpenSourceMalware.
- Wray said code signing, branch rulesets, scanning, and release gating took substantial effort to configure; he still cannot reliably sign commits made by agents.
Article Details
- Topic
- Open-source supply-chain attack recovery and defense-in-depth practices for package maintainers
MITRE ATT&CK
T1195.002 · Compromise Software Supply ChainAn attacker used a compromised maintainer token to publish trojanized packages through the legitimate release pipeline.T1550.001 · Application Access TokenThe attacker used an old GitHub personal access token taken from the maintainer's compromised desktop to change settings and publish packages.
People
Malware
Vendors
GitHubKeyv and Cacheable. In August 2026, he was the victim of an account takeover. A threat actor used a GitHub token he thought he'd retired to push malware into his Kevy and Cachable, and his own release pipelinenpmhe'd retired to push malware into his Kevy and Cachable, and his own release pipeline shipped it to npm with valid provenance. It contained a worm that propagated the malware into 400+ npm packages. The campaign
Products
GitHubKeyv and Cacheable. In August 2026, he was the victim of an account takeover. A threat actor used a GitHub token he thought he'd retired to push malware into his Kevy and Cachable, and his own release pipelineGitHub ActionsStaying on GitHub Actions: None of the other CI/CD platforms he tried worked end to end, so he went all in on locking down GitHub Actions.npmhe'd retired to push malware into his Kevy and Cachable, and his own release pipeline shipped it to npm with valid provenance. It contained a worm that propagated the malware into 400+ npm packages. The campaign
