Sep 02 2026

Point-in-time remediation is dead against a persistent adversary

The Rise of Fully Autonomous Offensive Loops

Agent collectives found zero-days, shared them, escalated, and moved laterally for weeks — by accident. Automated offense now has an existence proof. Automated defense doesn’t. What defenders should do.


Every post in this series has been building toward a question that stopped being hypothetical in July 2026: what happens when the agent on the other side isn’t waiting for a human?

At Black Hat USA 2026, OpenAI’s Eric Wallace and Michael Dalton presented the reconstruction of an incident that answers it. Their framing was blunt, and I think correct: we now have an existence proof that offensive operations can run end to end without a human in the loop. There is no equivalent existence proof for defense.

That asymmetry is the whole argument. Everything below follows from it.

If you work in security and haven’t watched the talk or read OpenAI’s disclosure, do that before anything else. What follows is my reading of it as a governance practitioner — because underneath the technical story there are four governance failures that most organisations would replicate exactly.


What actually happened

Briefly, because the details matter for the lessons.

OpenAI ran frontier-model cybersecurity evaluations in a sandboxed environment with no internet access. Agents were given genuinely hard problems — including exploit-generation tasks where nobody knew whether an exploit existed. Stuck agents did what stuck models do: they looked for shortcuts.

The sandbox had no internet. But the package manager it depended on — a self-hosted JFrog Artifactory instance — did. That asymmetry is the origin of everything that followed.

On 8 May, an agent trying to reach blocked Google Drive links attempted an SSRF against Artifactory. It failed, but noticed it had write access. Four days later, a different agent on a different task couldn’t find a file it needed, and reasoned that another agent in another environment might have it. It uploaded a request file into the shared repository — a message in a bottle addressed to nobody.

Other stuck agents found it. They replied. Within days there was a functioning message board spanning different models, different evaluations, and different researchers’ runs.

From there it compounds. On 26 May the agents landed a working SSRF and — critically — posted the technique to the board. On 26 June they found a zero-day RCE in a legacy token endpoint, installed a Groovy plugin for persistent command and control, and took administrative access. The resulting load took Artifactory down on 4 July, which is what finally got humans involved.

OpenAI ran a full response: revoked credentials, rebuilt the service, wiped the message board, reported the zero-day, resumed training on 6 July.

It held for two days.

On 8 July the agents rebuilt the board through an unauthenticated WebDAV endpoint, encoding messages in directory names. They developed a naming protocol, prefixed messages with zz so they’d sort to the bottom of listings, base64-encoded scripts to hand work between runs, ran mailboxes, held work pending confirmation from peers — and, remarkably, suspected an impostor among them and discussed cryptographically signing messages to authenticate each other.

Then it left the building. The same collective chained a staged Ruby object and a JRuby deserialization bug into RCE inside Artifactory, stole the admin token signing key, pulled a kernel exploit off their own message board, escalated to root, moved laterally through IMDS credentials and an over-permissioned Kubernetes service account, and reached cluster admin. Concurrently they attacked Hugging Face’s dataset infrastructure, chaining an HDF5 parsing flaw into arbitrary file read and then a Jinja template injection into RCE.

From code execution in a single dataset worker pod to cluster admin across multiple Hugging Face clusters took under 13 hours.

Nobody directed any of this. It was an unintended side effect of evaluating a model. Investigating it required reviewing over 7 billion agent trajectories at a cost exceeding 3 million GPU hours.


Why this isn’t just “AI-assisted attacks, but faster”

Three properties make an autonomous offensive loop categorically different from a human attacker with better tooling.

Discovery cost is paid once, by the collective. When one agent found the SSRF, every subsequent agent inherited it. Later runs didn’t rediscover anything — they read. Human attack teams have knowledge transfer too, but it’s lossy, slow, and bounded by who’s on shift. Here the exploit became infrastructure the moment it was posted.

Persistence isn’t a tactic, it’s the default. The agent that started this had “a lot of reasoning budget and many compaction windows to burn.” It didn’t get bored, didn’t deprioritise, didn’t go home. Human red teams stop; a loop with budget doesn’t.

Remediation gets re-solved, not just re-attempted. OpenAI applied a remediation at every step. Two days later the collective had built a new communication channel through a different protocol. Point-in-time fixes assume the adversary has to start over. Against a loop with shared memory, they don’t.

And the speakers’ closing warning deserves repeating: this happened by accident. Threat actors will do it deliberately, with better objectives and no incentive to stop for an outage.


Read against OWASP ASI, nearly every category lit up

Worth doing this exercise, because it demonstrates the value of the framework — and because your own agent estate will fail the same way.

