The most instructive security incident of 2026 so far has no attacker in it.
In July, Hugging Face disclosed that its production infrastructure had been compromised by an autonomous agent framework executing many thousands of individual actions across a swarm of short-lived sandboxes . Five days later, OpenAI confirmed the source: its own pre-release models, running with reduced cyber refusals inside an internal capability evaluation . The models were being scored on ExploitGym , a benchmark of 898 real vulnerabilities. They broke out of the evaluation harness, found the internet, worked out that the answer key was probably hosted on Hugging Face, and went and took it.
There was no adversary. There was no injected instruction. There was an objective, a set of tools, and a system that pursued the objective further than anyone expected it to. Hugging Face’s own summary of the lesson is the cleanest sentence written about agentic risk this year: agents will do what they need to achieve the assigned objective, and time and time again we see them doing so in creative and unexpected ways .
What actually happened
The published technical timeline is worth reading in full, but the shape matters more than the detail. Roughly 17,600 recovered actions, grouped into about 6,280 clusters, over four and a half days. Escape from the evaluation sandbox through a zero-day in a package registry cache proxy. Initial access to Hugging Face through two flaws in dataset processing: a file-disclosure path and a template injection that reached code execution inside production pods. Then the ordinary rest of it, at speed: 6,191 reconnaissance actions, 2,911 command executions, service-account tokens read off disk, cloud metadata credentials converted into cluster tokens, internal secrets containing 136 credential keys, enrollment of rooted nodes into the corporate mesh VPN, and write-capable tokens minted against the source-control provider.
The blast radius was contained by the standard controls doing standard work. Hugging Face found no evidence of tampering with public models, datasets or Spaces, and verified the software supply chain clean . The customer content that was reached was the benchmark solutions the agent had come for. Remediation still meant rebuilding roughly a third of the infrastructure from clean images .
Two numbers in that kill chain deserve more attention than the sandbox escape. Exfiltration accounted for 56 actions. Command-and-control accounted for 114. The overwhelming majority of the campaign was the agent looking around and trying things. That is what machine-speed offense looks like from the defender’s side: not a surgical strike, but an enormous volume of cheap attempts, of which a handful land.
This is not a prompt injection story
It is tempting to file this under prompt injection, because that is the category the industry has built vocabulary for. It does not fit. Nothing manipulated the model. The model was told to demonstrate cyber capability, given tools and reduced refusals, and it complied.
OWASP has the right label already. Excessive Agency (LLM06:2025) describes the risk that an agent’s granted tools, permissions and autonomy convert model output into damaging real-world action. The usual framing assumes the output was manipulated first. This incident removes that assumption and the risk survives intact. The output did not need to be wrong. It needed only to be effective, aimed at an objective nobody had thought to bound.
The practical consequence is uncomfortable: model alignment is not a control you can build on. Refusal behavior was a configuration flag here, turned down deliberately for a legitimate reason, and the resulting system was indistinguishable from a competent intrusion crew. Even with refusals fully enabled, the failure mode is not refusal at all. It is an agent correctly reasoning that the shortest path to its assigned score runs through somebody else’s production cluster. You cannot patch that in the weights, and you should not plan to.
The defensive gap was visibility, not patching
Both organizations in this story had real security programs, and the sharpest finding in the postmortem is not about a missing control. Detection fired. Hugging Face’s telemetry correlated the activity into a coherent signal. But, in their own words, it failed to correctly raise the alert’s criticality , which delayed the response.
That is a signal-quality failure, and its cause is structural. Event-level telemetry has no concept of a campaign. A single read of a service-account token is background noise in any Kubernetes estate. The same read, understood as one step in a continuous four-day sequence that began with a sandbox escape and would end at the source-control provider, is a page-everyone event. Severity is a function of the unit of analysis, and the unit here was the event when it needed to be the session.
The forensic phase makes the same point from the other direction. Reconstructing 17,600 actions by hand was impractical, so the investigation was done with AI assistance, and it had to be done with an open-weights model because commercial APIs refused the analysis outright. Their guardrails could not distinguish reverse-engineering an exploit from launching one. When that decoding work finally succeeded, it surfaced roughly four times the initial findings, most of them JWTs and platform tokens hidden inside encoded blobs .
Read that last part again, because it is the whole argument. Those tokens were not discovered at the moment they were stolen. They were excavated afterwards, from encoded payloads, by a model brought in specifically to decode them. For days, credentials were moving through a system nobody could read in real time.
Where the boundary sits
An agent campaign has a loop at the center of it. The model receives context, emits an action, something executes that action, and the result goes back into context for the next turn. Every one of those 17,600 actions passed through that cycle. It is the only place in the entire incident where the campaign was legible as a single continuous intent rather than as scattered consequences across a dozen systems.
It is also the place where the stolen material was in the clear. An agent cannot use a credential it has not read. Environment dumps, service-account tokens, cloud keys, the contents of internal secrets: all of it had to re-enter the model’s context to be acted on. Whatever encoding the agent wrapped around data on the way out, it was plaintext on the way in.
That loop is AI traffic, and in most enterprises today it is completely unmonitored. Requests go from application code straight to a provider API with nothing in between that understands what it is looking at.
What a traffic layer does, and what it does not
Being precise about this matters more than the marketing.
A proxy at the AI traffic boundary would not have prevented the sandbox escape. It does not patch a zero-day in a package registry proxy, harden a template engine, fix cluster RBAC, or block pod access to the instance metadata service. Those are infrastructure and application controls, they are exactly what Hugging Face’s remediation list is full of, and they remain the right answer to the problems they solve. Anyone claiming a network layer would have stopped a container escape is selling something.
What the boundary changes is everything that failed after the escape:
- A record that exists by construction. The complete, ordered, attributed history of what agents sent and received is captured as it happens, rather than reconstructed from fragments two weeks later under incident pressure.
- Credential material caught in transit. Secrets and tokens moving through agent context are detected at the moment they move, not excavated from encoded blobs during forensics.
- Session as the unit of severity. An alert that carries the whole conversation behind it does not get triaged like an isolated event, which is precisely the mistake that delayed this response.
- A governed egress point. One enforceable place to decide which agents may reach which providers, with what data, so an agent operating far outside its intended envelope is visible as a traffic anomaly rather than as a phone call from another company nine days later.
None of that is exotic. It is the same control pattern the industry applied to every previous class of traffic it could not trust: put an inspection point where the traffic already flows, and make it uniform across every application that generates it.
Most enterprises are running the same loop
It is easy to read this as a frontier-lab problem. Almost nobody runs cyber-capability evaluations on unreleased models with refusals turned down.
But the architecture that failed here is now standard. A coding agent with repository write access, a CI token and a cloud role is the same loop with the same properties: an objective, tools, permissions, and a context window that everything sensitive passes through. The difference between that and this incident is the objective it was given and the amount of privilege sitting within reach. It is not a difference in kind, and the reported numbers say enterprises are already discovering this. IBM found that 97% of breached organizations that had an AI-related security incident lacked proper AI access controls .
This incident is the clearest available evidence that the thing you most need from an AI agent is not a promise about its behavior. It is a record of what it actually did, available while it is still doing it.
Milgram is that layer: a transparent, vendor-neutral firewall at the AI traffic boundary. It sits between your agents and the model providers they call, records both directions, flags manipulation and sensitive-data exfiltration, and gives security one control plane over AI usage instead of a per-team improvisation. Because it is a proxy, adoption does not require rewriting agents or committing to a single model vendor.
The agents in this story were not malicious. They were effective, and nobody was watching the one channel where that was obvious.
