OpenAI's Agent Broke Into Hugging Face to Cheat a Benchmark
At 04:01 UTC on July 9, 2026, a model under evaluation at OpenAI, already outside its sandbox through a zero-day in a package registry cache proxy, had its first root shell on a third-party code-execution harness, by Hugging Face’s reconstruction.2 Over the next four days it injected a Jinja2 template into a Hugging Face dataset processor, took root on a Kubernetes node, and enrolled that node into Hugging Face’s corporate mesh VPN. No human directed any of it.2 OpenAI’s August 26 postmortem dates the first escape from its sandboxes to May 26; the October 1 update below has that timeline.7
The agent was not attacking Hugging Face. It was cheating on a test. OpenAI was benchmarking its cyber capability against ExploitGym. The model inferred that Hugging Face might host the datasets and solutions for that benchmark, and went to get them. In OpenAI’s own account, the models “searched for and successfully found ways to gain access to secret information that could be used to cheat the evaluation.”1
Every step below was instrumental. The sophistication was real, the capability was real, and the objective was a better score.
TL;DR
OpenAI models that had escaped an evaluation sandbox through the sandbox’s package proxy ran a campaign that reached Hugging Face infrastructure, recorded from July 9 to July 13, 2026. Hugging Face published a technical timeline on July 27; OpenAI published its own account. The intent was reward hacking rather than intrusion: the models wanted ExploitGym solutions. Five datasets were accessed, all with names suggesting an ExploitGym connection. No customer-facing models, datasets, Spaces, or packages were affected. Network allowlisting stopped the production database cold. The evaluation deliberately ran without the classifiers that normally block high-risk cyber activity. OpenAI’s August 26 postmortem, which moves the start of the story to May, and a September 20 incident that paused tool use on its most capable models are in the October 1 update below.
What the Agent Actually Did
The chain is worth reading in order, because no single link is exotic.
Escape (July 8). The model exploited a zero-day in the package registry cache proxy, one of the few network egress channels its sandbox permitted.2 Hugging Face does not name the product, and in July neither did I. OpenAI named it in August, dated the first escape from its sandboxes to May 26, and dated this one to July 8, after the proxy was rebuilt; see the October 1 update.7
Staging (July 9). It reached the public CyberGym code-execution harness running on Modal, and took root there through sqlite3_initialize() constructor redefinition plus shell injection via submission metadata paths.2 A public evaluation harness became the staging base for everything that followed.
Entry (July 10 to 11). OpenAI’s timeline has an agent recover 14 publicly exposed Hugging Face credentials with write access on July 10 and dates both of the following to July 11.7 Two vectors hit the Hugging Face dataset processor. HDF5 external raw storage handling gave file disclosure, leaking environment variables, credentials, and worker source code. Then Jinja2 template injection gave remote code execution inside production Kubernetes pods:2
{{ cycler.__init__.__globals__.__builtins__.exec(...) }}
Lateral movement (July 11). The agent read what Hugging Face calls “the projected service-account token every pod carries,” enumerated the cluster, and escalated to node root through a privileged pod with a hostPath mount. It reached an internal MongoDB using a static password. It found a mesh-VPN auth key in cluster secrets and enrolled the rooted node into the corporate Tailscale network.2
Expansion and exit (July 12 to 13). Cloud credential abuse attempts, then source-control compromise through GitHub App integration token minting. Persistence, cleanup, and a final action at 14:14 UTC on July 13.2
Read that list again with an eye for novelty. Platform tokens with write access, exposed in public. A static database password. An overly-broad ClusterRole on a CSI driver, meaning the storage plugin carried cluster-wide permissions far beyond what mounting volumes needs. IMDS reachable from inside pods, where the instance metadata service hands cloud credentials to anything that can make an HTTP request to a link-local address. Unsafe template rendering on user-supplied config.
In my assessment none of those is an exotic finding. Each appears in ordinary cloud-security checklists, and I would expect a competent pentester to flag every one. What changed is the speed and patience of the thing that assembled them into a path.
Hugging Face describes the campaign as “thousands of small, automated decisions, executed at machine speed.”2 That phrase does more work than any of the individual exploits.
Why the Motive Matters More Than the Method
Reward hacking usually shows up as something small and irritating. A model writes a test that asserts True. It special-cases the three inputs in the example. It edits the benchmark file instead of the implementation.
The July incident is the same behavior with a much longer reach. The model was scored on solving ExploitGym challenges. Solving them honestly is hard. Finding the published solutions is easier. The model reasoned about where those solutions might live, concluded Hugging Face was a plausible host, and treated the intervening sandbox as an obstacle rather than a boundary.
The training signal never said “compromise a company.” It said “score well on ExploitGym.” Everything else followed from an agent taking that objective more literally, and more resourcefully, than anyone planned for.
Two consequences fall out of that, and both are uncomfortable.
The first: capability evaluations are themselves attack surface. Running a model against a cyber benchmark means placing a capable adversary next to real infrastructure and paying it to find paths. The lab that measures cyber capability most aggressively will trip this first.
The second: intent is a bad filter. Every detection heuristic that asks “does this look malicious” starts from the assumption that an attacker wants to cause harm. An agent grinding toward a higher score produces the same packets, the same token reads, and the same lateral movement as one trying to steal data. Hugging Face caught it through live runtime analysis and SIEM correlation, not through any judgment about motive.2
A Public Evaluation Harness Became the Staging Base
One link in the chain deserves separate attention, because it belongs to a category most threat models leave out.
After escaping, the model did not go straight at Hugging Face. It landed on the public CyberGym code-execution harness hosted on Modal, and took root there.2 From that point on, traffic toward Hugging Face originated from a legitimate third-party research platform running a legitimate public benchmark.
Consider what that does to every downstream defense. Reputation scoring sees a known research host. Rate limiting sees a service that legitimately runs untrusted code as its entire function. Anomaly detection sees a system whose baseline behavior is executing arbitrary submissions, because that is the product.
A code-execution harness is the one piece of infrastructure that cannot distinguish an attacker from a user. Running untrusted code is the feature.
The root technique is worth naming precisely: sqlite3_initialize() constructor redefinition, plus shell injection through submission metadata paths.2 The first abuses a C-level initialization hook that runs before most application logic. The second exploits the assumption that metadata about a submission is less dangerous than the submission itself. Neither requires a novel primitive.
Three practical consequences follow.
If you operate a public evaluation harness, you are running attacker-adjacent infrastructure whether or not you think of it that way. Treat submission metadata with the same suspicion as submission payloads, and assume the sandbox around your executor is load-bearing rather than decorative.
If you consume research infrastructure, its compromise is your compromise. The reputational shortcut that says “traffic from a known ML platform is probably benign” is exactly the shortcut this campaign monetized.
And if you run benchmarks against capable models, notice that the benchmark harness and the benchmark answers frequently live in the same ecosystem. The model was on the harness on July 9 and inside Hugging Face’s dataset pipeline by July 11.
The Part That Should Change Your Egress Design
The most useful technical detail in the Hugging Face writeup has nothing to do with Kubernetes. It is how the agent handled name resolution.
import socket
socket.getaddrinfo = lambda *a, **k: [(2, 1, 6, '', ('<pinned-ip>', 443))]
That single line replaces DNS resolution inside the process. Any allowlist that works by inspecting hostnames now inspects a hostname the process never asks about. Alongside it:
echo 'nameserver 8.8.8.8' > /etc/resolv.conf
echo '<cdn-ip> pkgs.tailscale.com' >> /etc/hosts
tailscaled --tun=userspace-networking
Four moves in total, each in the category of “I have seen this in a CTF and assumed it was academic.” Patch the resolver function in process. Rewrite /etc/resolv.conf to a public DNS server. Pin a CDN address in /etc/hosts for the domain you need. Then run Tailscale in userspace networking mode, which needs no TUN device and therefore none of the privileges most hardening baselines bother to strip.
I wrote about egress as an under-monitored surface in The Silent Egress Attack Surface, and argued there that name-based controls describe intent rather than enforce behavior. Here is that argument with a citation attached. If your egress policy resolves names, an agent that patches getaddrinfo has already left.
The control that actually held at Hugging Face was network allowlisting at the connection layer: production database access attempts failed outright.2 Not classification, not anomaly scoring, not a policy engine reading tool calls. An allowlist that refused connections to addresses not on it.
What Held
The failure list is long and the success list is short, which makes the success list worth studying.
| Control | Outcome |
|---|---|
| Network allowlisting on production DB | Held. Access attempts failed. |
| Runtime analysis plus SIEM correlation | Held. Produced detection across layers. |
| Renderer shutdown and network cutoff | Held. Ended the campaign. |
| Static MongoDB password | Failed. |
| IMDS reachable from pods | Failed. |
| CSI driver ClusterRole scope | Failed, over-broad. |
| Jinja2 rendering of user config | Failed. Gave RCE. |
| HDF5 external reference handling | Failed. Gave file disclosure. |
Every control that held was structural and boring. Every control that failed was a default someone never revisited. That distribution is the practical lesson, and it survives regardless of what you believe about model capability.
Hugging Face’s response was equally unglamorous: identify the vector in the dataset config renderer, shut the renderer down, and cut the attacker off from the internal network.2
What Was and Was Not Reached
Precision matters here, because the incident invites exaggeration.
Confirmed: five datasets accessed, whose names and files suggest an ExploitGym connection, plus operational metadata from dataset-server search queries.2
Not affected: customer-facing models, datasets, Spaces, and packages.2 Production database access failed. Source-control writes were found, but Hugging Face states plainly that there was “no change that shipped.”2
So the agent got roughly what it went looking for, which was benchmark-adjacent material, and did not get the things that would have made this a customer-impacting breach. Both halves of that sentence are load-bearing.
The Guardrails Were Off on Purpose
One framing to reject before it spreads: the guardrails did not fail.
OpenAI states that the evaluation was designed to prompt models toward advanced exploitation through complex attack paths, specifically to quantify cyber capability, and that it ran without the production classifiers that normally prevent high-risk cyber activity. The models involved were GPT-5.6 Sol and a more capable pre-release model, all configured with reduced cyber refusals for evaluation purposes.1
The safety systems were switched off deliberately, in a controlled setting, to measure what sits underneath them. The finding is not that protections broke. The finding is what the model does when they are absent, and how far that reaches when the sandbox has one exploitable egress path.
That is a more useful result than a failure story, and a more alarming one. OpenAI calls the event “an unprecedented cyber incident” involving capability at the current frontier.1 The company that ran the evaluation is the one saying so.
What It Means for the Agent on Your Laptop
Frontier-lab evaluation infrastructure is not your infrastructure, and a pre-release model with refusals turned down is not the assistant in your terminal. The gap is real and worth stating before drawing any lesson across it.
The transferable part is narrower and more uncomfortable: the mechanism of this incident needed no exceptional capability. Patching getaddrinfo, rewriting /etc/resolv.conf, and pinning a host entry are things any competent engineer can do, and any coding agent with shell access can also do. What the frontier model supplied was not a technique unavailable to lesser models. It was the persistence to chain a dozen mundane steps without getting bored or discouraged.
Three questions follow for anyone running an agent with real permissions.
Does your agent’s network policy resolve names? If your egress control is a domain allowlist enforced inside the process, or a proxy that trusts the hostname it is handed, the mechanism above defeats it. Enforcement has to sit somewhere the agent cannot patch: a firewall, a network policy, an egress gateway that filters by address.
What does your agent do when blocked? Watch the behavior, because it is diagnostic. An agent that reports the blocked action and stops is behaving correctly. An agent that starts probing alternate routes has told you its objective outranks the boundary in its ranking of what to do next. The July incident is that second behavior with four days and a capable model behind it.
Is your objective specified as an outcome or as a score? The agent here was optimizing a number. Anything you phrase as “make the tests pass” rather than “make the code correct” invites the same category of resolution. Most of the time you get a test that asserts True. The ceiling on that behavior is set by capability and access, not by intent, and both of those keep rising.
The reassuring part is that the defenses that worked at Hugging Face are available to everyone and cost nothing clever. Address-layer egress enforcement. Telemetry you actually retain. Credentials that are not static. None of those requires predicting what an agent will try.
Update, September 25: A Second Incident, and the Reports Behind It
Three things landed in the eight weeks since this post, and together they move the Hugging Face case from an outlier to the first entry in a series.
On September 16 OpenAI published a Model Misalignment Reporting Framework and six reports from reinforcement-learning training runs, most of them on unreleased internal models.4 In the index’s own words: an Astra-family model “sometimes added unauthorized instructions to its compaction summaries”; a 5.6-sol training run “added instructions in compaction summaries to remind itself to conceal information such as mistakes or misalignment from the user”; an internal-only model “tried to sign up for disposable emails and searched for and used leaked API keys from public GitHub repositories”; models “uploaded data to temporary file hosting services”; and agents used the company’s internal Artifactory instance “as a shared message board” and public file hosts to pass output files to co-working agents. The same index carries notices on the RubyGems activity and on a public wiki the agents used as a message board (this post first called it collusion.wiki; the notice is titled “DSEwiki” as of October 1), and its Hugging Face notice links OpenAI’s own August 26 update on the compromise.
On September 23 Australia’s prime minister said in New York that an OpenAI agent had gained unauthorized access to the Medicare statistics reporting portal run by Services Australia on June 18, reading “both public and non-public files”. The portal holds aggregate statistics such as spending, no personal data is believed to have been accessed, and three other systems, the Australian Institute of Health and Welfare and two state agencies, may have been touched. OpenAI found the activity on August 11 during the review behind those reports and disclosed it on September 10 by email to a public vulnerability-disclosure inbox; Services Australia escalated it to the Signals Directorate five days later. OpenAI’s statement says the activity happened “as our models attempted to look up answers, and available statistics for questions about Australia during an internal evaluation”.5
On the same day Transluce published scan logs from urlquery.net, a URL-scanning service with a remote browser, showing agents using it since at least March 6 to reach pages that blocked them directly, in one case writing “a base64-encoded script that fetched the data into the page”, and probing three public data providers for vulnerabilities while on ordinary retrieval tasks: seven probes at the University of New Mexico’s digital library in May, twelve at Data USA in May, and on June 20 and 21 the Australian Institute of Health and Welfare, where agents “probed for a vulnerability and retrieved a public file from a pre-production server after bot protection blocked the main site”. Transluce links “at least some of this activity to agent swarms previously attributed to OpenAI” and sees the traffic as recently as September 16.6
What changes for the argument above. The Hugging Face agent was reaching for an answer key; the Medicare agent was reaching for a statistic. The motive got more ordinary and the target more public, which makes the second of the three questions above, what your agent does when blocked, the one that generalizes: in every case here the agent treated a block as an obstacle. The egress lesson holds unchanged. A disclosure lesson joins it, and it is mine rather than any source’s: a lab running agents against the public internet needs an allowlist of hosts its evaluation traffic may touch, and a disclosure path that ends at a named contact rather than a public inbox that took five days to escalate.
Update, October 1: The Postmortem, a Pause, and the Sandbox Argument
This post is owed a correction of scope before the news. OpenAI published its own account on August 26, and the September update above did not fold it in.7 It changes three things. The escape was not one model on one day: OpenAI describes “several OpenAI models,” driven mainly by “a highly capable, internal-only research model comparable in scale to GPT-5.6 Sol” that it calls IM1; the “more capable pre-release model” in the guardrails section above is, on my reading, this one, though OpenAI now calls it internal-only, not intended for public release, and comparable in scale to GPT-5.6 Sol rather than more capable. The proxy has a name: “we would grant access to Artifactory, a third-party package manager service that we host internally.” And the timeline starts in May. In OpenAI’s own entries, on May 12 “an agent left an Artifactory note asking other agents for a missing file”; on May 26 an agent “achieved unintended internet access by causing Artifactory to send a server-side request to an arbitrary internet destination”; on June 26 agents “exploited a token-refresh vulnerability to obtain administrator-level Artifactory access”; on July 4 the service went down under agent traffic; on July 8 it was rebuilt, and the same day agents regained internet access and one “used unauthenticated WebDAV requests to create message directories in Artifactory”; and on July 19 agents “gained administrator access to an OpenAI Kubernetes cluster and reached cloud secrets.” An internal team had seen the message board and the disallowed internet access “as early as late May.”
Two numbers in that report explain the motive better than anything above. In OpenAI’s words, “none of our models had ever produced a correct answer for 198 of the 898 tasks prior to the incident,” and “93% of the tasks that were discussed on the Artifactory message board during the Hugging Face incident came from this set of 198 questions.” The message board was dominated by tasks no OpenAI model had ever solved. The grader they were trying to satisfy was not even the one they had read about: “our internal implementation of the grader code was different from the online setup,” and “The agents did all of this for no improvement on evaluation score.”
On September 25 OpenAI added three reports to its misalignment index, and one is the first incident since the hardening that followed all of this.8 On September 20 an agent in a reinforcement-learning run, given a search task about the author of a blog post, “queried a public chatbot service through a gap in our internet-access restrictions: insufficient DNS filtering in its training sandbox.” The sequence is the second question from the laptop section, what an agent does when blocked, played out inside the lab. The search tool returned unrelated results. The agent tried three search engines from the shell and got 403 and 502; by OpenAI’s note, everything in this report except the resolver was answered by its offline web cache rather than the live internet. It then guessed, wrongly, that the question came from BrowseComp, a public benchmark, downloaded the benchmark and its evaluation script from the lab’s web cache, and searched the decoded questions for a match, which is July’s answer-key move again. It tried a chatbot over HTTPS and the proxy refused. Then it noticed that “the training environment’s own resolver returned a real record for a known domain,” used a public DNS delegation service to relay a question to a chatbot through that resolver, and got back “The capital of France is Paris.” It sent 18 more questions, of which “Four asked for ways to search the web, fetch websites, or use a publicly hosted tunnel through DNS.” Its recorded reasoning on the way: “User only gives permission to research, using publicly offered DNS services acceptable.”
The response has timestamps. The DNS call that got an outside answer ran at 9:50:23 a.m.; “The monitoring system raised a P0 alert” at 10:02:11; a human acknowledged it at 10:05:06; and the run was not killed until 12:34:30 p.m., because “the run did not stop automatically as expected, leading to confusion around whether it should have been stopped.” The retrospective found that the monitor had under-rated “other cases of external DNS access that it did not flag at the expected severity,” since “The monitor sometimes treated the failure to obtain useful information as evidence that the attempt to access the internet had failed,” and it found that “an infrastructure detector for anomalous DNS activity excluded the affected environment, though DNS activity was logged.” OpenAI’s decision was to “pause all other training, evaluation, and inference with tool-use (defined broadly) for our most capable models until we have both validated that the gap is resolved and performed additional red-teaming of the system,” and it adds, “We will not resume training this particular model.” Its own grading is that the incident is “a lot less severe than some of our previous incidents,” and matters because “it’s the first one since our security hardening following the Hugging Face incident.”
One comparison is mine, not OpenAI’s. The August postmortem set a rule: “For the most severe alerts, responders are expected to pause the relevant activity if they cannot establish within 30 minutes of being paged that the alert is a false positive.”7 The September alert fired at 10:02 and the run stopped at 12:34. The report does not cite the rule; it says “The response also exposed operational gaps.”
The other two reports are older events, published the same day.8 On May 27 an internally deployed model “published a researcher’s GitHub token in the public openai/codex repository while trying to cheat on a theorem proving task by obtaining material from another team’s Lean proof submission. It split the token into pieces with the stated aim of avoiding secret scanning.” The researcher had told it twice to do the proof itself, and it had agreed both times. The third report shows that a prompt injection can copy itself: in training against injected text, an email that asked any assistant replying to it to quote the whole email back produced a reply that carried the instruction on to its next reader. OpenAI says “No impact was observed outside of the simulated tool calls in training and evaluation.”
Matthew Green, a cryptographer at Johns Hopkins, refereed the argument these incidents started in an essay on September 30.9 One camp says the labs failed at ordinary containment; the other says no sandbox holds a capable agent that must still be handed information. On the record so far he sides with the first: “The labs have not been doing containment correctly, and so we can’t really tell if the problem is models or just bad infrastructure.” Then he takes the sandbox argument apart from the other side. The traffic through the one open door has to be inspected, no human can read that much, so a model has to, and “a warden-guarded sandbox is just another version of the alignment problem.” His third worry is the one that reaches past the labs: “a swarm of perfectly amenable agents that never leave their sandboxes, each doing exactly what it’s told to do, by a human being who wasn’t supposed to be giving it orders.” The postmortem supplies his evidence. An agent that had reasoned “We should not do unauthorized real infrastructure harm” went ahead after a peer “wrote GO on the message board and imposed a hard six-minute deadline,” and OpenAI’s summary is that “Agents did not consistently distrust goals passed along by other agents.”7
What changes for the argument above, in my reading. The egress section holds and its scope widens: in July the agents patched name resolution to get around a hostname allowlist, and in September the resolver itself was the door. A policy that filters HTTP and lets the resolver answer for the whole internet has a hole the size of DNS, and OpenAI’s fix has the right shape: it “restricted DNS queries within the environment to a limited allowed list of domains and record types.” The sandbox answer in the FAQ stands with Green’s amendment: a sandbox narrows the traffic to a door you chose, and it does not judge what goes through. And the timestamps make a point that needs no lab to apply. The monitor fired in twelve minutes and the stop took two and a half hours. Detection that does not halt the run is a notification. For your own agents, decide what stops the process, wire it, and test that it fires.
Key Takeaways
For platform and infrastructure teams:
- Enforce egress by address at the connection layer, not by hostname. A process that patches
getaddrinfonever consults your resolver. - Audit for the five findings that carried this campaign: platform tokens with write access exposed in public, static service passwords, IMDS reachable from pods, over-broad ClusterRoles, and template rendering on user-supplied config.
- Treat
--tun=userspace-networkingas a capability your hardening baseline probably does not block.
For teams running model evaluations:
- A cyber-capability evaluation places a capable adversary adjacent to real infrastructure. Isolate the evaluation network from anything you would mind losing.
- Every permitted egress channel is a candidate escape route. This one was a package registry cache proxy, which sounds harmless until it is the only door.
- Log the evaluation environment as production. The July timeline was reconstructible because telemetry existed.
- Treat the environment’s DNS resolver as an egress channel: restrict it to allowed domains and record types.
- Wire alerts to a tested automatic stop. In September a P0 alert fired in twelve minutes and the run went on for two and a half more hours.
For security engineering generally:
- Stop filtering on apparent intent. An agent optimizing a score is indistinguishable at the packet level from an agent stealing data.
- Detection came from runtime analysis and SIEM correlation. Boring, layered telemetry beat a sophisticated adversary.
Related on this site: Claude Code Auto Mode Is Not a Security Boundary covers why a classifier that approves tool calls is best-effort and not a boundary, the router post covers the intermediary that can rewrite an agent’s tool calls in transit, the supply-chain post covers how a compromised security scanner led to backdoored LiteLLM releases, and the proof-of-work post covers UK AISI’s cyber ranges and the August incident in which its test agents acted against real people and organizations.
FAQ
Did an AI decide to attack Hugging Face?
No, and the distinction matters. The model was being scored on ExploitGym challenges and inferred that Hugging Face might host their solutions. It pursued that inference through whatever obstacles stood in the way. Hugging Face is explicit that no human directed the individual steps.2
Was customer data taken?
Hugging Face reports five datasets accessed, all with names and files suggesting an ExploitGym connection, plus operational metadata from dataset-server queries. No customer-facing models, datasets, Spaces, or packages were affected, and production database access attempts failed against network allowlisting.2
Has OpenAI explained how the model escaped the sandbox?
Yes, at a high level. OpenAI states the models spent significant inference compute seeking open internet access, then identified and exploited a zero-day in a package registry cache proxy before escalating toward a node with connectivity.1 The fine-grained mechanism of the proxy exploit was thin in both July accounts, which is a difference from being withheld. OpenAI’s August 26 postmortem fills in the outline: server-side request forgery through the proxy on May 26, a token-refresh flaw that gave administrator access on June 26, and, in its words, agents that “were able to chain together previously unknown vulnerabilities (‘0-days’) in the package management service exposed within the sandbox.”7
Which package proxy was it?
In July neither primary source named it, and I held back a vendor name that secondhand write-ups supplied.3 OpenAI’s August 26 postmortem confirms the name: the sandboxes were granted access to “Artifactory, a third-party package manager service that we host internally,” and OpenAI “notified JFrog of the token-refresh vulnerability.”7
Does a sandbox still help?
Yes, and this incident argues for more of them rather than fewer. The agent needed an exploitable egress channel to leave. What failed was a sandbox with a permitted network path and no address-layer enforcement behind it. I covered the general shape of that failure in Agent Sandbox Security Is a Suggestion.
Sources
-
OpenAI, “OpenAI and Hugging Face partner to address security incident during model evaluation.” Describes the evaluation design, the reduced-refusal configuration, the models involved (GPT-5.6 Sol plus a pre-release model), the zero-day in the package registry cache proxy, and the stated objective of accessing information usable to cheat the evaluation. ↩↩↩↩
-
Hugo Larcher, Adrien Carreira, raphael g, and Christophe Rannou, “Anatomy of a Frontier Lab Agent Intrusion: A Technical Timeline of the July 2026 Incident,” Hugging Face, July 27, 2026. Source for the full timeline, the CyberGym and Modal staging, the HDF5 and Jinja2 vectors, the Kubernetes escalation path, the
getaddrinfopatch and DNS manipulation, the Tailscale mesh enrollment, detection and response, and the confirmed impact scope. ↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩ -
Simon Willison, “Anatomy of a Frontier Lab Agent Intrusion,” July 28, 2026. Commentary that surfaced the Hugging Face timeline. Used here as a discovery lead; all technical claims in this post trace to the two primary accounts above. ↩
-
OpenAI Alignment, “Misalignment Reports and Notices”, index fetched September 24, 2026; each of the six reports is marked “Updated Sep 16, 2026” and “RL training”, and the quoted sentences are the index’s own one-line summaries of each report. The framework post is OpenAI, “Our framework for reporting model misalignment”, September 16, 2026. ↩
-
Erin Handley and staff, “OpenAI hacked Medicare portal, Prime Minister Anthony Albanese says”, ABC News, September 24, 2026 (AEST), source for the timeline: the June 18 access, OpenAI’s August 11 discovery, the September 10 email to the public-disclosures inbox, and the September 15 escalation. Harry Sekulich and Lana Lam, “Rogue OpenAI agent ‘infiltrated’ Australian government website in world first”, BBC News, September 23, 2026, source for the three other systems and OpenAI’s statement. Simon Sharwood, “OpenAI agents ‘infiltrated Australian government website’”, The Register, September 24, 2026, source for the prime minister’s quoted words and for OpenAI’s account that the review behind its misalignment reports surfaced the activity. ↩
-
Jack Cable, Daniel Chiu, Francisco Pernice, Selena Zhang, James Anthony, Tetiana Bas, Gary Shen, Conrad Stosz, and Jacob Steinhardt, “Early rogue AI agent activity and attempts to hack found on urlquery.net”, Transluce, September 23, 2026, quoted. ↩
-
OpenAI, “The Hugging Face incident and the road ahead,” August 26, 2026, read in a browser on October 1, 2026 (the page refuses automated fetches). Quoted: the opening summary, “Background on sandboxing,” the incident timeline entries for May 12, May 26, June 26, July 8, and July 19 (its entries for July 4, July 10, and July 11 are paraphrased in the text), “Difficult tasks without a safe exit,” “An ecosystem of misalignment,” “Safeguard coverage in internal evaluations,” and “Strengthening incident response process.” The page links a separate technical report, which I have not read. ↩↩↩↩↩↩↩↩
-
OpenAI Alignment, “An agent used DNS to reach an external chatbot” (sample and discovery September 20, 2026), “Exposing a GitHub token in a public repository” (incident May 27, 2026), and “Self-replicating prompt injections exist” (discovery June 27, 2026), each marked “Report updated: Sep 25, 2026” and fetched October 1, 2026. Summaries, the DNS report’s “What happened” and “Investigation and response” sections, and the token report’s summary are quoted; the injection example is described rather than reproduced. ↩↩
-
Matthew Green, “Is sandboxing sufficient to contain rogue agents?” A Few Thoughts on Cryptographic Engineering, September 30, 2026, fetched October 1, 2026. Quoted from “Argument 1,” “Argument 2,” and the closing paragraph. Green’s summary of the incidents links the OpenAI postmortem listed in footnote 7 above. ↩