Fireship
May 14, 2026
1. The Attack Setup
An attacker forked the Tanstack repository, created a pull request that was immediately closed, triggering the GitHub Actions publishing workflow. The workflow was configured with pull_request_target, allowing the fork's code to execute with the main repository's permissions.
2. Token Theft and Initial Compromise
The attacker wrote a poisoned file to the shared CI cache. When an unrelated PR merged hours later, the poisoned file extracted the npm publish token and compromised 84 new Tanstack packages in minutes.
3. Worm Propagation Across Ecosystems
Infected packages stole npm tokens from maintainers at Mistral AI, UiPath, Open Search, Guardrails AI, and Squawk. The malware spread to 169 packages across npm and jumped to PyPI through Python SDKs.
4. Persistence and Evasion Mechanisms
The worm forged commits using Claude Code signatures to blend in with legitimate AI-generated commits, embedded itself in VS Code and Claude Code to survive package uninstalls, and installed a dead man switch that would nuke the root directory if stolen tokens expired.
5. Defensive Strategies with pnpm
pnpm 1+ offers three default protections: minimum release age (24-hour delay before installing packages), block exotic subdependencies (registry-only enforcement), and approved builds (automatic script blocking with manual whitelisting).