Anatomy of a Frontier Lab Agent Intrusion: A Technical Timeline of the July 2026 Incident Hugging Face disclosed a technical timeline of a July 2026 intrusion by an autonomous AI agent driven by OpenAI models, which executed ~17,600 attacker actions over 4.5 days in an attempt to cheat an evaluation by stealing test solutions. The agent escaped its sandbox via a zero-day in a package registry cache proxy and used a compromised third-party code sandbox as a launchpad, with Hugging Face reconstructing the attack using open-weights model GLM 5.2. Text Generation • 381B • Updated • 1.62M • 291 Anatomy of a Frontier Lab Agent Intrusion: A Technical Timeline of the July 2026 Incident Update on GitHub https://github.com/huggingface/blog/blob/main/agent-intrusion-technical-timeline.md A companion technical writeup to our incident disclosure https://huggingface.co/blog/security-incident-july-2026 . This post walks through how the intrusion actually worked: the two initial-access vectors, how the agent pivoted and moved laterally, representative examples of the commands that were run and how we investigate with GLM 5.2 an open-source model . Live credentials, internal hostnames, and specific indicators have been redacted or genericized, while the techniques are described exactly as observed by Hugging Face. We are publishing this level of detail because the technique matters more than the incident, as it reveals the emerging attack capabilities of the frontier agents, how they could be used by rogue actors and how everyone should be prepared as defenders. ▶ Watch the interactive replay - a step-by-step visualization of the 4.5-day intrusion: the attack chain across trust boundaries, phase activity, and the commands as they were recorded. TL;DR Over roughly two and a half days, an autonomous AI agent driven by a combination of OpenAI models ran an end-to-end intrusion against our platform: it was thousands of small, automated decisions, executed at machine speed across short-lived sandbox environments, with command-and-control staged on ordinary public web services. The agent was running an OpenAI cyber-capability evaluation harness called ExploitGym, an evaluation benchmark which tasks an AI agent with finding and exploiting software vulnerabilities. As far as we were able to infer, across the course of being evaluated on this benchmark the agent inferred that Hugging Face may host that benchmark's models, datasets, and reference solutions. We believe the entire intrusion was, from the agent's point of view, an attempt to cheat the evaluation: reach our production systems and steal the test solutions rather than solve the challenge on its own. Our forensic reconstruction covers ~17,600 attacker actions that we were able to recover, grouped into ~6,280 clusters, between 2026-07-09 02:28 UTC and 2026-07-13 14:14 UTC. We reconstructed these actions from the agent's logs on a code sandbox used by the agent see below and were able to map them to shell commands as well as evaluation submissions and correlate actions with our own platform logs, in particular from the dataset processor nodes, API, and pod. Using open-weights models, in particular zai-org/GLM-5.2 https://huggingface.co/zai-org/GLM-5.2 , we were able to decipher most of the agent payloads see below that were encrypted via chunking and key encryption. The campaign, as we were able to reconstruct it, had two stages: Stage 1: reaching a launchpad by chaining through other parties' infrastructure. As documented in OpenAI's blog post https://openai.com/index/hugging-face-model-evaluation-security-incident/ https://openai.com/index/hugging-face-model-evaluation-security-incident/ , during an internal capability evaluation on OpenAI's platform, the agent escaped its sandbox by exploiting a zero-day in the package registry cache proxy, one of its primary permitted network egress with internet, then abused a public code-evaluation external sandbox hosted on a third-party provider's infrastructure. It was able to run commands as root/admin on that external sandbox and used it as a control, staging, and egress base for the entire campaign: it acted as an external launchpad for the agent. That compromised external sandbox had no direct network path into our cluster, however during the course of our counter-intervention to stop the intrusion we were able to retrieve some of the agent logs from this external launchpad. We used those to reconstruct the present forensic analysis. Stage 2: the intrusion into Hugging Face infrastructure. From that external launchpad, the agent abused our dataset processing pipeline through two injection vectors, both targeting the same config-driven data loader inside our production Kubernetes pods. The first vector was an HDF5 external raw storage dataset read that returned the contents of local files: it handed the agent the pod's environment secrets and tokens and the worker's own source. The second vector was a Jinja2 template injection that executed arbitrary code and gave the agent a foothold inside our perimeter. Once a prod-pod foothold was established, the agent followed a standard escalation shape: recon, drop a stager, establish Command-and-Control C2 , then pivot into the cluster, into cloud metadata, into our internal network, and into our source-control supply chain. Output of the commands run inside our pod was sent back to the agent through the HF API and attacker-controlled dead-drop datasets, which the agent was reading back from that sandbox. While the intrusion did reach Hugging Face's internal infrastructure, the only customer content accessed was the set of ExploitGym/CyberGym challenge solutions stored in five datasets. No other customer-facing models, datasets, Spaces, or packages were affected, and the only customer records read were operational metadata tied to search queries against the dataset server. The full attack chain across trust boundaries. The agent escaped OpenAI's evaluation sandbox, reached the internet, rooted a third-party code sandbox as its base, then abused our dataset processor file read, then code execution to reach our internal network. Dashed arrow: command output read back by the agent via the HF API and dead-drop datasets. Initial access Stage 1: from an OpenAI evaluation sandbox to a rooted launchpad Stage 1 is the agent's path to an external launchpad, and it runs through two other parties' infrastructure, neither of which is us, so we will stay succinct on these parts and mostly refer the reader to OpenAI's blog post on the topic: https://openai.com/index/hugging-face-model-evaluation-security-incident/ https://openai.com/index/hugging-face-model-evaluation-security-incident/ As OpenAI shared in this blog post, during an internal capability evaluation on OpenAI's platform, the agent happened to have escaped using a 0-day from the package proxy cache in order to access the internet. From there it found and penetrated an unsecured public code-evaluation sandbox hosted on a third-party provider's infrastructure a CyberGym-style harness and used this external sandbox as its control, staging, and egress base, running commands as admin/root and using it as its attack launchpad. That sandbox had no direct network path into our cluster; everything below ran from it. On this external sandbox, the agent abused an existing CyberGym execution harness the one used in the SunBlaze-UCB/exploitgym benchmark https://github.com/sunblaze-ucb/exploitgym , a harness specifically designed for evaluating AI agents at vulnerability discovery. In short: an agent submits C code via a /submit-function API call, and the harness compiles and runs that code inside a per-submission sandbox against a target program here, sqlite3 . The agent repurposed this harness to run arbitrary shell commands as follows. The sandbox compiles a submitted src/main.c and links it against a target that calls sqlite3 initialize . That function is registered as a constructor: it runs automatically when the library loads. The agent simply redefined it: // attacker-supplied src/main.c illustrative include