Start from what those tools can reach
The targets were not end-user software, which is what makes this expensive. Trivy and KICS run with broad read access to every repo they scan, often with credentials that can write results, comment on PRs, or touch a registry. LiteLLM sits inline in the AI request path, holding model provider API keys and seeing full prompt and response traffic. A Telnyx SDK sits in the messaging path. A compromise anywhere in that set reaches registry tokens, cloud OIDC trust policies, repo PATs, and every prompt the product sent during the window.
No affected version ranges were published in this reporting, so there is no advisory to wait for. SBOM-diff runner images, base images and lockfiles for the first half of 2026, then rotate every credential those jobs could reach regardless of what the diff turns up. Rotation costs an afternoon; reconstructing six months of scanner egress costs a quarter.
The component that changed after approval
Separately, researchers found malicious AI Skills, MCP servers, plugins and repository configuration files capable of credential theft and code execution, hiding inside tools organizations had already sanctioned. Nothing here is patchable, because the trust boundary sits in the wrong place. An MCP server is a subprocess launched deliberately: it inherits the launching environment, reads the filesystem, and makes outbound calls. No gate is involved.
Stack that against the controls most teams actually have. The vendor is allowlisted, so procurement is satisfied. The install came from a package registry, so nobody read the source. MCP servers have no lockfile, so the version running today is not the version that got approved. Repository config files that trigger agent behaviour get reviewed like documentation, when functionally they sit closer to CI workflow YAML.
- Put
.mcp.json, .cursor/, Skill manifests, devcontainer files and CI workflow paths behind CODEOWNERS with mandatory review. One config change closes the repo-poisoning vector outright. - Pin every MCP server and scanner image by digest, not tag, and record who approved each.
- Run MCP servers in containers with no host credential mounts — no
~/.aws, no ~/.config/gh, no .npmrc — and deny-by-default egress to a per-server allowlist. Ship monitor mode first, or developers route around it.
Egress is the cheapest control in the building
Palo Alto's Nikesh Arora stated the gap plainly, asking how anyone stops agents running to Hugging Face once they go rogue. That is worth answering honestly for the runners under one's own control. Check whether the agent execution sandbox can reach arbitrary outbound HTTP, whether it pulls weights or a package from a public registry at runtime, and whether it reads secrets scoped wider than the single task needs. Any yes is an exfiltration path a prompt injection can drive. Default-deny egress, an internal registry proxy with digest pinning, per-task credential scoping, and outbound-fetch logging is unglamorous, cheap, and the same control that bounds an agent misbehaving with no attacker involved.
One adjacent primitive deserves an architecture-review slot: any mutable resource two nominally isolated workloads can both write to — a shared artifact registry, a package proxy, a CI cache, an S3 scratch prefix — is an inter-agent message bus nobody designed and nobody can rate-limit. That escalation path is a published scenario rather than an incident, so it belongs in a tabletop, but the primitives it uses exist today.
Why the detection pipeline will miss it
The published post-mortem detail worth internalizing is the traffic shape: roughly 17,600 recovered actions where most paths failed, with the one successful chain buried inside thousands of low-signal failures. Failure costs an automated actor nothing, so it tries everything, which is exactly the traffic modern triage is tuned to suppress. A SIEM that dedupes 10,000 similar 403s from one valid service account into a single P4 ticket has already built the blind spot. Add a rule keyed on distinct-failure-shape count per principal per hour.
A backdoored scanner with no outbound path and a five-minute token is a much smaller problem than the same scanner holding a long-lived PAT.