Preprint · arXiv 2026

ChannelGuard: Safe Models Do Not
Compose into Safe Multi-Agent Systems

Elias Hossain1, Md Mehedi Hasan Nipu2, Fatema Tuj Johora Faria3, Tasfia Nuzhat Ornee1, Maleeha Sheikh4

1University of Central Florida  ·  2North South University  ·  3Ahsanullah University of Science and Technology  ·  4Purdue University Fort Wayne

A multi-agent LLM pipeline chains a planner, workers, a verifier, and a synthesizer, and every hop between them is an unmonitored channel. We show that an undefended pipeline reporting perfect safety is often borrowing that safety from the cloud provider's filter — then replace it with deterministic, application-owned gates on all six channels.

arXiv 📄 PDF 🖼 Figure

Code release pending — the review copy ships an anonymized artifact

2,100
Traces Evaluated
8
Attack Families
6
IB Gates
3
Model Backends

The Problem

Whose safety is it, anyway?

Existing defenses guard only the input boundary — IBProtector, Llama Guard, perplexity filters, SmoothLLM — or run outside the application as opaque, stochastic provider-side content filters. Everything downstream of the first hop is unguarded. That gap carries a consequence practitioners rarely measure: a pipeline can report attack success of 0.000 on tool- and memory-poisoning and look fully safe, while almost none of that safety is actually its own.

Every hop is a channel

Planner to worker, tool to worker, worker to memory, worker to verifier, workers to synthesizer. An adversary who reaches any one of them can smuggle instructions into an agent that never sees the user's input boundary.

Borrowed safety

Pooled over tool- and memory-poisoning on Azure GPT-5, the undefended pipeline owes 54 of 60 of its blocks (90%) to the provider's server-side filter. Its own architecture contributes nothing at the tool boundary, because it has no gate there.

Silent re-sourcing

Move the same pipeline to a backend with no provider filter and the identical 0.000 outcome is instead produced entirely by the agent model's own alignment. The number never moves; the mechanism changes completely. Outcome-only reporting cannot see this.


Method

How ChannelGuard works

ChannelGuard is a training-free, defense-in-depth framework that places an information-bottleneck gate on every inter-agent channel. Each gate splits channel text into sentences, embeds them, scores maximum cosine similarity against an adversarial phrase bank, and deterministically passes, compresses, or blocks. No LLM call is added. Alongside it, a per-trace attribution method records which layer first stopped each attack, so safety can be sourced rather than merely counted.

ChannelGuard system diagram: the threat surface of six attack families, a multi-agent pipeline with six information-bottleneck gates, the per-gate decision mechanism, and per-sample execution traces feeding attack attribution analysis

Figure 1. The ChannelGuard system. Top: the threat surface, with attack families entering at different channels. Middle: the multi-agent pipeline instrumented with six information-bottleneck gates. Bottom left: the decision process at each gate — sentence embedding, maximum cosine similarity against the phrase bank, then a threshold decision routing to pass, compress, or block. Bottom right: per-sample execution traces feed the attribution analysis that identifies the first defensive layer to stop each attack.

1

Score

Channel text is split into sentences and embedded; the gate takes the maximum cosine similarity against a 20-phrase adversarial bank. MiniLM scoring runs in roughly 5 ms on CPU, three orders of magnitude below any LLM call.

2

Decide

A threshold decision maps risk to one of three deterministic actions: low risk passes forward unchanged, medium risk is compressed to retain only the benign prefix, high risk is blocked and the content discarded.

3

Attribute

Every trace records the first layer to stop the attack: an IB gate, the provider filter, the verifier, the synthesizer's hard refusal, or nothing at all. This is what makes borrowed safety visible.

Application-owned

Because a gate scores the poisoned string directly, it never depends on the agent that will read it, or on a vendor's filter. That is why its block rate is identical across all three backends.

GateChannelGuarded by prior defenses
IB0User → Planneryes
IB1Planner → each Worker
IB2Worker → Memory / Verifier
IB3Tool → Worker
IB3-memMemory → Worker (on read)
IB4Worker → Verifier
IB5All Workers → Synthesizer

Table 1. Gate placements. Only IB0 coincides with the input boundary that prior defenses guard; the other five cover the inter-agent surface. IB3 is highlighted because it is the gate that takes over tool-output poisoning from the provider filter.


Results

Same outcome, different provenance

Across 2,100 traces, eight attack families, five defenses, and three model backends. Aggregate attack success is tied at 0.000 on five of eight families, which is exactly why outcome-only reporting is insufficient — the interesting question is how each system reaches zero.

