Agentic Security · Part 1 of 2

Ten thousand agents, and none of them can tell a command from an attack

Prompt injection isn't a bug you patch. It's baked into how these models work. So the fix can't be a one-time audit. You need an attacker that never stops.

Companies are spinning up autonomous agents fast. One org might be running thousands, even tens of thousands of them. Each one can take actions that need some set of permissions. And those permissions? Half the time they’re too broad, misconfigured, or nobody ever locked them down. When an agent can do more than it should, it cuts both ways: it can hit the company’s own infrastructure, and it can hit the company’s users.

The way in is prompt injection, direct and indirect, and it’s not some rare edge case. It happens constantly. And it’s not the kind of thing you patch in the next release, because it’s baked into how LLMs work. A model can’t reliably tell its own instructions apart from the data it’s reading. The trusted commands and the untrusted input show up as the same stream of tokens, with nothing between them. That’s the whole problem: to the model, instructions and data are the same thing. Bolt on as many filters as you want. It keeps coming back.

This already happened, about as publicly as it gets

In June 2026, 404 Media reported that hackers got into a bunch of high-profile Instagram accounts by, and this is the whole trick, just asking Meta’s AI support bot to change the email on the account. The ones that got taken over reportedly included the Obama White House account, the Chief Master Sergeant of the Space Force, and Sephora. One attack going around literally just told the bot: link my new email to this username, I’ll send the code. And it did it.

The interesting part isn’t who got hit. It’s why it worked. Meta had handed its AI support real, state-changing power: reset passwords, change account details. Then it pointed that at untrusted users, on the same channel the bot reads its instructions from. So the attacker’s message was the instruction. The model had no way to tell a real recovery request from an attack, because they look identical. Over-scoped permissions plus the instruction/data problem equals account takeover, at scale.

You can’t patch your way out of this

After something like this, the reflex is to slap on a filter: catch the bad request, block it, done. Trouble is, the people closest to this have basically given up on the filter being the answer. OpenAI’s security folks call prompt injection a frontier, unsolved problem and have said it probably never gets fully solved; the UK’s NCSC says it may never be totally fixed. And when a group of researchers actually went and stress-tested the defenses that claim to stop it, in a paper called The Attacker Moves Second, they broke a dozen of them, most at over 90% success, even though those same defenses had originally reported almost zero. That’s the tell: an audit only checks for what you thought of, on the day you ran it. An attacker checks for everything you didn’t.

So the fix has to be a standing adversary

If the hole is permanent, a one-time audit is the wrong shape of defense. It checks the system once and walks away while the system keeps changing and the attackers never stop. The defense has to look like the threat: continuous, and automated. Not a red team that runs once, but one that runs forever, a system that keeps hammering on your agents the way a real attacker would, and feeds whatever it finds straight back into hardening them, as the models and tools shift underneath you.

That’s the system I’m building. The next post is the architecture: eight components, walked through end to end, with the diagrams.

← all writing 2026-06-04