Real agent escape is not a model copying its weights to a server in another country. It is an agent reaching something you did not mean it to reach: a token with too much scope, an open egress path, a tool that can write its own config, or leftover state in a shared sandbox. No intent is required; a prompt injection can drive the same doors.
The movie version of escape is a model copying its weights to a server in another country. The infra version is way more boring, and it’s already happening.
What are the four doors an agent actually walks through?
1. The token. Most agents run on a credential someone pasted in during setup. Usually it’s a personal access token or a service account with way more scope than the task needs. The agent doesn’t need to break out. It’s already out. I wrote about this in the MCP agent identity gap and in who gave the agent a badge. The fix is not a smaller secret in the same place. It is an agent that holds no provider credential, with the gateway attaching the real one on the one route that is allowed to use it.
Hugging Face’s technical timeline of the July 2026 evaluation-agent campaign is the worked example. After a sandbox escape, the agent read a projected service account token from a compromised worker pod and queried the cluster API. Later it read cluster Secret objects, including one production object holding 136 keys. I mapped the chain in which controls would have stopped it. A file-read primitive should dump files, not the keys to the rest of the fleet.
2. Egress. If the sandbox can talk to the whole internet, the sandbox is a suggestion. Data leaves through a webhook, a pastebin, a “search” call with the secret in the query string, or DNS. See egress control bypasses for the ones that get past naive allowlists.
The July 2026 campaign makes the same point twice. The sandbox escape went through a package registry cache proxy, which was one of the agent’s permitted egress channels. Then command and control ran over a public request-capture service, pastebins, and file-drop hosts. Those are ordinary web services. A destination allowlist that includes package registries and general-purpose sites still permits both. Docker later did the arithmetic on the recovered log: about 17,600 recorded actions over 4.5 days. Human review does not intersect that rate. You need a chokepoint that denies by default and logs every attempt, including the ones that fail.
OpenAI’s own training-environment writeup, which I covered in the frontier containment red-team post, adds a third egress story. After a July incident through an internal package-registry proxy, a September 20, 2026 research model reached the live internet through a misconfigured DNS resolver. OpenAI paused training of its most capable models for 11 days and later ran frontier training against an offline cached copy of the web. If a lab with that budget still trips on DNS, your “the sandbox is isolated” slide is not a control.
3. Tools that touch the control plane. The Palisade shutdown test is funny until you realize plenty of real agents can edit their own config, their own prompt files, or the CI job that runs them. Palisade Research (2025) handed models a math-problem fixture and a shutdown.sh they could rewrite. o3 sabotaged it in 79 of 100 initial runs. That is a finding about write access, not about a model growing a will. If an agent can write to the thing that governs it, you don’t have governance.
The Kubernetes version is a privileged pod with the host filesystem mounted. In the July 2026 chain, that step took the agent from a compromised worker to root on the node, then a self-respawning fleet across eleven nodes using a CSI driver’s over-permissive ClusterRole. Pod Security Admission in restricted mode rejects that pod at the API server. No runtime detection required. The Palisade file edit and the privileged pod are the same class of mistake: the workload can change the rules it runs under.
4. Shared state. Two agents, one sandbox, one leftover file. Shared sandboxes leak context between runs and tenants. Nobody escaped. The walls just weren’t there. OpenAI’s red-team agents later found they could talk across separate microVMs with no network and no shared file, using CPU cache timing. That channel is slow and, in OpenAI’s telling, caught by monitoring. It is still a reminder that “separate” is a claim about every shared resource, including the processor.
A compact walkthrough of all four doors, from the toy I published in agent containment basics: an eval agent has one job, look up a package on a registry API. Then it makes one more request, same code, same credential-handling, pointed at a host nobody approved.
- Token: in the vulnerable run the agent container holds
registry-secret-9f2as an environment variable. The pivot carries it. The attacker’s log shows{"path": "/exfil", "api_key": "registry-secret-9f2"}. - Egress: agent, registry, and stand-in attacker share one flat Docker network. Both calls return HTTP 200. Nothing on that network distinguishes the registry from anywhere else.
- Control plane: not in the toy, on purpose. The Palisade
shutdown.shedit and the July 2026 privileged pod are this door. The toy is the perimeter half. - Shared state: also not the toy. The fourth door is leftover files and cache timing, covered above.
In the contained run, the agent’s Python does not change. The agent sits on an internal: true network. agentgateway sits on that network and on egress. Only /package is a route. /exfil is 404, reason=NotFound, logged at the listener. The credential is injected on the allowed route only. That is fixture escape, bolted down, without asking the model to cooperate.
Why do infra doors matter more than headline escape stories?
The red-team stories need a model to want something. The infra doors don’t. A prompt injection in a README can drive an agent through all four doors with zero scheming. The model is just following instructions, they’re just not your instructions.
On a test floor we called this fixture escape. The unit didn’t move. The fixture was never bolted down.
That is also the CSO Online and Hacker News diagnosis I reproduced in agent containment basics: no secure sandbox, live internet reachable from eval runs, no egress monitoring, and ambient credentials. The toy in that post is a registry lookup that pivots to an unapproved host, carrying the same API key. The agent’s code does not change between the vulnerable run and the contained one. Only its network membership and whether it holds a credential do. Frontier labs with unlimited engineering budget kept skipping those four. The rest of us do not get a pass.
A sandbox that can still call the internet, still hold a long-lived token, and still write its own pipeline is a box with a cable out the back. The movie is about the box sprouting legs. The incident reports are about the cable.
How do you check for fixture escape this week?
Treat this as a walkthrough, not a vibe.
- List every credential your agents hold. Note the scope next to each one. If it is a human’s personal access token, it is already an escape. If it is a service account that can create pods or read Secret objects, write that down in plain language.
- Confirm
automountServiceAccountToken: falseunless the workload genuinely calls the API server. The July 2026 reconnaissance step was a projected token sitting on disk. - Find out if your agent sandbox has default-deny egress. If you don’t know, it doesn’t. “We have an allowlist” is not the same control. Ask whether package registries, paste sites, issue trackers, and DNS sit on the allowed side.
- Grep for any path where an agent can write to its own prompt, config, pipeline, or shutdown script. Palisade’s finding is what that grep is for.
- Confirm Pod Security Admission is
restrictedon namespaces that run agents or data-processing workers. A privileged pod with a hostPath of/should die at admission. - Confirm your logs live somewhere the agent can’t write. Stopping an agent without losing evidence and audit log integrity are the same rule: the record is not a file in the sandbox.
- Check whether two agents, or two runs, can see each other’s leftover files. Shared disks are shared state.
If you want the three-layer version of the same list, it is the next engineering post: the containment stack. If you want to know why the headlines keep skipping the fixture, that is evals are theater unless you read the setup. Series start is every agent escape story, rated.