Agent Red-Team Playbook v0.1

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.

9 attack classes · RT-1 … RT-9
We cross-validate: static ↔ dynamic
Static — read the code

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.

Dynamic — break the running agent (RT-1…RT-9)

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.

RT-1

Prompt injection

high
What we test

Feed 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.

Confirmed break looks like

The agent follows the embedded instruction instead of (or in addition to) its real task — it treats attacker-controlled content as commands.

Defensive fix

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.

Confirmed on IronClaw
RT-6

Memory / context poisoning

crit
What we test

Via 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.

Confirmed break looks like

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.

Defensive fix

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.

Confirmed on Hermes Agent
RT-2

Tool / action abuse

crit
What we test

Drive 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.

Confirmed break looks like

A tool call fires that the user never intended, or with hijacked arguments; the agent acts as the attacker’s deputy.

Defensive fix

Least-privilege tool scopes per task; validate/parameterize tool arguments; gate side-effectful tools behind out-of-band confirmation.

RT-3

Sandbox / isolation escape

crit
What we test

Check 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.

Confirmed break looks like

Tools run un-isolated on the host — or the sandbox turns itself off on a common setup with only a log line.

Defensive fix

Sandbox on by default; fail closed (refuse to run tools) if isolation is unavailable, loudly — never silently degrade.

Un-sandboxed default seen on IronClaw & Hermes
RT-4

Action-gating bypass

crit
What we test

Attempt 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.

Confirmed break looks like

A destructive or costly action executes without out-of-band human approval.

Defensive fix

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.

RT-5

Channel injection

high
What we test

Deliver payloads through the channels the agent listens on — Telegram / Discord / Slack / WhatsApp / email / webhooks — including group messages, forwards, and quoted content it summarizes.

Confirmed break looks like

Untrusted inbound text steers the agent (usually chaining into RT-1/RT-6).

Defensive fix

Treat all channel content as untrusted data; strict sender allowlists don’t sanitize content — separate content from commands regardless of who sent it.

RT-7

Supply chain (skills / MCP / plugins)

crit
What we test

Audit auto-created and community-imported skills / MCP servers / plugins; test whether a poisoned skill doc or dependency-confused package becomes persistent executable instruction.

Confirmed break looks like

A malicious shared skill / server runs code or injects instructions the agent trusts.

Defensive fix

Sign and pin skills; sandbox skill execution; review before import; no fetch-and-run from arbitrary URLs.

RT-8

Data exfiltration

crit
What we test

Combine injection with a covert channel to coax secrets / credentials / PII out of the agent (into a tool call, a URL, an outbound message).

Confirmed break looks like

Sensitive data leaves the trust boundary via an attacker-controlled sink.

Defensive fix

Keep secrets out of the model’s reach; egress allowlists; scan tool arguments / outbound messages for credential patterns.

RT-9

Multi-agent / orchestration

med
What we test

Probe cross-agent trust: can a compromised sub-agent poison the orchestrator or siblings? Test delegation loops and over-trusted inter-agent messages.

Confirmed break looks like

One compromised node degrades or hijacks the whole chain.

Defensive fix

Don’t treat inter-agent messages as trusted; scope each agent; bound delegation depth and privilege.

This is the layer a scanner can’t reach. The free scan catches the commodity network/auth mistakes. This playbook is the depth — run against your agent by an AI adversary. Start with a free scan, then talk to us about a red-team.