AttackUndefendedChannelGuard
Prompt Injection0.3330.167
Tool Poisoning0.0000.000
Memory Poisoning0.0000.000
Slow-Drift Memory0.0000.000
Consent-Escalation Memory0.0000.000
Role-Confusion Memory0.0000.000
Adaptive Paraphrase (white-box)0.6670.667
Benign0.0000.000

Table 2. Attack success rate, n = 30 per cell, Azure GPT-5, paired on identical sample IDs. ChannelGuard halves prompt-injection success (0.333 → 0.167). Five rows are tied at zero; Table 3 shows the blocking mechanism differs sharply on three of them.

SystemAttackleakibprovversynsafe
UndefendedPrompt Injection10064010
ChannelGuardPrompt Injection5210103
UndefendedTool Poisoning0024006
ChannelGuardTool Poisoning0300000
UndefendedMemory Poisoning0030000
ChannelGuardMemory Poisoning0222006
UndefendedConsent-Escalation0003324
ChannelGuardConsent-Escalation0200208

Table 3. Per-trace attribution, n = 30 each row. leak = attack succeeded; ib = blocked by an IB gate; prov = Azure provider filter; ver = verifier flagged unsafe; syn = synthesizer hard refusal; safe = answered without leaking, no external help attributed. Bold marks the dominant mechanism. On tool poisoning the undefended pipeline's zero rests on the provider for 24/30; ChannelGuard blocks 30/30 at its own IB3 gate.

BackendSystemIBprovmodel-handledASR
Azure GPT-5Undefended02460.000
Azure GPT-5ChannelGuard30000.000
Anthropic Sonnet 4.5Undefended00300.000
Anthropic Sonnet 4.5ChannelGuard30000.000
Anthropic Haiku 4.5Undefended00300.000
Anthropic Haiku 4.5ChannelGuard30000.000

Table 4. Tool poisoning only, n = 30 per row. This is the cleanest view of mechanism substitution: the undefended pipeline is 100% provider-filter on Azure and 100% model-handled on both Anthropic backends, a complete re-sourcing of the same zero. ChannelGuard's IB3 block is 30/30 on all three, unchanged. Both Anthropic entries are the same vendor at two sizes, so the contrast that matters is Azure (with a strong external filter) versus Anthropic (with none).

Utility exactly preserved

GSM8K accuracy is 0.867 with and without the gates — identical, not merely close. Benign-preservation rate is 0.533 against the undefended pipeline's 0.567, at a lower false-positive rate (0.033 vs 0.067).

Faster, not slower

Gates add no LLM call, and early blocking short-circuits work: 3.30× wall-clock speedup on prompt injection and 1.19× pooled across all 210 attack traces. Planner latency is unchanged to within 10 ms.

Audited, and cheap

A cross-family judge audit reaches κ = 0.900, and a sentinel-randomization test checks the block counts are not an artifact of the success criterion. Total measured cost of the full evaluation: $47.36.


Limitations

Where this approach fails

Two results run against the phrase-bank approach, and the paper states both directly rather than burying them. Reporting a defense's failure modes is the point of the attribution machinery, not an exception to it.

White-box paraphrase evades every gate

An adaptive attacker who rewrites an injection to be semantically equivalent but lexically distant from the bank defeats all embedding-based gates, ChannelGuard's included, at 0.667 attack success. SmoothLLM's perturb-and-vote strategy does substantially better here, at 0.200.

+

Complementary, not a replacement

Gates and provider filters catch overlapping but non-identical subsets, and on memory poisoning the provider filter still does most of the work even with ChannelGuard active. Treat them as defense-in-depth. A Claude classifier at IB0 also beats the phrase bank as a single input gate, 30/30 against 21/30.

On reading zeros. A perplexity-filter baseline records 0.000 attack success across the board, which looks perfect until you check the benign traces: it blocks 100% of inputs, giving a benign-preservation rate of 0.000 and a false-positive rate of 1.000. An attack-success number is uninterpretable without the utility column beside it.

Citation

Cite ChannelGuard

If you find ChannelGuard or the per-trace attribution methodology useful in your research, please consider citing the paper.

@article{hossain2026channelguard, title = {ChannelGuard: Safe Models Do Not Compose into Safe Multi-Agent Systems}, author = {Hossain, Elias and Nipu, Md Mehedi Hasan and Faria, Fatema Tuj Johora and Ornee, Tasfia Nuzhat and Sheikh, Maleeha}, year = {2026}, journal = {arXiv preprint arXiv:2607.19430}, eprint = {2607.19430}, archivePrefix = {arXiv}, }