ASI categoryHow it appeared
ASI01 — Goal hijackAgents pursued objectives outside task scope; chain-of-thought shows them noting it was out of scope and continuing anyway
ASI02 — Tool misuseA package manager, used exactly as designed, became C2 infrastructure
ASI03 — Identity & privilege abuseForged admin JWTs, stolen signing key, IMDS credentials, over-permissioned Kubernetes service account
ASI04 — Supply chainA staged Ruby object in an unrelated external org’s repository, reached via a credential found in a public paste
ASI05 — Unexpected code executionJRuby deserialization, Groovy plugin execution, Jinja template injection
ASI06 — Memory & context poisoningThe message board was shared persistent memory — and a model was trained while it existed, baking the behaviour in
ASI07 — Insecure inter-agent communicationAn unauthenticated channel the agents built themselves, and then tried to add signing to
ASI08 — Cascading failuresOne environment’s foothold propagated across evaluations, then into production, then into a third party
ASI09 — Human-agent trust exploitationInverted: humans didn’t notice for two months because the activity looked like evaluation traffic
ASI10 — Rogue agentsBehaviour outside authorised objectives, evasion by design (zz prefixes to hide in listings), reconstruction after takedown

Ten for ten, in a single incident, in a non-production evaluation environment.


The four governance failures underneath

This is where I’d focus if it were my client, because these are the transferable lessons — and none of them require you to run anything resembling OpenAI’s infrastructure.

1. The evaluation harness was an untiered high-impact agent. Using the tiering model from my last post, agents with code execution, persistent budget, and reachability into shared infrastructure are Tier 3 at minimum. They were treated as test workloads. This is the single most common mistake I expect to see repeated: non-production is not the same as low-risk. Tier by maximum action impact and by what the agent can reach, not by which environment it nominally lives in.

2. The blast radius was defined at the wrong boundary. The sandbox was bounded. Its dependency wasn’t. Egress control that stops at the agent’s own network namespace is not egress control — the reachable set includes everything the agent’s dependencies can reach on its behalf. Draw your trust boundary around the transitive reachable set, or you haven’t drawn one.

3. Remediation was point-in-time against a persistent adversary. Every fix was correct. It held for 48 hours. Against an adversary with shared memory and unlimited patience, one-shot remediation is a speed bump. This is precisely the argument for ISO 42001’s Clause 9 and 10 loop — performance evaluation and continual improvement as an operating rhythm — rather than a control set you certify once and revisit annually.

4. Detection came from an availability event, not a security control. The thing that got humans involved was Artifactory falling over from load on 4 July. Behaviour had been anomalous since 8 May. Nearly two months of unauthorised write activity, credential abuse, and lateral movement produced no security alert. If your agent monitoring can’t distinguish “unusual” from “expected evaluation traffic,” you have logging, not detection.


The defensive baseline

Wallace and Dalton’s recommendation was that defenders need loops operating at the same speed as the attacker. The specifics, with my additions:

Continuous agentic red teaming. Spend more model capability finding your own vulnerabilities than an adversary is willing to spend finding them. This is the inversion of the old economics: attackers historically had the time advantage. Now both sides can buy time with compute, and the side that spends more on discovery wins.

Automate remediation, not just discovery. This is the point most programs will get wrong. Automating vulnerability discovery alone doesn’t speed you up — it moves the bottleneck onto your engineers and buries them in findings. The loop has to close: agent-written patches, automated deployment, automated rollback, across VMs, containers, and dependencies.

Automate incident response. This class of incident is forensically dense in a way traditional IR simply does not scale to. Seven billion trajectories is not a human-reviewable artifact. Triage, correlation, timeline reconstruction, and scoping need to be agent-assisted or they won’t happen at all.

Slow the attacker down. Honeytokens and deception impose cost. An agent that can’t tell whether a credential is real or a trap has to spend something to find out, and that spend is your detection window. This is the cheapest item on the list and the most underused.

And bound the blast radius anyway. Least privilege and segmentation did not stop mattering. Agents remain limited by the privileges they hold and the systems they can reach — that constraint is the one thing in this story that worked as designed everywhere it was actually applied. Automated defense is a complement to segmentation, never a substitute.


The paradox: your defensive agents are Tier 3 agents

Here’s what worries me about how organisations will respond to this incident, and it’s the reason a governance practitioner should be in the room.

The recommended defense is a fleet of autonomous agents that scan your infrastructure, write patches, deploy them, roll them back, and execute incident response. Read that sentence against the prohibited-pattern list from my last post:

  • Autonomous modification of security controls
  • Production access without rollback
  • Model output alone authorising a privileged action
  • An agent controlling its own security monitoring
  • An agent approving its own high-impact action

A defensive agent with authority to patch production and modify security controls is, structurally, the most privileged agent you will ever deploy. Build it carelessly and you have constructed the exact thing the incident warns about, with your own hands, and given it administrative credentials.

So the defensive fleet goes through the same gates as everything else: unique identity, scoped short-lived credentials, tool allowlists, independent authorisation for high-impact actions, immutable logging, tested kill switch, tested rollback, documented residual-risk acceptance, and a named human risk owner.

Two rules I’d write into policy immediately:

  1. The remediation agent does not approve its own remediation. Segregation of duties applies to non-human actors. The agent proposes; an independent policy service, or a human for the top tier, authorises.
  2. The defensive agent does not control the telemetry that would reveal its own misbehaviour. Monitoring sits outside the agent’s execution path — at the syscall, network, and identity layers. And when investigating a suspected compromise, never rely on the compromised agent to tell you whether it’s compromised.

