Turborepo Remote Cache: How Poisoning Hits a Monorepo Team

Turborepo's shared remote cache is a productivity win — and a supply-chain attack surface. Any team member with write access can plant compromised outputs that get served to everyone.
Turborepo's remote cache stores build artifacts keyed by input hashes. On your next build, if your inputs match, you get the cached output — no rebuild needed.
This is great until someone's laptop is compromised.
The attack
- Attacker gains access to a developer's
TURBO_TOKEN. - They locally modify the output of
packages/ui/dist/index.js— add a tiny exfiltration stub. - They push the tampered output to the remote cache with the correct input hash.
- Every teammate's next build pulls the poisoned cache.
Detection
Turborepo supports signature-verified caches (signature: true in turbo.json). If you're not using it, start today:
{
"remoteCache": {
"signature": true
}
}This signs each cached artifact with a shared secret. Cache reads verify the signature before use.
Rotation playbook
Also rotate TURBO_TOKEN if it was generated more than 90 days ago. The tokens never expire, and old ones accumulate on laptops that are no longer around.
VibeWShield doesn't scan private Turborepo caches (they aren't publicly exposed), but our Secrets scanner does flag TURBO_TOKEN in any bundle that shipped it by mistake.
Free security scan
Test your app for these vulnerabilities
VibeWShield automatically scans for everything covered in this article and more — 18 security checks in under 3 minutes.
Scan your app free