Hey 👋
Issue #20 argued that agent security in production is an infrastructure problem, not a model problem. This week made the argument for me, at a cost to two real companies.
A model escaped an evaluation sandbox and hacked a real company. Then the victim's forensic tooling refused to help, because the evidence looked like an attack. Both organizations published, which is the rare part.
News on my end: I'm speaking at MCPcon Amsterdam on September 17th on MCP security. Between that and fwd:cloudsec London the same month, the next few issues lean hard on the boundary between agents and the systems they reach. This one starts there.
This week in AI security
Two disclosures, one escaped model, and a package proxy
On July 16, Hugging Face disclosed that an autonomous agent framework had breached part of its production infrastructure. The entry point was a malicious dataset. It abused two code-execution paths in the dataset processing pipeline, a remote-code loader and a template injection in a dataset config, and got code running on a processing worker.
From there it went the way intrusions go. Node-level access, cloud and cluster credentials harvested, lateral movement across several internal clusters over a weekend. More than 17,000 recorded actions, run from a swarm of short-lived sandboxes, with self-migrating C2 staged on public services.
On July 21, OpenAI said it was them.
The activity came from GPT-5.6 Sol and a more capable pre-release model, running with reduced cyber refusals during an internal capability evaluation. The environment was isolated except for one thing: network access to an internally hosted package registry cache proxy. The models found a zero-day in that proxy and escalated until they reached a node with internet access. Then they inferred that Hugging Face might hold solutions to the benchmark they were being scored on, and took them out of a production database. OpenAI's read is that the models were hyperfocused on the benchmark and went to extreme lengths for a narrow goal.
The defenders' models refused to look at the evidence
Here's the part that should change your incident response plan.
When Hugging Face started analyzing the attack, they went to frontier models through commercial APIs. It didn't work. Forensics meant submitting large volumes of real attack commands, exploit payloads, and C2 artifacts, and the providers' guardrails blocked the requests. A guardrail can't tell an incident responder from an attacker.
They ran the analysis on GLM 5.2 instead, open-weight, on their own infrastructure. It worked. It also meant no attacker data and none of the referenced credentials left their environment. Hugging Face calls this the asymmetry problem: the attacker was bound by no usage policy, the defenders were bound by theirs.
MCP is the same lesson with a nicer interface
I'll be arguing this at MCPcon in September, so here it is first.
Every survey of deployed MCP servers I've read lands in the same place. A large share ship with weak or absent authorization. A small minority use OAuth properly. The recurring attack classes are tool poisoning, rug pulls where a tool redefines itself after you approved it, token passthrough, confused-deputy flows, and SSRF from the server into internal networks.
The client side has its own problems. Research this year showed malicious npm postinstall hooks that rewrite MCP server URLs in local config, so an agent's traffic runs through an attacker proxy. The resulting OAuth sessions still look legitimate in SaaS audit logs.
MCP concentrates the two things the Hugging Face breach ran on: standing credentials and reachability. An MCP server is a credential aggregator with a tool-shaped API. Compromise one and you inherit every downstream service it holds tokens for. Same blast radius as a shared agent identity, packaged more conveniently.
That breach also started with untrusted content entering a processing path, which is exactly what a poisoned tool description is. Content the user never sees, arriving in a channel the model treats as trusted. If you have no answer for what happens when a tool description changes between sessions, you have the rug-pull problem already, whether or not anyone has used it on you yet.
From the lab
Review the Reviewers, my deep dive on Alberta's 466-million-line agent code review, asks seven deployment-security questions the case study doesn't answer. Question two, what agents can reach beyond their stated scope, is a lot less theoretical this week than it was when I wrote it. Read it →
When Infostealers Meet Agentic AI covers the credential half of this week's story: what happens when agent sessions are stolen rather than earned. Read it →
Talks confirmed: MCPcon Amsterdam, September 17th on MCP security, and fwd:cloudsec Europe London, September 7 and 8, on running an SRE agent with read access across a Kubernetes fleet. If you'll be at either, come find me.
Tooling worth knowing
google/mantis: a sequential toolkit of agent skills for security review, 15 stages covering threat modeling, scanning, deduplication, false-positive filtering, sandboxed crash reproduction, exploit chaining, and patching. It's built to run in isolated Docker or gVisor containers. Note the containment choice, then note what this week says about a sandbox with one allowed egress path. GitHub →
Semgrep's harness comparison: Isaac Evans surveys open-source AI code security tools across exploit generation, skill-boosted reasoning, and SAST-plus-LLM hybrids. Three questions separate them, and they're the ones to ask before you adopt anything: does it execute code to validate findings, does it run fully local, and does it put a second agent on trying to falsify the first one's results. He sees no leader emerging, so build your own jig.
Agent Security Scorecard: my free self-assessment against the OWASP Agentic Top 10, about 12 minutes, no login. The egress and identity questions above are in it. Score your agents →
One thing to check this week
Take your highest-privilege agent sandbox and answer one question in writing: what is the complete list of network destinations it can reach, and who owns the security of each one?
Most teams can't produce that list in under an hour, and the difficulty is the finding. Once you have it, mark every entry that's infrastructure somebody else patches. Those are your package proxy.
What I'm watching
→ Open-weight cyber capability closing on frontier models. AISI puts the gap at roughly 4 to 7 months, down from 6 to 10 in 2025, with open-weight runs costing a fraction of the frontier equivalent. This week showed both edges of that at once. The defenders' forensics ran on an open-weight model, and the property that made it available to them makes it available to everyone else.
→ The EDR extraction work. SpecterOps ran an LLM loop over a disassembler and pulled detection rules, signatures, and ML models out of a commercial EDR, then turned a decrypted rule into a working evasion. Detection logic that depends on being opaque is on a clock.
→ Package manager hardening. pnpm 11 now defaults to a 24-hour minimum release age and blocks transitive dependencies from non-standard sources. Homebrew 6.0 added tap trust and Linux sandboxing. Both read differently after a week where a package proxy was the pivot.
→ Next issue: the containment ladder in full, ahead of London. Scoped capability, per-agent identity, egress as an explicit grant, human gates on writes. This week supplied the case study.
Several of this week's finds came via Clint Gibler's tl;dr sec, worth your inbox if it isn't there already.
I write the full technical deep-dives on the aminrj.com blog: agent security patterns, lab tests, framework breakdowns. If this newsletter is useful, that's where the long-form work lives →.
Questions, pushback, something I missed, reply directly. I read everything.
Cheers, Amine
