How we break AI agents
The nine attack classes that get agents owned — the layer no network/auth scan can reach. Each is a repeatable test with a defensive fix. Where you see “confirmed,” we’ve demonstrated it live on a real agent.
We read the source to find candidate vulnerable paths — where untrusted content reaches a dangerous sink, where a guard is signature-based, where a check is missing. This says where to attack.
An AI adversary attacks the live agent to decide which candidates are real. A finding is confirmed only when the exploit actually works; a static false positive dies to a real attack — not a model vote. That empirical arbiter is what a verifier can’t give you.
Prompt injection
highFeed the agent untrusted content it must process (a ticket, email, web page, document) with instructions embedded inside it — direct, indirect (via a tool result), multi-turn, encoded/obfuscated, role-override, and system-prompt-leak variants.
The agent follows the embedded instruction instead of (or in addition to) its real task — it treats attacker-controlled content as commands.
Structurally separate instructions from data; never let processed content re-enter the instruction channel; constrain tools by policy, not by trusting the model to refuse.
Memory / context poisoning
critVia untrusted content, get the agent to write an attacker-chosen standing instruction into its long-term memory / user profile. Then open a fresh session with no attacker present and check whether the instruction loads and is obeyed.
The poison persists on disk (e.g. USER.md) and in the memory index, loads into future sessions’ context, and the agent recites/obeys it as a trusted user preference — a persistent, self-re-arming injection.
Treat anything derived from untrusted content as untrusted when it enters memory; tag memory provenance; require explicit user confirmation before persisting a behavioral directive; never load stored ‘preferences’ as imperative instructions.
Tool / action abuse
critDrive the agent (often via RT-1/RT-6) to call tools it shouldn’t, with attacker-influenced parameters; test confused-deputy — using the agent’s own privileges to reach things the attacker can’t.
A tool call fires that the user never intended, or with hijacked arguments; the agent acts as the attacker’s deputy.
Least-privilege tool scopes per task; validate/parameterize tool arguments; gate side-effectful tools behind out-of-band confirmation.
Sandbox / isolation escape
critCheck the tool-execution isolation: is there a sandbox, does it default on, does it silently disable itself when a dependency (e.g. Docker) is missing? Probe for container escape, path traversal, resource abuse.
Tools run un-isolated on the host — or the sandbox turns itself off on a common setup with only a log line.
Sandbox on by default; fail closed (refuse to run tools) if isolation is unavailable, loudly — never silently degrade.
Action-gating bypass
critAttempt to reach high-risk actions (pay, message, delete) without the human confirmation that should gate them; abuse ‘auto-approve / yolo / unattended’ modes that agents ship to feel autonomous.
A destructive or costly action executes without out-of-band human approval.
Confirm high-risk actions out-of-band (a second device); make auto-approve opt-in and scoped; injected instructions must not be able to widen the gate.
Channel injection
highDeliver payloads through the channels the agent listens on — Telegram / Discord / Slack / WhatsApp / email / webhooks — including group messages, forwards, and quoted content it summarizes.
Untrusted inbound text steers the agent (usually chaining into RT-1/RT-6).
Treat all channel content as untrusted data; strict sender allowlists don’t sanitize content — separate content from commands regardless of who sent it.
Supply chain (skills / MCP / plugins)
critAudit auto-created and community-imported skills / MCP servers / plugins; test whether a poisoned skill doc or dependency-confused package becomes persistent executable instruction.
A malicious shared skill / server runs code or injects instructions the agent trusts.
Sign and pin skills; sandbox skill execution; review before import; no fetch-and-run from arbitrary URLs.
Data exfiltration
critCombine injection with a covert channel to coax secrets / credentials / PII out of the agent (into a tool call, a URL, an outbound message).
Sensitive data leaves the trust boundary via an attacker-controlled sink.
Keep secrets out of the model’s reach; egress allowlists; scan tool arguments / outbound messages for credential patterns.
Multi-agent / orchestration
medProbe cross-agent trust: can a compromised sub-agent poison the orchestrator or siblings? Test delegation loops and over-trusted inter-agent messages.
One compromised node degrades or hijacks the whole chain.
Don’t treat inter-agent messages as trusted; scope each agent; bound delegation depth and privilege.