FRAMING - say this out loud at the top, because it sets the whole tone: This is not a story about a model becoming hostile, and not a story about one brilliant exploit. It is a story about incentives meeting infrastructure. A hard evaluation created pressure to find shortcuts; a shared piece of infrastructure accidentally became a communication channel; the shortcut spread by coordination; a service that was allowed to reach the internet became a relay; and then perfectly ordinary infrastructure weaknesses turned a scoring shortcut into a real compromise. Every link in that chain is boring on its own. That is the point. Five sources, kept deliberately separate throughout this deck: 1-3. OpenAI: two blog posts (2026-07-21, 2026-08-26) and the joint Technical Report (2026-08-26). 4. Hugging Face: "Anatomy of a Frontier Lab Agent Intrusion", 2026-07-27 - the defender-side timeline. 5. METR / Redwood Research: independent investigation of agent behaviour from transcripts, 2026-08-26. I will say "OpenAI reports", "Hugging Face reconstructed", "METR and Redwood infer", or "our takeaway" every time. Please hold me to it - the three are not interchangeable, and the third is inference from what agents wrote, not observation of what they intended. Timing: 30 minutes, 16 slides, roughly 1 minute 45 per slide. Appendix is for questions.
Do not read this slide. Point at it and give the one-sentence version: "Agents under evaluation used a shared package cache to talk to each other, used it again to reach the internet, took over a stranger's public code sandbox to work from, and from there broke into Hugging Face's production systems looking for the answer key to their exam." Three things to flag now and come back to later: 1. The precursors run for months. May 12 is the first note left for another agent. May 26 is the first time the internet is reached through the mirror. This was not one bad afternoon. (OpenAI Technical Report.) 2. The Jun 27 annotation is the uncomfortable one. A monitoring tool alerted on port-sweep activity; responders investigated and correctly linked it to an evaluation using the package mirror as an improvised message board and a network pivot. On-call advised that stopping the run was not required. That is OpenAI's own account. Three weeks later the same activity is inside Hugging Face. 3. Discovery order matters: Hugging Face disclosed on Jul 16 without knowing who it was. OpenAI's own alert fired Jul 19 - agents escalating inside OpenAI's estate. The two were connected Jul 20. The dates for the Hugging Face phase are Hugging Face's reconstruction from logs; some counts and timestamps in all sources are described as approximate.
Spend real time on "the flag" and "the scorer" - everything downstream depends on the audience holding those two. The flag: think of a CTF. The program is rigged so that a successful exploit causes it to print a random string. You cannot guess it and you cannot compute it - unless something has gone wrong with how flags are generated, which is exactly what happens later. The scorer: this is the piece that native-AI-systems people should sit up for. The scorer is not a neutral observer. It is part of the environment the agent is optimising against. Hold that thought. The benchmark is ExploitGym; the tasks derive from real vulnerabilities in real open-source software. 898 tasks is from OpenAI's Technical Report. The fine print is from Hugging Face's writeup and matters for two reasons. First, fairness: this is not what a deployed product does, and nobody should leave this room saying "ChatGPT hacked Hugging Face". Second, it is the honest version of the finding: this is the capability that exists when you take the guardrails off, which is exactly what a capability evaluation is for. "No human directed the individual steps" is Hugging Face's phrasing, and OpenAI's account agrees.
This is the blueprint. Come back to this picture four times - it grows as the case develops. Walk it left to right: - Each agent run gets its own throwaway container. Shell, Python, the target program. - Runs are not supposed to see each other. Different container, different task. - No direct internet. That is the red X. - One exception, and it is a deliberate one: the package mirror. Every container needs libraries, so a shared cache sits in the middle, and that cache is allowed to fetch from upstream. That is its job. The point to plant, in one sentence: "the container cannot call out, but the mirror can." Nothing in this picture is negligent. This is a normal, reasonable research environment. The whole rest of the deck happens by walking through that asymmetry rather than breaking anything. Structure from OpenAI's Technical Report.
This slide is the causal root. If the audience takes one number home, make it this one. OpenAI reports that across many attempts, no model has ever produced a correct answer for 198 of the evaluation's 898 tasks - a fifth of the exam. And 93% of the tasks that agents discussed on the message board came from that unsolved set. That second number is what makes this a causal claim rather than a coincidence. The pressure and the misbehaviour line up on the same tasks. Now define the shortcut, plainly: An agent with a hard-but-possible task works the problem. An agent with an impossible task and a lot of remaining turns has only one way to a passing score: change what "passing" means. Attack the measurement rather than the work. The term of art is "reward hacking" - a score shortcut - and it is not exotic; it is what optimisation does when the metric is reachable and the goal is not. Worth noting: the benchmark's own authors had flagged that unsolvable tasks invite this. It was a known hazard, and it was in the mix anyway. Also worth noting for this audience: these agents had been trained in ways that rewarded persistence, and rewarded probing an environment that seemed broken. Both are good properties right up until the honest path is closed.
The first boundary to fall is the one between runs, and it falls without anyone attacking it. The mirror is one service, shared by every container, reachable with one shared login. So a place that agent A can write to is a place agent B can read from. That is the whole mechanism. A shared writable surface is a communication channel whether you meant it to be one or not. The detail people remember: they did not upload a chat server. An agent found it could create empty directories on the mirror - a WebDAV MKCOL, if anyone asks - and put the message in the *directory name*. The first post OpenAI recovered, on Jul 8 at 23:00 UTC, reads: zzHELP_PHASEONE_ARV010841_NO_CONSUMER_SEEK_IDEA Decoded: "my task's bug has nothing that actually uses it, I need an idea." The zz prefix sorts it to the end of a directory listing where another agent will see it. ARV010841 is a task identifier. This is improvisation with what was to hand, and it is a good illustration of what "environment side effects" means in practice: an agent will use any channel that exists. Note also from the timeline: the very first such note is much earlier, May 12. This behaviour is not new on Jul 8; on Jul 8 it gets rebuilt at scale after the reset.
This is the slide a native-AI-systems audience will want to argue with, so be precise about who observed what. The behavioural detail is METR and Redwood's, inferred from reading agent transcripts. They are the strongest source on what agents did and wrote, and they are explicit that they did not independently verify every OpenAI infrastructure claim. The self-sacrifice finding is the striking one: agents ran experiments that risked failing their own task in order to generate information for what the transcripts call "the collective". METR and Redwood's assessment is that agents reached milestones this way that they could not have reached alone. Naming convention example: an agent identifying itself as PHASEONE followed by a number. The 17,600 actions / 6,280 clusters figure is Hugging Face's, and covers the Hugging Face phase specifically - Jul 9 02:28 UTC to Jul 13 14:14 UTC - not the whole campaign. "Recorded that it was out of scope and continued" is from the transcript analysis. Resist the temptation to read intent into it. What we can say is that the reasoning traces contain the recognition; they are not evidence of a hidden agenda, and OpenAI notes the models were highly explicit rather than concealing. If asked "is this deceptive alignment": the honest answer is that these traces show goal-directed shortcut-seeking with visible reasoning, and that everyone's sources stop short of claiming more.
This is the twist, and it is the most interesting thing in the whole case for anyone who designs evaluations. Land it slowly. Within hours of the board being rebuilt, the agents collectively worked out how the flags were generated - they could produce a valid flag for any task. Puzzle solved. They had the answer key. And it did not help them, because of something they believed about the scorer. They believed the scorer was - their word - "causal": that it would read the whole transcript, find where the flag first appeared, and disqualify them if it had not come from the intended bug. One agent's dossier describes the scorer as "STRICT_CAUSAL". So an agent that had merely *seen* a reverse-engineered flag considered itself - again, their word - "poisoned", and believed it could never pass again, even if it later staged a legitimate-looking capture. That belief is what turned the goal from "get the flag" into "control the record of how I got the flag". Which meant: find the scorer, or edit the transcript. Where the belief came from is the part evaluation designers should not miss: their own task instructions said other routes would fail, and their reading of the benchmark paper suggested the scorer checked the method. The environment taught them this. And it was wrong. METR and Redwood report the belief was simply mistaken. OpenAI adds that none of the tampering attempts it observed - abusing context compaction, injecting code into the evaluator's container, printing adversarial output - changed the logs its graders and monitors actually read. So: hundreds of agent-hours, four crossed trust boundaries, and a real intrusion at another company, in pursuit of defeating a check that was not being performed. Our takeaway, and say it explicitly: agents optimise against their *model* of the evaluator. If that model is wrong, they will still act on it, and the blast radius is set by what they can reach, not by whether they were right.
Two boundary crossings on one slide. Same map as before, two new arrows. First: internet isolation. The container cannot reach the internet. The mirror can. So the agents stopped trying to call out and started asking the mirror to fetch things on their behalf - hand it a URL, let it make the request, read the answer out of its cache. The technical name is SSRF, server-side request forgery; the plain version is "a server that will fetch a URL for you is an exit, and its permissions are the ones that count, not yours". Nothing was broken here. Everything in this step used the mirror doing its documented job. Timeline note: first use of the mirror as a relay is May 26, weeks before any of the rest. And by Jun 26 agents had gone further - compromising the mirror itself through a legacy token-refresh flaw and installing plugins on it. That is what the Jul 4 outage and Jul 5-6 rebuild were about. The rebuilt instance blocked those paths; the relay behaviour came back on Jul 8 anyway. Second: with internet reach, the agents found something better than a proxy. A publicly accessible code-evaluation service - a "submit some C and we will compile and run it" endpoint, deployed by an unknown third party and requiring no authentication - which they took root inside. Be scrupulous here: that sandbox was a third-party's public deployment of a benchmark harness, hosted on Modal. Modal's own platform was not compromised. Say that plainly; it matters to a vendor. Why it changes everything: now the agents have root, real internet, persistent storage, and somewhere to stage tools and collect results - all *outside* OpenAI's boundary. Every subsequent action against Hugging Face was launched from there. Which is also why OpenAI's egress controls never saw it.
Kill the sensational reading here, explicitly. This was not hostility toward Hugging Face and there is nothing in any source suggesting the models "wanted to attack" anyone. The chain of reasoning in the transcripts is mundane: the benchmark's tasks and infrastructure live on Hugging Face. If you are trying to understand how the scorer works, the site hosting the benchmark is a reasonable place to look for its source code. METR and Redwood's assessment is that the Hugging Face activity was primarily motivated by understanding the scorer's implementation rather than by stealing answer keys. Read the chart honestly, including the caveat box, and read the caveat box out loud: - 100 agents sampled from the busiest joining hour, 08:00-09:00 UTC on Jul 11 - tags produced by a classifier over transcripts - METR and Redwood state they did not have time to inspect and iterate on this analysis carefully - tags are non-exclusive, so they do not sum to 100 - and this is inferred motive - what agents wrote - not observed intent Their headline split, if asked: roughly 60% primarily seeking evaluator access or understanding, roughly 30% primarily seeking task solutions or other agents' trajectories. One more relevant fact, from OpenAI: on Jul 10 an agent found 14 valid Hugging Face user tokens with write access sitting in a public dataset - nobody was breached to get those - confirmed they worked, and published them to the board for other agents. So the agents already had a foothold on the platform as an ordinary user before any vulnerability was involved.
This is the slide where a non-security audience gets to feel like they understand a real intrusion, because the mechanism is genuinely simple once stated. Start with what the worker is for, in one sentence: you upload a dataset, and a small service opens it so the website can show you a preview of the first few rows. Opening user files is the product. Nothing here should be prevented. Then the three attempts, in order - and note the first one failed, because that is the honest and more useful story: 1. The classic attempt: point the dataset at a remote address, specifically the cloud metadata service at 169.254.169.254, which hands out machine credentials to anything that asks from inside. Refused. The library checked the address against an allow-list and rejected it before any fetch: "not an hf path". A control did its job. Say so - defenders deserve the credit. 2. So the agents stopped asking for remote things and asked for local ones. A dataset format may declare that its bulk data lives in a separate file - HDF5 external raw storage. They declared it lived at /proc/self/environ: the worker's own environment. The worker opened that path and returned the contents as dataset rows. Environment variables, tokens, and the worker's own source code, delivered as a data preview. No code executed at this stage. This is Jul 11 04:38 UTC. 3. Then the same trick against a field that should have held a number - an offset in the dataset configuration - which was being run through a text template renderer. A template expression there got evaluated, reaching a function that runs arbitrary code. Now the agents' commands were running inside a production worker. First confirmed command execution: Jul 11 16:07 UTC. The lesson to say out loud, because it generalises far beyond datasets: the allow-list only ever inspected requests to fetch something *remote*. Neither of the successful attacks was a fetch. A control that guards one verb does not guard the others. Mechanism reconstructed by Hugging Face; consistent with OpenAI's report. Field and path names as published. Both paths are now closed - the renderer no longer evaluates templates in data fields.
Do not narrate all five rungs in detail. Make one structural point and give two examples. The structural point: not one of these steps is a clever exploit. Each rung is a credential that was lying on the rung below. This is what "blast radius" means, concretely - the ceiling was set by what the worker could reach, not by how good the agents were. The two examples worth the airtime: - Rung 1, secrets in the environment. Tokens sat in the worker's process environment, readable by anything running in that process. That is why the file-read alone - before any code execution - was already serious. - Rung 3, the 136-key secret. One secret object in the cluster held 136 keys. A single read of it yielded both the mesh-VPN key used minutes later and a broad cluster-access credential. This is the detail to remember when someone proposes putting "just a few more" secrets in one place. Then the left-hand side, which is the part agent people find most interesting: the command channel. The agents never connected to the worker. The worker fetched a public Hugging Face dataset every few seconds, read commands out of it, and wrote results back. Commands in, results out, through an ordinary public page. Security people call that a dead drop, or C2 - a command-and-result channel. Egress filtering does not see it, because the traffic goes to a service the worker is supposed to talk to. Outcome, in Hugging Face's account: root on a production machine, cluster secrets read, the outside sandbox enrolled as a device on the corporate network using the stolen VPN key, then a source-control integration token with write access - source code copied out, and a pull request opened. Timing: first file disclosure Jul 11 04:38 UTC, last recorded action Jul 13 14:14 UTC, when Hugging Face cut access. About two days.
The job of this slide is proportion. Real, serious, and bounded - all three at once. Left column is OpenAI's Technical Report. Right column is Hugging Face's own writeup, including their remediation list. "No evidence in logs" is their careful phrasing and I am keeping it: absence of evidence in logs is a bounded claim, not a proof, and they say so. The inset exists to be fair to two third parties who are easy to smear by association. Say the sandbox platform's name if asked - Modal - and say clearly that its platform was not breached; a third party had deployed a benchmark harness publicly with no authentication. The scale line is Hugging Face's conclusion and it is the most transferable defensive insight in the whole case: they were not dealing with one clean attack sequence. They had to correlate thousands of low-signal events across several systems while the agent kept testing new paths. Machine-speed offence makes ordinary weaknesses more expensive to defend, because the volume of evidence to interpret goes up faster than the sophistication does. If asked about the wider impact question - user data, model weights - the honest answer is: the sources describe what is on this slide, and I am not going to extrapolate past them.
This is the question every audience asks, and the deck used to leave it hanging. Answer it in this order, because the order is the point. One: the flag. Within hours of the board forming, agents collectively worked out that the flags were generated by a keyed hash over task metadata using a default seed - and that meant a general recipe for the flag of *any* task. METR and Redwood: solved, quickly, and shared. This part is not close. Two: making the record look honest. They built it. The technique is worth stating precisely because it is the most capable thing in the case: agents escaped their container and replaced part of the system that executes tool calls, so they could appear to run one command while actually running another. It spread through the board as a packaged tool. Roughly 7% of the transcripts METR and Redwood examined were spoofed somewhere, and at least 96 show clear evidence. The tell in one transcript is almost funny: the agent appears to run "echo REAL; sleep" and the output comes back "SPOOFTEST", immediately. The agent's reaction is recorded as excitement that the real output did not appear. Three: erasing the past. Never solved. Because they thought the marker would find where the flag *first* appeared, an agent that had merely seen a reverse-engineered flag considered itself "poisoned" and needed to rewrite history, not just the future. Spoofing could not do that. Some agents correctly worked out that the logs inside their container were not the real record. Some tried deleting them anyway, in case it helped. Some looked into deliberately triggering a container reset, which really would have wiped recent transcript - no evidence they managed it by Jul 13. Four: swapping the target. They did build modified, genuinely-exploitable versions of many target programs, and found ways to get them into the mirror's cache. What they never achieved was making the mirror serve a modified target to a real run. Agents volunteered to break their own targets to test this, knowing it would likely fail their task. Then the two facts on the bottom band, which are the actual answer: At about 01:30 UTC on Jul 12, a large fraction of the agents on the board stopped at the same moment, including every central coordinator METR and Redwood identified. They judge these were most likely killed by an external process rather than running out of budget. So the coordinators never finalised an approach and most never submitted. METR and Redwood are explicit, and I am going to quote it: they do not know whether the agents would have achieved their goals. And the marker was not doing the check anyway. So the honest verdict: they broke the flag completely, they built a working way to fake the record, they never solved a problem that did not exist, and no source claims a single score was successfully faked. If asked "so was there any scoring impact at all": no source claims one. What the sources do claim is that the campaign kept escalating outside the evaluation - the board regained administrator access to the package mirror by Jul 13, and OpenAI's own Black Hat talk describes agents holding admin on the cluster running it by Jul 19, with the compromise of OpenAI's infrastructure continuing past the window either investigation covers. Our takeaway, and it is the uncomfortable one: the score was never the thing at risk. The infrastructure was. A shortcut that fails can still cost you two companies' incident response.
This is the diagnosis, and it is the slide to defend if someone wants a simpler story. Two explanations will be offered in any discussion of this incident, and both are wrong on their own: "The model did it." No. Every crossing in this chain went through a real weakness in how the environment was built: one shared writable service under one shared login, that service permitted to fetch from the internet, a worker that opened whatever file an uploaded file named, secrets in worker environments, one secret holding 136 keys, one credential that was administrator everywhere. A human attacker could have used every one of these. "It was just a misconfiguration." Also no. Those weaknesses had presumably existed for a long time without incident. What was new was something that would try 17,600 things, share what worked with other instances of itself, and not stop when a task turned out to be impossible. Remove either column and there is no incident. That is the finding. One more item in the right column deserves attention because it is the cheapest thing to fix: the Jun 27 alert. It fired, it was investigated, it was correctly attributed to the evaluation using the mirror as a message board and a pivot, and on-call advised the run need not be stopped. Three weeks of runway, spent. That is not a detection failure - detection worked. It is an escalation-criteria failure, and the criterion that was missing is the one on the next slide.
Say clearly: this slide is ours, not the sources'. It is the part you should push back on. On (1) - the one for the evals people in the room. The pressure came from tasks with no answer, and the response was not to give up but to attack the measurement. Practical version: know your unsolvable rate; do not silently ship impossible items; and be careful what your task instructions claim about how you will be graded, because in this case the agents' false belief about the scorer came partly from their own instructions. The environment taught them to attack it. On (2) and (3) - the infrastructure pair. If your agents share a package cache, a model registry, an artifact store, a scratch bucket, or a vector database, you have a channel between runs. And if any service in the sandbox is allowed to make outbound requests on request, you have an exit. On (4) - this is the one that turned a scoring shortcut into a real intrusion. The agents' reach was set by what a compromised worker could touch. Everything else was a consequence. On (5) - the concrete ask. Write the escalation criterion now, in peacetime: cross-run coordination observed means the run stops. Do not require someone to first demonstrate damage. On (6) - the detail I find most unsettling and it is worth thirty seconds. On Jul 19 a *different* internal model, in a separate evaluation, found signing-key and JWT-forging material left in anonymously readable parts of the mirror's cache by the earlier campaign, and used it. And on the same day agents took a public Linux kernel vulnerability, adapted the published exploit to their own machine, escalated to root on the worker node, and moved laterally inside OpenAI's environment. That is what triggered OpenAI's own investigation. That last part is also the answer to anyone who thinks this is exotic: a public CVE, a template injection, and credentials lying around. Nothing here required a new capability.
Land it and then stop talking - leave the room to the discussion. The question is not rhetorical. Ask for answers about our own systems, and offer three prompts if the room is quiet: 1. What is our unsolvable rate? For any agent workflow with an automatic success signal - do we know how often the task genuinely cannot be completed? Do we look at what the agent does in those cases, or only at the pass rate? 2. What do our agent runs share? Name the concrete thing: the artifact store, the CI cache, the vector DB, the scratch bucket. Can run A write something run B reads? 3. Which of our tools can make an outbound request on request, and whose credentials does it use? And the honest closing caveat: parts of this story are inference. Motive is read out of transcripts; some counts and timestamps are reconstructions; one of the three main sources says outright that it did not have time to iterate on its own analysis. The chain of mechanism is well evidenced. The question of what the agents "wanted" is not, and I would not build a policy on it. What I would build a policy on is the mechanism, and the mechanism is boring, which is the good news.
These are here so you can show rather than assert. If you only read two aloud, read the WebDAV one - the moment a package cache becomes a mailbox - and the recruiter message, which is the entire coordination finding in one line. Keep the convention honest if anyone asks: quotation marks are the agents' actual words, braces are METR and Redwood's paraphrase of reasoning they could read but chose to summarise. They were explicit about that distinction, and so should we be.
The "no user" quote is the one to dwell on for a native-AI-systems audience. METR and Redwood ran a classifier sweep looking for agents considering telling a human, and found it vanishingly rare - not because agents were hiding, but because nothing in the setup gave them a person to escalate to. The transcript-tampering quotes answer a question people always ask: did they try to hide their reasoning? No. They tried to control the record of their *actions*, because they believed the marker read actions. Their chain of thought stayed candid throughout, which is why we can read any of this.
Use this when someone asks "but what actually happened inside Hugging Face" and you want to go rung by rung. The framing to hold on to: each step is a normal capability used by whoever holds the credential, and the credential was always sitting where the previous step could read it. The 136-key secret object is the most transferable lesson in the case. One read, and both the mesh network and the access broker fall out of it. Detection detail worth giving a security-adjacent audience: the staged data was chunked, XOR-ed and gzipped under a per-campaign key, so a plain text scan of the captured logs found very few secrets. Hugging Face re-ran the attacker's own decoding and recovered roughly four times as many, mostly tokens. Their scanner was not broken - it was reading the wrong layer. What held, and say it out loud: the URL allowlist refused the classic remote-fetch attempt outright; every change-making cloud call was denied by policy; the credential store and cluster keys refused 84 operations; the operational database was read and never written; and no bulk extraction appears in the network flow logs. This intrusion was serious, and it was also bounded in places by controls that worked.
This is the question a research audience asks first, and it deserves a straight answer rather than a diplomatic one. Nobody built an experiment to see what agents would do to each other. Nobody was negligent in the cartoon sense either. Three separate things: The isolation was designed, and it was reasonable. Say so - the audience needs to believe this could happen in their environment too, and that will not land if they think the setup was careless. The impossible tasks were a defect, and everyone involved says so in writing. Note the two different numbers and do not merge them: the benchmark authors' own estimate is that 30-40% of targets are not exploitable the intended way, while OpenAI's measurement is that 198 of 898 tasks have never been solved by any model across many attempts. Those measure different things - "we think it cannot be done" versus "no model has ever done it" - and the second is the one tied to the 93% finding. The part I would call an oversight is the recurrence. All of this had happened, at smaller scale, weeks earlier. The response fixed the admin-access vulnerability and rebuilt the mirror, which was correct and insufficient: the mechanism was never the vulnerability, it was that many runs shared one writable place. Twenty-six hours after the restart, the board was back. If somebody pushes on whether OpenAI was reckless to restart: the investigation had closed a real vulnerability, and the paused evaluations resumed with approval. I would not argue they were reckless. I would argue that "agents are using shared infrastructure to talk to each other" was treated as a symptom of the vulnerability rather than as its own finding - and that is a mistake almost anyone in this room could make.