Infostealer / Account Takeover ↓
Stolen maintainer token / OAuth grant / CI/CD secret ↓
Trusted package / integration / workspace ↓
Developer environment / cloud platform ↓
Plaintext credentials, cloud keys, API tokens
Infostealer / Account Takeover ↓
Stolen maintainer token / OAuth grant / CI/CD secret ↓
Trusted package / integration / workspace ↓
Developer environment / cloud platform ↓
Plaintext credentials, cloud keys, API tokens
Infostealer / Account Takeover ↓
Stolen maintainer token / OAuth grant / CI/CD secret ↓
Trusted package / integration / workspace ↓
Developer environment / cloud platform ↓
Plaintext credentials, cloud keys, API tokens - A Context.ai employee downloaded a Roblox cheat script in February 2026, infecting their machine with Lumma Stealer
- The infostealer harvested credentials—including Google OAuth tokens and a Context.ai support account
- A Vercel employee had signed up for Context.ai using their enterprise account and granted "Allow All" OAuth permissions
- Attackers used the stolen OAuth token to access Vercel's Google Workspace—bypassing MFA entirely
- Workspace access → internal Vercel systems
- Internal access → plaintext environment variables
- Some customer credentials exposed
- ShinyHunters claimed responsibility, listing the data for $2M - They bypass MFA—possession of the token is the authentication
- They persist until explicitly revoked—often for months or years
- They frequently carry broad scopes granted during casual setup
- They are rarely monitored at the integration level - Axios has 100M+ weekly downloads
- The malicious packages were live for ~3 hours
- The attack bypassed OIDC Trusted Publishing—because the project still passed a long-lived NPM_TOKEN alongside OIDC credentials, and npm defaults to the token
- Attributed to Sapphire Sleet, a North Korean state actor (Google GTIG, Microsoft Threat Intel) - March 19: Threat actor TeamPCP compromised the trivy-action GitHub Action by exploiting a misconfigured pull_request_target workflow, exfiltrating the Aqua Security bot's Personal Access Token. They used it to rewrite release tags, injecting a credential harvester into Trivy—a widely used open-source security scanner.
- March 24: LiteLLM's CI/CD pipeline ran Trivy as part of its build process. The compromised action exfiltrated LiteLLM's PyPI publishing token from the GitHub Actions runner. TeamPCP used it to publish malicious versions 1.82.7 and 1.82.8, embedding a three-stage payload: credential harvesting → Kubernetes lateral movement → persistent systemd backdoor. - Use npm ci with a lockfile, not npm install with caret ranges
- Pin GitHub Actions to a commit SHA, not a tag (tags can be rewritten—as Trivy demonstrated)
- Rotate npm tokens, PyPI tokens, and CI/CD secrets regularly
- Remove long-lived tokens wherever OIDC can replace them—and then actually remove them, not leave them as a fallback