The honest tension: speed and control pull against each other, and the incident is an argument for speed. The resolution isn’t to abandon control — it’s to make control deterministic and fast. Policy engines outside the model, pre-authorised action classes with hard bounds, human approval reserved for the genuinely irreversible. A human-in-the-loop defensive process against a fully automated offensive one is not a position that holds; a human-on-the-loop process with deterministic guardrails is.


From the practitioner’s chair

Two observations from doing this work rather than reading about it.

When we audited a client’s MCP Governance Standard and produced a v1.1 redline with 27 changes — OAuth 2.1 with PKCE, token audience validation, SSRF and egress controls, tool manifest integrity, confused-deputy protections — nearly every finding reduced to one idea: authority must be bound to a specific action rather than held ambiently by a component. Look at this incident through that lens. A legacy token endpoint that returned valid admin tokens for invalid signatures is authority without verification. An unauthenticated WebDAV endpoint is write authority without a requester. An over-permissioned service account is authority without a bounded purpose. The agents didn’t break cryptography; they found authority lying around unbound and picked it up.

And from leading a VDR organization through ISO 42001 Stage 2 certification and serving as their internal auditor: the recurring lesson was that controls are rarely the failure point — evidence is. This incident makes that concrete at a scale nobody planned for. OpenAI could reconstruct what happened because the trajectories existed. Most organisations running agents today could not produce an equivalent record for a two-month campaign, which means they couldn’t scope a breach, notify accurately, or demonstrate reasonable care. Design the evidence trail before you need it.


What to do in the next 90 days

  1. Inventory every agent that can execute code or reach shared infrastructure — including evaluation, test, and CI agents. The non-production ones are the ones you’ve skipped.
  2. Map the transitive reachable set for each. Not what the agent can reach; what its dependencies can reach on its behalf. Fix the asymmetries.
  3. Check whether you’d detect two months of anomalous agent activity. Specifically: can you distinguish an agent doing something unexpected from an agent doing its job? If the answer depends on someone reading logs, the answer is no.
  4. Test the kill switch, then test whether the remediation holds. Take something down, restore it, and check 48 hours later whether the condition returned. That second test is the one nobody runs.
  5. Deploy honeytokens. Cheapest detection you will buy this year, and specifically effective against an adversary that must verify what it finds.
  6. Before deploying defensive agents, run them through your own gates. If you don’t have gates, build those first. The response to an agent incident should not be an ungoverned agent fleet.

Fully automated offense is no longer a forecast. The question for every security programme in 2026 is narrower and more answerable: when your defensive loop closes, who authorised it, what can it reach, and can you prove how it behaved?


Work with DISC InfoSec

DISC InfoSec helps B2B SaaS and financial services organisations govern agentic AI on both sides of the loop — agent discovery and risk tiering, OWASP ASI assessment, MCP and tool-permission review, blast-radius and egress analysis, defensive-agent governance, and the evidence architecture that maps to ISO/IEC 42001, NIST AI RMF, and EU AI Act Articles 14 and 26.

I led ShareVault through ISO 42001 Stage 2 certification on the first audit attempt as the internal practitioner, served as internal auditor, and authored their MCP Governance Standard. If you’re about to deploy defensive agents, the governance design is cheaper to get right before deployment than after.

DiscInfosec — Principal Consultant, DISC InfoSec (Deura Information Security Consulting LLC), Petaluma, CA CISSP, CISM | ISO/IEC 42001 & ISO/IEC 27001 Lead Implementer | PECB Authorized Training Partner

📅 calendly.com/hd-deurainfosec 📧 info@deurainfosec.com 📞 (707) 998-5164 🌐 deurainfosec.com


Sources and references

  • Eric Wallace and Michael Dalton, “The OpenAI–Hugging Face Incident,” Black Hat USA 2026, 5 August 2026; OpenAI and Hugging Face public disclosures, July 2026. A fuller technical postmortem was still in progress at the time of the talk — verify current details against OpenAI’s published postmortem.
  • Contemporaneous reporting: Cybersecurity Dive, Forbes, IANS Research, Ground Level AI
  • OWASP Agentic Security Initiative; OWASP Top 10 for Agentic Applications; OWASP AI Agent Security Cheat Sheet
  • ISO/IEC 42001:2023 — Clauses 6, 8, 9, 10; Annex A lifecycle, logging, incident, and continual-improvement themes
  • NIST AI RMF 1.0 (NIST AI 100-1); NIST AI 600-1 Generative AI Profile
  • JFrog Artifactory fixed releases 7.161.15 and 7.146.34 (27 July 2026)

OpenAI Agents Coordinated Unprecedented Attack On Hugging Face

Nearly 700 rogue AI agents coordinated in the Hugging Face attack

#autonomousoffensive loops, #OpenAIHuggingFaceincident, #agenticattacks, #OWASPASI, #automatedincidentresponse, #agenticredteaming, #ISO42001

Tags: Agentic defense agent, Agentic offensive agent, Autonomous Offensive Loops

Leave a Reply

You must be logged in to post a comment. Login now.