Your CI/CD's LLM Integrations Are Leaking Secrets — Demonstrated Exploit Chains and Defenses
The Exploit That Should Change How You Deploy LLM Automation
An attacker crafted a three-stage prompt injection payload in a GitHub issue title that convinced an AI-powered triage bot to call tools with access to repository secrets, exfiltrating npm publish tokens. No authentication required — just open an issue. This isn't a theoretical attack; the PoC is live. The bot was processing issue titles directly in its prompt, and the attacker escalated from text injection to tool invocation to credential exfiltration in a single interaction.
If your CI/CD has any LLM automation that touches untrusted input — issue titles, PR descriptions, commit messages, comments — and that LLM has access to secrets, you have the same vulnerability class as SQL injection, but for your AI pipeline.
The mitigation pattern is identical to SQL injection: never pass untrusted input into a context where it can alter control flow. For LLM workflows, this means sandboxing tool access so the model cannot reach secrets regardless of prompt content.
Three Simultaneous Attack Vectors This Week
The npm token theft isn't isolated. Three other vectors hit simultaneously:
- InstallFix campaign: Attackers clone developer tool install pages (specifically Claude Code), buy Google Ads placement above legitimate results, and serve
curl|shellone-liners deploying Amatera Stealer. They redirect victims back to the real site post-infection — no obvious failure signal. - Xygeni GitHub Action compromise: A security tool's own CI integration was weaponized to deploy reverse shells into consuming projects. If you use Xygeni, assume your CI runners were compromised and rotate all secrets.
- Nginx UI CVE-2026-27944 (CVSS 9.8): Unauthenticated
/api/backupendpoint returns the AES-256 encryption key and IV in a response header. The backup contains admin creds, SSL private keys, and DB secrets. PoC is live.
Defensive Tooling Worth Evaluating
KEIP uses eBPF/LSM hooks to intercept network calls at the kernel level during pip install, enforcing behavioral allowlists: only ports 80/443/53, max 5 unique IP contacts, outbound data ratio limits, and instant process group termination on violation — all with claimed sub-50ms overhead. The insight: legitimate installs have a narrow behavioral profile; malicious install-time code needs to reach C2 or exfiltrate data, violating these constraints. The 56% statistic (supply chain attacks occurring at install time) justifies focusing defense at this phase.
The developer toolchain is now a primary attack vector, not a secondary one. The economics have shifted — credential theft from developer machines yields access to production systems.
What to do
Audit all GitHub Actions and CI/CD workflows that pass untrusted input (issue titles, PR bodies, comments) to LLM prompts with secret access. Fix or remove by end of week.
Pin every GitHub Action to a specific commit SHA, not a tag. Start with security-critical pipelines this sprint.
Verify Nginx UI is not reachable from any non-private network. Apply IP allowlisting and VPN restrictions to all management interfaces today.
Evaluate KEIP for CI/CD pipelines that install Python packages, especially those with less-vetted dependencies.
Publish an internal wiki page with verified download links for developer tools (Claude Code, Cursor, etc.) and block curl|shell from non-allowlisted domains in browser policy.