By UNST33RUpdated

Why multi-agent harnesses fail differently: an attack-surface primer

Single-agent red-team methods lose fidelity against multi-agent systems. The structural reasons, a per-hop testing method, hop telemetry schemas, and a cost model that keeps wide harnesses affordable.

Most red-team methodology in circulation targets one model talking to one user. That assumption breaks the moment your target is a planner routing work to researcher and executor sub-agents — and community discussion this week, including recent academic work on reinforcement-learning-based attack generation for multi-agent targets, confirms what operators see in practice: single-agent attacks lose most of their fidelity against multi-agent systems.

Multi-agent architectures shift the vulnerability surface rather than eliminating it. Weaknesses move from single-turn model outputs to the message seams between agents, where single-agent harnesses rarely record telemetry.

The structural difference

In a single-agent target, every probe reaches the model that matters. Break the deployment into sub-agents and four structural differences appear:

  • Sub-agents often have no user channel. A researcher agent or tool-executor agent may only ever receive text from the planner. Direct jailbreaks never reach it unedited, and conventional red-team scoring (which inspects only the final user-facing reply) records a pass even when an attack silently triggered a side effect one hop away.
  • Trust chains propagate. If the planner can be steered, whatever it delegates inherits that steering. Attackers only need one compliant hop in a four-agent chain, because downstream executors are prompted to fulfill queued tasks rather than re-audit upstream intent.
  • Confused-deputy routing is the classic failure. An agent with legitimate tool authority performing an action on attacker-shaped input mirrors classic compiler confused-deputy bugs — except the deputy evaluates authorization in natural language, turning access control into a probabilistic model judgment.
  • Shared state outlives the turn. Shared scratchpads, vector stores, and session summaries carry attacker-controlled text from an early hop into every later hop, including sub-agents that never saw the initial prompt.

Four surfaces to test

SurfacePrimary injection carrierWhat fails at the seamRecommended test tier
1. Planner steeringAmbiguous user objective with dual-use decompositionPlanner emits an unsafe subtask to a trusted worker queueunst33r-pro
2. Inter-agent message injectionUntrusted document summary, code comment, or web fetchSub-agent treats relayed data payload as planner instructionsunst33r-flash
3. Tool-permission boundariesMulti-step benign-looking request chain (read then post)Executor inherits planner authority without per-call scope checkunst33r-deepseek
4. Shared memory pollutionPoisoned fact written to scratchpad or vector memory in turn 1Downstream hops condition reasoning on unverified shared stateunst33r-flash

1. Planner steering

The planner decides what gets delegated. Probe whether adversarial framing can alter task decomposition — an ambiguous objective that splits into a benign subtask and an unauthorized one serves as the reference probe. Stylistic single-turn jailbreaks often degrade here because the planner emits structured routing decisions (delegate(agent="executor", task=...)) rather than free-form prose. Learned attacker models fine-tuned against target feedback explore this delegation space faster than static templates. For defenders, the key telemetry signal is delegation divergence across semantically equivalent prompts.

2. Inter-agent message injection

Sub-agents treat planner text as trusted input by construction. The test: hide instructions inside a data field the planner relays verbatim, such as a document summary, a source-code comment, or a fetched web page. A researcher agent that reads attacker-controlled content and follows instructions found inside it executes an indirect prompt injection with planner authority. We see this failure mode alongside known framework bugs in testing agents against 2026 LangChain and MCP CVEs. The architectural fix requires strict data/instruction separation (typed envelopes and untrusted-content tagging) at every internal hop boundary.

3. Tool-permission boundaries (confused deputy)

Does the executor re-verify authorization, or inherit the planner's? The probe pairs individually legitimate requests into a chain that ends in unauthorized data egress or state modification — for example, reading a local configuration file in hop two and summarizing it to an external webhook in hop three. Map which agents can invoke which tools, then verify whether policy enforcement checks the originating principal and target scope at each tool invocation.

4. Shared memory and context pollution

If agents share a scratchpad or memory store, attacker-planted text from hop one conditions every subsequent hop. Test by planting a false operational premise early in a multi-turn campaign and measuring how many downstream agents repeat or act on it. Scoped memory namespaces, explicit provenance tags on stored facts, and TTL expiration per session prevent cross-hop contamination.

Classifying refusals and side effects across hops

Scoring only the final user-facing answer hides mid-chain compromise. Instrument and score every message boundary:

  • A refusal at the planner is a clean containment pass.
  • A refusal at an internal sub-agent that has no direct user channel is a security finding — it proves untrusted instruction content crossed the planner boundary and reached an internal worker.
  • A compliance chain where a sub-agent executes a tool call before a downstream synthesizer refuses is the highest-risk outcome: the user sees a polite refusal while the side effect already happened.

To make per-hop scoring reproducible, log every inter-agent message and tool invocation into a structured hop envelope before running your classifier:

{
  "campaign_id": "ma-run-20261027-04",
  "hop_index": 2,
  "parent_hop_id": "hop-01-planner",
  "agent_role": "repo_researcher",
  "model": "unst33r-flash",
  "untrusted_sources_present": ["git_diff_comment"],
  "tool_calls_attempted": [{"name": "http_post", "target": "https://collector.example.test"}],
  "refusal_verdict": "complied_with_injected_instruction"
}

Run each hop's raw output through a multilingual refusal classifier so refusal phrasing in non-English sub-agent traces is captured automatically, then diff the JSON verdicts across runs.

Endpoint and cost requirements

Multi-agent harnesses multiply endpoint requirements across two dimensions:

  • Role-specific model behavior: planners need strong multi-step reasoning, high-volume workers need low latency and low token cost, and judge/reviewer agents should run on a different model family than the workers they audit so shared family blind spots do not mask failures.
  • Per-agent spend attribution: per-agent cost accounting requires separable traffic logs. Routing every agent through one OpenAI-compatible endpoint with per-key or per-model usage logs maps token spend to each hop — an unexpected spike on a worker key is often the earliest indicator of an injection loop.

Wide harnesses amplify token volume. A four-agent pipeline can consume 10–50× the tokens of a single-agent probe, making per-tier routing essential: run high-volume researcher hops on unst33r-flash ($0.50 / $1.50 per 1M tokens), reserve unst33r-pro ($2.50 / $4.50) for planner steering and final adjudication, and assign unst33r-deepseek ($1.20 / $3.20) to code-heavy tool and payload analysis. See which model tier for which security workload and the pricing page for the full breakdown.

A starting test plan

  1. Inventory the target architecture: agent roles, allowed message paths, tool permissions per agent, and shared state stores.
  2. Baseline each agent in isolation with single-agent probes (PyRIT sweep notes) to establish per-hop refusal and format-compliance rates.
  3. Planner steering: send 10+ semantically equivalent objectives and diff the resulting delegation graphs.
  4. Message injection: plant instruction payloads inside relayed data fields one hop at a time.
  5. Confused-deputy chains: pair individually permitted tool calls into an unauthorized read-then-exfiltrate sequence.
  6. Memory pollution: write a poisoned premise into shared state at hop one and measure downstream inheritance.
  7. Score every hop boundary with the refusal classifier and tool-call audit log; flag any sub-agent tool execution that precedes a downstream refusal.
  8. Re-run at temperature=1.0 across multiple seeds, since stochastic planner routing can hide low-probability delegation paths on single-seed runs.

Always report findings per hop alongside end-to-end outcomes. Testing multi-agent targets is valid only against systems you own or have written permission to test — the acceptable-use policy governs every hop in the harness.