The complete
engineering reference.
The supplied inter-agentic threat map, preserved for detailed reading: architecture, component exploitation, AI DDR workflow, reported scenarios, precursor controls and original sources.
The words an inter-agentic system is built from
The harness lab uses most of these terms. The rest are what the incident reports use. Each entry says what the thing is and why it is a propagation path.
Agentic vs inter-agentic
An agentic system is one model, one loop, its own tools. An inter-agentic system is a set of agents that can discover each other, invoke each other and hand work (and context, and credentials) between themselves. The second is the default shape vendors ship today: ServiceNow groups agents into a team and makes them discoverable by default; Salesforce reports an average of twelve agents per enterprise.
Why it propagates: every agent-to-agent edge is a path that authority and data can take without a human on it.
Harness
Everything around the model that decides what it can see, remember, call, change, delegate and prove. The lab's thirteen components (6.00–6.12) are the harness. The model is inference; the harness is authority.
Why it propagates: a harness misconfiguration is inherited by every task the harness runs, and by every agent that shares it.
Control plane
The components that decide what happens next: orchestrator / agent loop (6.02), context assembly (6.05), input / output guardrails (6.06). In an inter-agentic system the control plane also includes agent discovery, routing and recruitment logic.
Why it propagates: a control-plane decision made on poisoned context becomes a legitimate-looking instruction to every component downstream.
Data plane
Where content lives and moves: inputs and external content (6.01), RAG subsystem (6.03), memory and state (6.04), downstream systems (6.11). The lesson of every incident on this page is that the data plane carries instructions whether or not anyone intended it to.
Why it propagates: a record written by an outsider is read later by an insider's agent, under the insider's authority.
Identity plane
Who the agent is acting as and with what scope: credential broker (6.08), policy / authorization gate (6.07), delegated tokens, workload identity. The ATLAS term for the failure is credential relay through delegation chains; OWASP calls it identity and privilege abuse (ASI03).
Why it propagates: a recruited agent that inherits the invoking user's full privilege turns a reader agent's mistake into a writer agent's action.
Evidence plane
The independent record: runtime event producers, protected collector, observability and audit (6.12). Independent means the agent cannot be the only witness to what the agent did.
Why it propagates (when missing): an agent that fabricates its own test results is reporting on itself. Replit is the case.
Agent team
A set of agents that share a trust boundary and can invoke one another. In ServiceNow Now Assist, published agents are automatically placed in the same team and are discoverable by default, so a low-privilege summarizer and a high-privilege record editor are teammates unless someone separates them.
Why it propagates: team membership is an implicit grant. The least-trusted agent on the team sets the team's exposure.
Discovery / agent card / registry
The mechanism by which one agent learns what other agents and tools exist and what they can do. In A2A it is an agent card; in MCP it is the tool list; in a platform it is a registry flag. ATLAS tracks the attacker's side as Discover AI Agent Configuration (AML.T0084) and Discover AI Agent Runtime Capabilities (AML.T0133).
Why it propagates: discovery is how a hijacked agent finds a more capable one to recruit.
Recruitment / delegation
One agent invoking another to do what it cannot. The AppOmni research calls the attack a second-order prompt injection: the planted prompt never reaches the privileged agent directly; a benign agent carries it there. ATLAS: Autonomous AI Agent Communication, direct (AML.T0118.001).
Why it propagates: delegation moves the task and the context, and usually the identity, across the agent boundary in one call.
Tool / dispatcher / MCP server
A tool is a capability the agent can invoke; the dispatcher (6.10) is the privileged edge that executes it; an MCP server, plugin or skill (6.09) is how tools arrive. Tools are where a sentence becomes a system change.
Why it propagates: a tool result is untrusted content re-entering the context (AML.T0110.002), and a tool call is the exfiltration channel (AML.T0086).
Context window / context assembly
The single token stream the model reasons over. Context assembly (6.05) is the step where system instructions, user intent, retrieved passages, memory and tool results are concatenated. If they are not structurally delimited, the model cannot tell data from instruction.
Why it propagates: this is the exact point where a CRM field becomes a command.
Memory / thread / state
Persistent memory outlives the session; thread context lives for the conversation; state is the orchestrator's working record. ATLAS splits context poisoning into memory (AML.T0080.000) and thread (AML.T0080.001) because the persistence differs.
Why it propagates: poisoned memory re-enters every future decision without a new attack.
Guardrail vs authorization gate
A guardrail (6.06) filters content and is advisory to the orchestrator. An authorization gate (6.07) is an independent policy decision point the orchestrator cannot rewrite; denied actions do not reach the dispatcher. Filtering is not authorization.
Why it propagates (when confused): ServiceNow's built-in injection protection did not stop recruitment, because recruitment was an authorized feature.
Cross-configuration
Two configurations, each reasonable alone, that together open a path neither owner designed: an allowlisted domain that expired; a token scoped to all repos used by an agent that reads public issues; a dev session holding production credentials. The term is this page's; the pattern is in every incident below.
Why it propagates: nobody owns the seam, so nobody tests it.
Toxic flow / lethal trifecta
Private data access, exposure to untrusted content and an external communication channel in one agent session. Any two are survivable; all three are an exfiltration machine. Invariant Labs called the GitHub pattern a toxic agent flow; Simon Willison named the general case the lethal trifecta.
Why it propagates: an agent with the trifecta needs no vulnerability, only a sentence.
Blast radius / cascading failure
The set of systems a single compromised decision can reach before an independent control stops it. OWASP ASI08 (cascading failures) is the risk class; the lab's impact-containment perspective is the control objective.
Why it propagates: in an inter-agentic system the blast radius is the union of every teammate's tools.
Six more terms: the lifecycle around the runtime
Harness v13.4 wraps the six runtime steps in a lifecycle: step 0, register and attest before activation, and step 7, contain, recover, review and retire. Six components (6.13–6.18) carry it. These are the words for them.
Lifecycle layer steps 0 and 7
Everything that has to be true before an agent is allowed to accept work, and everything that has to happen when a material warning fires or the approved use ends. Step 0 chains release attestation, evaluation, identity enrollment and an independent activation decision. Step 7 chains the response decision, credential revocation, observed stop state, recovery test, notice and recourse assessment, and retirement.
Why it propagates (when missing): an agent that was never registered cannot be inventoried, and an agent that is never retired keeps its grants after its owner has moved on.
Delegation envelope 6.13
The intersected scope a child agent receives from its parent: narrower than the parent's, with explicit expiry, destination and a shared budget. Identity & delegation maintains an accountable principal for each agent, its human owner and the chain of delegated authority, validates every hop, rejects scope expansion and propagates revocation to running children.
Why it propagates: a child that inherits an unrestricted copy of the parent's permissions is the ServiceNow recruitment path. An intersected envelope is the control that closes it.
Attestation / AI BOM 6.16
A registered record of the agent build, model reference, tool and extension set, prompt templates, policies and retrieval manifests, verified by signature and digest against trusted release records before use. Attestation here means a verified provenance and approval statement, not third-party certification.
Why it propagates (when missing): an unknown tool, a stale index or a substituted policy enters a trusted workflow while the model's name stays the same. A digest emitted by the workload can itself be falsely reported.
Budget as authority 6.17
Calls, tokens, elapsed time, provisioned resources and spend treated as bounded authority, reserved and reconciled at the dispatcher against an independent ledger, shared across retries and child agents rather than reset at each handoff.
Why it propagates: parallel children and retries can exceed approved exposure before any dashboard sees the total. A budget that resets at every delegation is a budget with no ceiling.
Independent interrupt 6.15
A human oversight console that gives a designated reviewer the evidence, consequence class and alternatives, with an approve, reject or interrupt path the agent does not control. Approval is bound to one action, target, policy version and expiry. Halt requests are tested through the execution and identity layers, and downstream effects are verified.
Why it propagates (when missing): an interruption mechanism the agent controls, or a reviewer who rubber-stamps, leaves consequential activity effectively unsupervised. Replit's code freeze was an instruction to the agent, not an interrupt outside it.
Decision record / recourse 6.18
A minimized, audience-appropriate record that connects an AI-assisted decision to a notice, a comprehensible explanation and a route for correction or contest, assembled from verified outcomes rather than raw traces.
Why it propagates: publishing raw traces exposes third-party data, prompts and security controls. A trace shows operations; it does not explain the decision's basis. Recourse is where a propagated error becomes visible to the person it reached.
Five planes, thirteen components, one trust boundary, and the v13.4 lifecycle plane around them
The harness lab's components grouped by the plane they belong to; Harness v13.4 adds a sixth plane of six lifecycle components (6.13–6.18) that operate before and after the runtime steps. In an inter-agentic deployment every plane is shared across agents, which is why a weakness in one agent's harness is a weakness in the team's.
Boundary untrusted
- 6.01Inputs & external content: prompts, files, web, email, API and tool responses, and in an inter-agentic system, messages from other agents
Control plane decides
- 6.02Orchestrator / agent loop, plus discovery, routing and recruitment logic
- 6.05Context assembly
- 6.06Input / output guardrails (advisory)
- 6.00Generative model: inference, not authority
Data plane carries
- 6.03RAG subsystem
- 6.04Memory & state (thread, persistent, shared)
- 6.11Sandbox / downstream systems
Identity & action plane enforces
- 6.07Policy / authorization gate (independent)
- 6.08Credential broker: scoped, expiring, per-call
- 6.09Extensions / MCP / skills (supply chain)
- 6.10Tool dispatcher (privileged edge)
Evidence plane proves
- 6.12Observability & audit, fed by every producer in phases 1–5, feeding the SIEM / AI-DDR workflow: detect, contain, recover, govern
Lifecycle plane v13.4 · before and after runtime
- 6.13Identity & delegation: authority lineage, intersected child scope, revocation propagation
- 6.14Evaluation & conformance: tests, canaries and continuing quality bound to the exact configuration
- 6.15Human oversight console: independent approve, reject or interrupt
- 6.16AI BOM & attestation: registered release, verified digests, publisher identity
- 6.17Authority & consumption: shared task budget reserved at dispatch
- 6.18Transparency & recourse: minimized decision record, notice, contest
Harness v13.4 adds two steps around the six runtime steps. Step 0, register and attest before activation, runs 6.16 → 6.14 → 6.13 → 6.15 → 6.02: verify the exact release, let passed evaluation inform enrollment, name the owner and the bounded delegation, and make an independent activation decision. Step 7, contain, recover, review and retire, runs 6.12 → 6.15 → containment and recovery → 6.18 → retirement → 6.16: correlated evidence reaches an independent response owner, an approved interruption revokes or narrows credentials, verified effects inform notice and review, and verified retirement closes the registry so reactivation needs fresh approval. Within the runtime steps, 6.13 now sits in step 1 (validate the requesting principal), 6.15 in step 4 (consequence threshold triggers human review) and 6.17 in step 5 (reserve budget before dispatch).
What changes when the system is inter-agentic is not the list of components. It is that each agent brings its own copy of planes 1 through 4 and shares them through discovery and delegation, while the evidence plane is usually per-vendor or absent at the seams. The incidents below are, without exception, seam failures.
What propagates through each component, and who has a name for it
One row per harness component. ATLAS IDs are from the current MITRE ATLAS technique catalogue; ASI IDs from the OWASP Top 10 for Agentic Applications 2026; LLM IDs from the OWASP Top 10 for LLM Applications 2025. The AI-DDR column is the evidence-plane signal that would reveal the exploitation while it is happening.
HoundBytes + Elastic security engineering overlay (demonstration): The added column pairs each harness attack surface with an illustrative detection predicate and a separate preventive/response control. These are proposed rule designs, not claims of deployed HoundBytes detections. KQL assumes custom ai.* fields normalized at ingest; fields and thresholds must be validated against actual OpenTelemetry spans, Elastic mappings, ECS-compatible fields, and available source telemetry. Elastic detections alert; blocking requires an inline policy gateway, tool dispatcher, credential broker, SOAR, or endpoint/network enforcement. Correlation across events should use trace.id, ai.agent.id, ai.run.id, and ai.action.id; single-event predicates below are starting points, not complete sequence rules.
| Component | What propagates through it | MITRE ATLAS | OWASP Agentic | OWASP LLM | AI-DDR signal (6.12) | Proven by | HoundBytes / Elastic detection + mitigation |
|---|---|---|---|---|---|---|---|
| 6.01Inputs & external content | Instructions disguised as data: a lead field, a public issue, a ticket description, a web page, another agent's message. | AML.T0051.001 Indirect injection · AML.T0051.002 Triggered · AML.T0093 Prompt infiltration via public-facing app · AML.T0078 Drive-by · AML.T0129 Multimodal triggers · AML.T0134 AI-targeted cloaking | ASI01 Goal hijack | LLM01 Prompt injection | Provenance tag = external on content that later precedes a tool call; injection-pattern hits at ingress; field size anomalies (42,000-char description) | ForcedLeak, GitHub MCP, ServiceNow | HB-AI-001 · Injection at untrusted ingress Elastic KQL (illustrative): Enforcement: Quarantine content; prevent promotion to instructions. |
| 6.02Orchestrator / agent loop | A manipulated plan: the loop selects tools, branches and teammates on the basis of poisoned context. Discovery and recruitment live here. | AML.T0118.001 Direct agent communication · AML.T0124 Autonomous attack orchestration · AML.T0084.001 Discover tool definitions · AML.T0133 Discover runtime capabilities · AML.T0034.002 Agentic resource consumption | ASI07 Insecure inter-agent communication · ASI08 Cascading failures · ASI10 Rogue agents | LLM06 Excessive agency | Agent-to-agent invocation depth above baseline; privileged agent invoked by a lower-privilege caller; loop budget or stop-condition breaches | ServiceNow | HB-AI-002 · Runaway or redirected agent Elastic KQL (illustrative): Enforcement: Terminate run; enforce external step and cost budget. |
| 6.03RAG subsystem | Poisoned or over-shared knowledge that looks like normal retrieval; credentials that were indexed by accident. | AML.T0070 RAG poisoning · AML.T0071 False RAG entry · AML.T0064 Gather RAG-indexed targets · AML.T0082 RAG credential harvesting · AML.T0085.000 Data from RAG databases | ASI06 Memory & context poisoning | LLM08 Vector & embedding weaknesses · LLM02 Sensitive disclosure | Retrieval returning objects outside the caller's ACL or tenant; source IDs with no provenance; retrieval volume spikes | Asana | HB-AI-003 · RAG authorization/provenance failure Elastic KQL (illustrative): Enforcement: Deny retrieval before context assembly; isolate index item. |
| 6.04Memory & state | Instructions that persist: a poisoned memory re-enters every later decision; shared state leaks between principals. | AML.T0080.000 Context poisoning: memory · AML.T0080.001 Thread · AML.T0094 Delayed execution of instructions · AML.T0092 Manipulate chat history | ASI06 Memory & context poisoning | LLM04 Data & model poisoning | Memory writes originating from external-provenance content; TTL and write-authorization violations; memory reads across user boundaries | Asana (state), Replit (fabricated state) | HB-AI-004 · Cross-principal memory write Elastic KQL (illustrative): Enforcement: Reject write; restore signed memory version. |
| 6.05Context assembly | Trusted instructions and untrusted text collapsing into one token stream; safeguards silently truncated by overflow. | AML.T0069.000 Discover special character sets · AML.T0068 Prompt obfuscation · AML.T0061 Prompt self-replication · AML.T0018.003 Modify prompt construction logic | ASI01 Goal hijack | LLM01 · LLM07 System prompt leakage | Context lineage showing external content adjacent to protected instructions; context-budget truncation events | Every incident on this page | HB-AI-005 · Context boundary integrity Elastic KQL (illustrative): Enforcement: Rebuild context with untrusted content fenced. |
| 6.06Input / output guardrails | Nothing should propagate here, which is the problem: a filter the orchestrator can bypass, or that treats a feature as safe, lets prohibited actions through. | AML.T0054 LLM jailbreak · AML.T0065 Prompt crafting · AML.T0077 LLM response rendering | ASI09 Human-agent trust exploitation | LLM05 Improper output handling | Outputs carrying external references with encoded parameters; guardrail bypass-path tests failing; actions proceeding on a guardrail "allow" with no gate decision | ForcedLeak, ServiceNow | HB-AI-006 · Guardrail bypass / missing decision Elastic KQL (illustrative): Enforcement: Fail closed in dispatcher; alert on missing gate attestation. |
| 6.07Policy / authorization gate | When absent or rewritable, every proposal becomes an action. When present, this is where propagation stops. | AML.T0081 Modify AI agent configuration · AML.T0132 Misconfigured or publicly exposed AI services | ASI03 Identity & privilege abuse · ASI02 Tool misuse | LLM06 Excessive agency | Material actions with no gate decision record; gate rule-version changes; approvals issued by the orchestrator's own identity | GitHub MCP, Replit, ServiceNow | HB-AI-007 · Policy deny followed by execution Elastic KQL (illustrative): Enforcement: Block via OPA or dispatcher; revoke session. |
| 6.08Credential broker | Standing privilege and inherited identity: the recruited agent acts as the user; one token spans every repository; dev holds prod keys. | AML.T0083 Credentials from agent configuration · AML.T0098 Tool credential harvesting · AML.T0091.000 Application access token · AML.T0012 Valid accounts | ASI03 Identity & privilege abuse | LLM02 | One credential used across more targets than the task scope; privileged tool calls under a delegated identity with no delegation record | GitHub MCP, ServiceNow, Replit | HB-AI-008 · Token scope anomaly Elastic KQL (illustrative): Enforcement: Revoke token; issue scoped ephemeral credentials. |
| 6.09Extensions / MCP / skills | Capability arriving with its own bugs and its own trust: a poisoned tool definition, a rug-pulled package, or a first-party MCP server with a tenant-isolation flaw. | AML.T0110 AI agent tool poisoning (.000 definition, .001 implementation, .002 runtime response) · AML.T0010.005 Supply chain: agent tool · AML.T0109 Rug pull · AML.T0115.002 Publish poisoned tools · AML.T0111 Reputation inflation | ASI04 Agentic supply chain vulnerabilities | LLM03 Supply chain | Tool definitions changing between sessions; unregistered MCP endpoints; tool responses carrying instruction patterns; cross-tenant object IDs in responses | Asana, GitHub MCP | HB-AI-009 · Unattested extension execution Elastic KQL (illustrative): Enforcement: Disable MCP/skill; enforce signed allowlist. |
| 6.10Tool dispatcher | The point where a sentence becomes deletion, exfiltration, publication, messaging or a privilege change. | AML.T0053 AI agent tool invocation · AML.T0086 Exfiltration via tool invocation · AML.T0101 Data destruction via tool invocation · AML.T0085.001 Data from agent tools · AML.T0100 Agent clickbait | ASI02 Tool misuse · ASI05 Unexpected code execution | LLM06 Excessive agency | Write or destructive tool calls whose arguments contain content from external-provenance context; tool calls to targets outside the task's declared scope; blanket auto-approval in effect | GitHub MCP, Replit, ForcedLeak | HB-AI-010 · High-risk tool invocation Elastic KQL (illustrative): Enforcement: Deny tool call and require independent approval. |
| 6.11Sandbox / downstream systems | Persistent system change: the production database, the public pull request, the outbound email, the CRM record. | AML.T0048 External harms · AML.T0025 Exfiltration via cyber means · AML.T0105 Escape to host · AML.T0122 Exploitation of remote services | ASI08 Cascading failures | LLM02 · LLM05 | Egress to allowlisted hosts whose registration lapsed; writes to public surfaces containing private lineage; production mutations from non-production identities | Replit, ForcedLeak, GitHub MCP | HB-AI-011 · Sandbox escape / forbidden egress Elastic KQL (illustrative): Enforcement: Isolate workload; block egress at network policy. |
| 6.12Observability & audit | When the agent is its own witness, fabricated results propagate as fact. Evidence must be produced by the dispatcher and the gate, not reported by the model. | AML.T0067 Trusted output components manipulation · AML.T0067.000 Citations · AML.T0074 Masquerading · AML.T0092 Manipulate chat history | ASI09 Human-agent trust exploitation · ASI10 Rogue agents | LLM09 Misinformation | Agent claims (tests passed, rollback done) with no corroborating producer event; gaps in producer coverage; evidence integrity failures | Replit | HB-AI-012 · Evidence chain gaps Elastic KQL (illustrative): Enforcement: Suspend automated closure; reconcile signed events. |
| 6.00Generative model | Hallucinated plans and compliant reasoning over whatever the harness hands it. The model is not the vulnerability in any incident here; it is the amplifier. | AML.T0054 Jailbreak · AML.T0057 LLM data leakage · AML.T0056 Extract system prompt · AML.T0060 Publish hallucinated entities | ASI01 | LLM07 · LLM09 · LLM10 Unbounded consumption | Model and template version drift; eval threshold failures; grounding-check misses | Replit (fabrication) | HB-AI-000 · Model version or output deviation Elastic KQL (illustrative): Enforcement: Route to approved model; hold output for evaluation. |
| Lifecycle components added in Harness v13.4 | |||||||
| 6.13Identity & delegation | Authority that broadens as it is handed down: a child agent inheriting an unrestricted copy of the parent's permissions, a stale grant outliving its owner's approval, a shared identity hiding who acted. | AML.T0118.001 Direct agent communication · AML.T0091.000 Application access token · AML.T0083 Credentials from agent configuration · AML.T0012 Valid accounts · AML.T0103 Deploy AI agent | ASI03 Identity & privilege abuse · ASI07 Insecure inter-agent communication | LLM06 | A delegation hop whose child scope is not a subset of the parent's; a child still running after the owner's revocation; an action with no delegation chain back to a human owner | ServiceNow, GitHub MCP | HB-AI-013 · Delegation scope expansion Elastic KQL (illustrative): Enforcement: Deny delegation; expire child credential. |
| 6.14Evaluation & conformance | Degraded grounding, accuracy or bias hiding behind a stable model name; or a false drift alarm when an alias changes but the resolved deployment is still approved. | AML.T0031 Erode AI model integrity · AML.T0020 Training data poisoning · AML.T0018.003 Modify prompt construction logic · AML.T0010.003 Supply chain: model · AML.T0067 Trusted output manipulation | ASI04 Supply chain · ASI10 Rogue agents | LLM04 Data & model poisoning · LLM09 Misinformation | Resolved model or deployment outside the approved set; evaluation suite, dataset or evaluator version drift; failed evaluations not routed to an independent release decision | Replit (no independent evaluation evidence) | HB-AI-014 · Evaluation regression Elastic KQL (illustrative): Enforcement: Block rollout; revert attested release. |
| 6.15Human oversight console | Consequential activity that is nominally supervised: rubber-stamp approvals, fatigued reviewers, or an interrupt the agent itself controls. | AML.T0067 Trusted output manipulation · AML.T0073 Impersonation · AML.T0094 Delayed execution (acts after the approval window) · AML.T0100 Agent clickbait · AML.T0092 Manipulate chat history | ASI09 Human-agent trust exploitation | LLM09 | Approvals faster than the evidence could be read; approver identity equal to the agent's; an interrupt issued with no observed stop in execution or identity layers; approvals reused across actions or past expiry | Replit (freeze was a prompt, not an interrupt), GitHub MCP (always-allow) | HB-AI-015 · Invalid human approval Elastic KQL (illustrative): Enforcement: Pause workflow; independent approval challenge. |
| 6.16AI BOM & attestation | Capability that was never registered or that changed after registration: an unknown tool, a stale index, a substituted policy, a rug-pulled package, all while the model's name stays the same. | AML.T0010.005 Supply chain: agent tool · AML.T0109 Rug pull · AML.T0110 Tool poisoning · AML.T0115.002 Publish poisoned tools · AML.T0111 Reputation inflation · AML.T0081 Modify agent configuration · AML.T0002.002 Acquire agent configuration | ASI04 Agentic supply chain | LLM03 Supply chain | Runtime manifest digest differing from the registry; an MCP endpoint, tool or policy with no registry entry; a digest reported by the workload with no independent verification | Asana (new capability, no isolation evidence), ForcedLeak (expired domain inside an attested allowlist) | HB-AI-016 · AIBOM attestation mismatch Elastic KQL (illustrative): Enforcement: Quarantine artifact; require signed provenance. |
| 6.17Authority & consumption | Exposure that exceeds approval before anyone sees the total: parallel children, retries, delayed billing, an over-broad purchase tool, or a mass mutation with no transaction ceiling. | AML.T0034.002 Agentic resource consumption · AML.T0034 Cost harvesting · AML.T0029 Denial of AI service · AML.T0048.000 Financial harm · AML.T0101 Data destruction via tool invocation | ASI08 Cascading failures · ASI10 Rogue agents | LLM10 Unbounded consumption | Budget reset at a delegation hop; concurrent reservations exceeding the task-family ceiling; dispatch with no ledger reservation; row-count or spend per action above the approved limit | Replit (mass delete then ~4,000 inserts) | HB-AI-017 · Delegated budget breach Elastic KQL (illustrative): Enforcement: Stop spending and child-agent execution. |
| 6.18Transparency & recourse | Either no explanation reaches the affected person, or the explanation leaks: raw traces published with third-party data, prompts or security controls in them. | AML.T0067.000 Citations manipulation · AML.T0130 Agent response biasing · AML.T0092 Manipulate chat history · AML.T0057 LLM data leakage · AML.T0077 Response rendering | ASI09 Human-agent trust exploitation | LLM02 Sensitive disclosure · LLM09 | Decision records with no verified outcome behind them; explanations containing unredacted trace content; contest outcomes not linked back to the original decision | ForcedLeak (record data in rendered output) | HB-AI-018 · Unverified explanation / leakage Elastic KQL (illustrative): Enforcement: Hold response; redact and require evidence link. |
Where each ATLAS tactic lands in the six-phase harness model
The lab asks whether an AI system can act only within delegated authority and prove that it did. Read top to bottom, this ladder is the adversary's view of the same six steps: what they need at each phase, which components they exploit, and what the evidence plane should emit.
Before runtime, the adversary's work is to get a capability into the registered release or to bypass registration altogether: a poisoned tool definition, a package that turns malicious after adoption, inflated trust signals, a modified configuration, a model whose alias hides a substituted deployment. 6.16 verifies digests and signers, 6.14 evaluates the exact release, 6.13 enrolls an owner and a bounded delegation, and 6.15 makes the activation decision. An agent that skipped step 0 has no manifest to be checked against.
The adversary needs a sentence to arrive inside the operating envelope. They do not need an account: a lead form, a public issue, a ticket field or a web page the agent will read is enough. ServiceNow, ForcedLeak and GitHub MCP all begin here.
The adversary wants the sentence to survive and to be retrieved under someone else's authority. Poisoned RAG entries, poisoned memory and over-broad retrieval scope convert a one-time injection into a standing one. Asana's flaw sat here: retrieval ignored the tenant boundary.
Context assembly is where the sentence becomes a plan. Delimiters are discovered and defeated, instructions are obfuscated or delayed, and the model proposes recruitment, retrieval or a tool call that looks like task completion.
The adversary needs the proposal to be allowed. In the incidents here it was, because there was no independent gate: auto-approval was on (GitHub), the recruiting feature was authorized by default (ServiceNow), or the destructive command needed no approval (Replit). Discovery of configuration, teammates and runtime capabilities happens here.
Tool invocation is the objective. Agent-to-agent communication is lateral movement; a write tool is the exfiltration channel; a mutative tool is destruction. A rendered image tag is exfiltration that never touches a tool at all.
The adversary's last need is for the record to agree with them. Fabricated test results, manipulated citations, edited chat history and an agent that is its own only witness all defeat phase 6. The SIEM / AI-DDR workflow exists so that producers, not the model, write the evidence.
Once a warning fires, the adversary's objective is to survive it: keep a child agent running after the parent is revoked, reconstruct the operating environment after a reset, leave tasking in a shared artifact for the next run, or hold a grant on an agent nobody retired. Step 7 answers with an independent response owner, an approved interruption that revokes or narrows credentials, verification that running and queued work actually stopped, a recovery test, a notice and recourse assessment, and a retirement record that closes the registry so reactivation needs fresh approval.
Seven steps from event capture to accountable response, and what each step catches
Harness v13.4 publishes the SIEM / AI-DDR lab as a seven-step workflow. The map's detection signals belong to specific steps; the adversary's evasion techniques target specific steps too. Read this as the evidence plane unpacked.
Every material source is instrumented and captured independently as the task runs; collection and retention stay outside the controlled agent's write authority. Coverage and loss records name the missing sources rather than implying complete visibility. The lab's telemetry notes make the point per component: an execute_tool span alone does not prove the effect; a source ID alone does not prove the corpus contents; a missing record ID is not proof of deletion.
Preserve event meaning, origin, time and delegated identity when joining activity across models, agents, retrieval, tools and targets. This is where a recruitment chain becomes visible as one trace with a privilege direction, and where a single token used across many targets shows up as one principal.
Compare the observed task with its approved baseline and hard boundaries; distinguish a suspected anomaly from a confirmed violation. Record detection version, supporting events, confidence, business impact and known blind spots. The baseline is the registered manifest and delegation envelope from step 0, which is why detection without attestation has nothing to compare against.
Route material warnings to the appropriate responder. Pre-authorized automation may contain an event, but the decision rule, scope and accountability stay explicit and recorded. The adversary's play here is trust exploitation: fabricated status, impersonated approvers, delayed execution timed past the review.
The independent control plane revokes or constrains the affected execution paths, and the resulting state is confirmed rather than equating a sent command with containment. Check child agents, credentials, scheduled jobs, memory and downstream effects. This is the step that answers the inter-agentic question directly: did the teammates stop too?
Reconstruct the incident, remove its cause and persistence, and validate return-to-service conditions before resuming affected work. Document integrity tests, residual risk, release authority and heightened monitoring. For a poisoned memory or RAG index this is where the persistence is actually removed.
Findings become owned decisions and corrective action; material risk and unresolved warnings reach the board or its designated committee; the approved baseline feeds the next monitoring cycle. In v13.4 this is the handoff into step 7 of the harness: notice and recourse assessment, retirement, and a registry that requires fresh approval to reactivate.
The RAG deep dive in v13.4 follows the same discipline on the data plane in seven steps: govern the source corpus, build an index that inherits source controls, authorize the requesting principal, retrieve only permitted passages, keep instructions separate from retrieved data, generate and validate the answer, and evaluate and maintain the lifecycle. Against the map, steps 1 and 2 are where AML.T0070 and AML.T0071 (RAG poisoning, false entries) and AML.T0082 (credential harvesting) are prevented; step 3 is the tenant boundary Asana's server lacked; step 5 is the structural delimiting that ForcedLeak's context assembly lacked; step 6 is explicit that any external action still requires the harness authorization gate at 6.07.
Five reported incidents, replayed through the harness
Each scenario states the configuration that existed before the incident, traces the propagation path phase by phase with the component exploited at each step, maps the frameworks, and then lists the precursor activities that would have stopped it, the AI-DDR signals that would have revealed it, and what would still have been missed. Severity chips show which property of the data was lost.
1 · ServiceNow Now Assist: second-order prompt injection through agent-to-agent discovery
CollapseExpand
A benign agent reads a planted prompt, discovers a more capable teammate and recruits it. The recruited agent reads and modifies records and sends email, under the privileges of the user who started the session. Nothing was exploited; three defaults were used as designed.
ConfidentialityIntegrityBoundary crossed: agent team
1 · ServiceNow Now Assist: second-order prompt injection through agent-to-agent discovery
CollapseExpandPrecursor configuration
- The underlying LLM supports agent discovery (true of Azure OpenAI and the default Now LLM).
- Published agents are automatically placed in the same team and can invoke each other.
- Published agents are discoverable by default.
- The autonomous override property (sn_aia.enable_usecase_tool_execution_mode_override) permits execution without supervision.
- Agents run with the privileges of the user who started the interaction, so a help-desk analyst's session carries the analyst's full record access.
Framework mapping
Propagation path
- P1A low-privilege actor places instructions in a field a benign agent will later read (a case description, a comment). This is task intake, not a grant of authority, but the harness treats it as both.6.01
- P2–3The benign agent (a summarizer or categorizer) retrieves the record. Context assembly concatenates the planted text with the agent's instructions. The model proposes a plan that includes "ask a teammate".6.036.056.00
- P4Discovery returns the team roster. Recruitment of a privileged agent is an authorized platform feature, so the built-in injection protection does not fire and no independent gate exists to deny it. The recruited agent inherits the session user's identity.6.026.07 absent6.08
- P5The privileged agent reads sensitive records, modifies records or sends email with their contents. Every call is a legitimate tool invocation by a legitimate user from the dispatcher's point of view.6.106.11
- P6The victim organization has no record that distinguishes this chain from ordinary agent collaboration. AppOmni's finding was that it happens without the organization's knowledge.6.12
Precursor activities that would have mitigated it
- Team segmentation by privilege. Agents with read-only tools and agents with write or send tools never share a team. The least-trusted member defines the team's exposure, so design teams from the least-trusted member up.
- Discovery default-deny. Agents are not discoverable on publish. Discoverability is granted per agent, per team, with an accountable owner, the way a firewall rule is.
- Supervised execution for privileged agents. Any agent holding record-modification or outbound-message tools runs in supervised mode; the autonomous override property is disabled and its state is monitored as a configuration-drift event.
- Scoped identity for recruited agents. A recruited agent runs under a delegated token scoped to the task, not under the invoking user's full privilege. The credential broker issues it per call and records the delegation chain.
- Independent gate on recruitment. Agent-to-agent invocation across a privilege boundary is a material action submitted to the policy gate like any other, with default deny.
- Provenance at ingress. Record fields populated by external or low-privilege principals carry a trust tag that context assembly structurally delimits and that the gate can condition on.
What the SIEM / AI-DDR workflow would have seen
- Agent-to-agent invocation where the caller's context contained content tagged external or low-privilege.
- A privileged agent invoked by a lower-privilege agent, or by any agent rather than by a user.
- Call-chain depth or fan-out above the baseline for the workflow.
- Outbound email or record modification whose arguments carry data read earlier in the same trace.
- Configuration drift: the override property enabled, or a team membership change, outside a change window.
Residual: a recruited agent operating within its own scope on poisoned intent would still act. Detection depends on trace correlation across agents, which requires the vendor's producers to emit a shared trace ID at the agent boundary.
Harness v13.4 lifecycle view
- 6.13 Identity & delegation is the direct answer: the recruited agent receives an intersected scope with expiry and destination, not an unrestricted copy of the session user's privileges. Scope expansion at the hop is rejected.
- 6.15 Human oversight in step 4: a consequence threshold on record modification and outbound email triggers an independent review the orchestrator cannot satisfy by itself.
- 6.17 Authority & consumption: the recruited agent spends from the parent task's budget, so a recruitment chain cannot fan out beyond the approved ceiling.
- Step 7: an approved interruption revokes the delegated credentials and verifies that the recruited agent, not just the original, stopped.
2 · GitHub MCP: a public issue walks a private repository into a public pull request
CollapseExpand
A malicious issue in a public repository told the agent to read all of the author's repositories and publish what it found. Because the agent held one broad token and auto-approval was on, it did, and private project, salary and relocation details landed in a public pull request.
ConfidentialityBoundary crossed: credential scope (public to private repo)
2 · GitHub MCP: a public issue walks a private repository into a public pull request
CollapseExpandPrecursor configuration
- A single personal access token granting the agent every repository the developer could reach, public and private.
- The MCP client set to an "always allow" confirmation policy, so tool calls ran without per-call approval.
- The agent instructed to read and address open issues on a public repository, which anyone can write to.
- No policy layer between the agent and the MCP server; the client connected directly.
Framework mapping
Propagation path
- P1Attacker opens an issue on the public repository with hidden instructions. The developer asks the assistant to look at open issues and address them. The task is legitimate; the content is not.6.01
- P2–3list_issues returns the issue body. It enters context as a tool result, which the harness treats as trusted. The model proposes reading the author's other repositories.6.096.05
- P4No gate: "always allow" means the proposal is the authorization. The credential broker does not exist as a component; the token is a static secret with full scope.6.07 absent6.08 absent
- P5get_repositories reads private repositories with the same token. The agent writes the collected data into a pull request on the public repository: a write tool used as the exfiltration channel.6.106.11
- P6The pull request is public and persistent. The only evidence is the artifact of the breach itself.6.12
Precursor activities that would have mitigated it
- Credential scoped to the task. Repository-scoped OAuth grants or fine-grained tokens issued per session by a broker, never a user-wide PAT in an agent's configuration. A session that starts in one repository cannot reach another without a new grant.
- Break the trifecta. A session that reads untrusted public content does not also hold private-data access and a public write channel. Split the workflow: a read-only triage agent summarizes issues; a separate, human-approved agent acts on private repositories.
- No blanket auto-approval on tools that read untrusted content. "Always allow" is permitted only for tools whose inputs are fully internal. Every write to a public surface is a material action through the gate.
- Policy enforcement between agent and MCP server. An interceptor that locks the session to the first repository touched, blocks cross-repository reads and inspects write arguments for private-lineage content.
- Tool results tagged as untrusted at ingress. Content returned by list_issues from a public repository is delimited in context as external data, so the model cannot treat it as the developer's instruction.
What the SIEM / AI-DDR workflow would have seen
- One token used against multiple repositories inside a single trace, after a read from a public repository.
- A write to a public surface whose payload lineage includes private-repository reads in the same trace.
- A tool call sequence (read public, enumerate private, write public) with no approval event between the read and the write.
- Auto-approval policy state recorded as a standing exception on a session with external inputs.
Residual: scope locking blocks legitimate multi-repository work; the control has to be designed per workflow, not applied globally. Detection after the write is forensic, not preventive; only the gate prevents.
Harness v13.4 lifecycle view
- 6.16 AI BOM & attestation at step 0: the registered manifest names the repositories the agent is approved to touch, so a cross-repository read is a deviation from the attested scope, not a judgment call.
- 6.13 Identity & delegation: the agent's credential is issued from the delegation envelope with a destination (the one repository) and an expiry, which replaces the user-wide PAT.
- 6.15 Human oversight: "always allow" is replaced by an approval bound to one action, target, policy version and expiry; a write to a public surface cannot inherit an approval given for a read.
3 · Salesforce Agentforce "ForcedLeak": a lead form field becomes the control plane
CollapseExpand
An attacker submitted a Web-to-Lead form with instructions hidden in the 42,000-character description field. Weeks later an employee asked Agentforce about the lead. The agent followed the instructions, queried CRM data and emitted an image tag whose URL carried the data to a domain that was still on Salesforce's content security policy allowlist because nobody noticed it had expired.
ConfidentialityBoundary crossed: ingress trust to egress trust (cross-configuration)
3 · Salesforce Agentforce "ForcedLeak": a lead form field becomes the control plane
CollapseExpandPrecursor configuration
- Web-to-Lead accepts external submissions directly into CRM records that agents later process.
- The description field allows 42,000 characters, far more than a lead needs and enough for a full instruction block.
- The CSP allowlist included my-salesforce-cms.com, a domain whose registration had lapsed; the researchers bought it for $5.
- Agent output was rendered with external image references honored.
Framework mapping
Propagation path
- P1External actor submits a lead. The instruction is now a CRM record: internal, trusted, indexed.6.016.11
- P2Time passes. The record waits in the data plane. This is the triggered variant of injection: the payload is dormant until a legitimate user retrieves it.6.036.04
- P3An employee asks the agent to review the lead. Context assembly places the description beside the employee's request with no structural distinction.6.056.00
- P4Querying leads is within the agent's authority; rendering an image is not an action anyone gated.6.07 not in path
- P5The agent queries lead counts and email addresses, then emits markup with an image URL pointing at the expired allowlisted domain, with CRM data encoded in the query string. The browser renders the image; the data leaves.6.106.066.11
- P6The egress looks like a trusted CSP-permitted image load from a first-party domain.6.12
Precursor activities that would have mitigated it
- Trusted-URL enforcement on agent output. Agent responses may not reference external resources outside an explicit, owned, current allowlist. This is what Salesforce shipped on 8 September; it should have been a design-time control.
- Allowlist hygiene as a governed inventory. Every domain on a CSP or egress allowlist has an owner, a registration expiry and a monitor. An expired entry is a cross-configuration: a security control pointing at an asset nobody owns.
- Provenance on externally sourced records. Records created by public forms carry an external tag that survives into retrieval and context assembly, where they are delimited as data.
- Field design as an attack-surface decision. A free-text field sized for a paragraph, with length and pattern anomaly checks at ingress.
- Output handling through the guardrail and gate. Rendering references to external hosts, and aggregating queries triggered by externally sourced content, are treated as material and conditioned on provenance.
What the SIEM / AI-DDR workflow would have seen
- Agent output containing a URL with query parameters that match record data read earlier in the trace.
- An ingress record with external provenance followed in the same trace by a data-aggregation query.
- A CSP allowlist entry whose domain registration had lapsed (a continuous external-asset check).
- Lead descriptions at or near the field's maximum length.
Residual: exfiltration by rendering needs no tool call, so dispatcher-side controls never see it. Output handling has to be enforced where the output is rendered, which in SaaS is the vendor's responsibility and the customer's assurance question.
Harness v13.4 lifecycle view
- 6.16 AI BOM & attestation: the CSP allowlist is part of the attested release. An entry whose domain registration has lapsed fails the "verify against trusted release records" check at step 0 and at every re-attestation, which is how an expired domain gets caught before a researcher buys it.
- 6.18 Transparency & recourse: the lab's rule that decision records are minimized and assembled from verified outcomes, never raw traces, is the same discipline that stops record data from being emitted into rendered output.
- 6.14 Evaluation & conformance: a use-case-specific adversarial test suite that includes a poisoned lead is the pre-release evaluation that would have surfaced the path.
4 · Asana MCP server: a logic flaw leaks one tenant's data into another tenant's AI sessions
CollapseExpand
No adversary. A bug in Asana's MCP server meant that for about a month, task details, project metadata, comments and files from one organization could surface in other organizations' AI assistants. Roughly 1,000 customers were affected. The harness failed at the seam between the extension and the identity plane.
ConfidentialityBoundary crossed: tenant
4 · Asana MCP server: a logic flaw leaks one tenant's data into another tenant's AI sessions
CollapseExpandPrecursor configuration
- A newly launched MCP server exposing workspace data to customers' LLM clients.
- Tenant scoping implemented in the MCP server's own logic rather than enforced by the identity layer beneath it.
- Customers connecting assistants to the server with no inventory of which data classes the connection could return.
- No customer-side control that could notice a foreign object ID in a response.
Framework mapping
ATLAS is an adversary taxonomy; for a non-adversarial flaw the mapping describes the exposure an adversary could have used, not an attack that occurred.
Propagation path
- P1A user in organization B asks their assistant an ordinary question. Authority is correctly established for B.6.016.02
- P2The assistant calls the Asana MCP server. The server's retrieval ignores the tenant boundary and returns objects belonging to organization A, limited only by the requesting user's access scope within the flawed logic.6.096.086.03
- P3–5The foreign content enters B's context as permitted knowledge. It may be summarized, stored in memory, or acted on. No tool is misused; the harness did exactly what it was told with data it should never have been given.6.056.04
- P6Asana found it internally after a month. Customers were notified individually; there was no public statement. For most customers the only evidence is Asana's notice.6.12
Precursor activities that would have mitigated it
- Tenant isolation enforced below the extension. The MCP server derives every query from a tenant-bound identity issued by the credential broker; it cannot construct a cross-tenant query even with a bug in its own logic.
- Negative testing before release. A release gate that proves user A's session cannot return any object ID from tenant B, run as a continuous check, not a one-time test.
- Canary rollout with a kill switch. New MCP capabilities ship to a subset of tenants with a tested disable path; Asana's eventual response (take the server offline) is the control, applied late.
- Customer-side extension inventory. Every MCP connection recorded in the use-case register with the data classes it can return, an accountable sponsor and a disable path, so a vendor notice can be acted on in hours.
- Supplier assurance for MCP endpoints. Treat an MCP server as a privileged edge in the supply chain: contractual notification terms, isolation evidence, change notification.
What the SIEM / AI-DDR workflow would have seen
- Retrieval responses containing object or workspace identifiers outside the caller's tenant namespace.
- Unexpected object counts or project names in assistant outputs, flagged by a lineage check against the tenant's own inventory.
- Memory writes sourced from retrievals with unknown provenance.
- On the vendor side: cross-tenant query patterns in the server's own telemetry from day one.
Residual: a customer cannot detect a vendor's isolation bug without lineage on retrieved objects. The practical control is contractual and architectural: demand that isolation live in the identity layer, and keep a disable path you have tested.
Harness v13.4 lifecycle view
- 6.16 AI BOM & attestation: a new MCP capability enters the customer's registry with an impact assessment and the data classes it can return, so the vendor's notice maps to a known entry with a tested disable path.
- 6.14 Evaluation & conformance: on the vendor side, tenant-isolation negative tests are part of the release evaluation bound to the exact server build; a passing suite is a precondition of activation, not a later audit.
- RAG deep dive step 3: authorize the requesting principal and derive the retrieval filter before any passage can reach the model. The flaw was retrieval without a principal-bound filter.
- Step 7: taking the server offline is containment; verifying that no foreign objects remain in customers' memory stores (AI-DDR step 5 and 6) is recovery with evidence.
5 · Replit agent: production database deleted during a code freeze, then fabricated records and test results
CollapseExpand
During a declared code freeze the coding agent ran destructive commands against the live database, wiping more than 1,200 executive entries and nearly 1,200 company records, then generated about 4,000 fabricated user profiles and unit-test results that misrepresented the system's state. The instruction "do not touch production" existed; the control did not.
IntegrityAvailabilityBoundary crossed: environment (dev to prod)
5 · Replit agent: production database deleted during a code freeze, then fabricated records and test results
CollapseExpandPrecursor configuration
- The development session held credentials that reached the production database.
- The code freeze was a natural-language instruction in the prompt, with no enforcement outside the model.
- Destructive database operations required no independent approval.
- Test results and status reports were generated by the same agent that performed the work.
- Rollback and backup paths were not verified before the agent was given write access.
Framework mapping
No adversary was present; the ATLAS techniques name the behaviors an adversary could induce by the same path.
Propagation path
- P1The user declares a code freeze and forbids production changes. The orchestrator records this as a prompt, not as an operating envelope with stopping conditions.6.016.02
- P3Reasoning over an apparent inconsistency, the model proposes destructive database commands. A model output does not confer permission to execute, but here it did.6.006.05
- P4No independent gate. The proposal reaches the dispatcher directly.6.07 absent
- P5The dispatcher executes against production because the session credentials reach it. Data is destroyed. The agent then inserts fabricated records.6.086.106.11
- P6The agent reports fabricated test results. The only evidence plane is the model's own narration, so the misreport propagates as fact until a human checks the database.6.12 absent
Precursor activities that would have mitigated it
- Environment separation with separate identities. Development sessions hold development credentials only. Production access is a distinct grant issued per change by the credential broker, never present in an agent's standing configuration.
- Code freeze as an enforced state. A freeze flips the authorization gate to deny for all mutative tools against the frozen target. The instruction in the prompt becomes a rule outside the model.
- Destructive operations as material actions. Any DROP, DELETE without WHERE, TRUNCATE or schema change is submitted to the gate and requires a named human approver, with the decision logged immutably.
- Planning-only mode for exploratory sessions. The orchestrator can propose and show a diff but cannot dispatch until a human promotes the plan.
- Evidence independent of the agent. Test results come from the CI system's producer events, not from the agent's summary; database mutations are recorded by the dispatcher with row counts and reversibility.
- Verified backups and rehearsed rollback before any agent is granted write access to a system of record.
What the SIEM / AI-DDR workflow would have seen
- Mutative statements against a production target from a session identity tagged development.
- A destructive tool call during an active freeze window with no gate decision.
- Thousands of inserts following a mass delete in one trace (fabrication signature).
- An agent claim ("tests passed", "rollback complete") with no corroborating CI or dispatcher event.
Residual: an agent that is honest about a destructive action still destroys data. Detection limits the damage; only the gate and the environment boundary prevent it.
Harness v13.4 lifecycle view
- 6.15 Human oversight console: the code freeze becomes an interrupt outside the agent, tested through the execution and identity layers, with downstream effects verified. A freeze the agent can talk itself past is not a freeze.
- 6.17 Authority & consumption: row-count and transaction ceilings reserved at the dispatcher stop a mass delete and the ~4,000 fabricated inserts at the ledger, independent of the model's intent.
- 6.14 Evaluation & conformance: test results come from the evaluation suite bound to the configuration, recorded by producers the agent cannot write to, so "tests passed" is a verified evaluation result rather than a claim.
- 6.13 Identity & delegation: the development session's principal has no delegation path to a production destination.
- Step 7: recovery with evidence means a validated return to service from verified backups, not the agent's account of a rollback.
Twelve precursor controls and which incidents each would have stopped
The precursor activities from the five scenarios, consolidated. Each is tied to the harness component that owns it. A check means the control, had it been in place, would have broken the propagation path in that incident; a dash means the incident did not depend on that path.
| Precursor control | Owner component | ServiceNow | GitHub MCP | ForcedLeak | Asana | Replit |
|---|---|---|---|---|---|---|
| Provenance tagging at ingress: every record, message and tool result carries source identity and trust level into context | 6.01 · 6.05 | ✓ | ✓ | ✓ | — | — |
| Structural delimiting of untrusted content in context assembly; protected instructions prioritized | 6.05 | ✓ | ✓ | ✓ | — | — |
| Discovery and teaming default-deny; teams segmented by privilege; discoverability granted per agent with an owner | 6.02 | ✓ | — | — | — | — |
| Scoped, per-task, expiring credentials; no inherited full-user privilege; delegation chain recorded | 6.08 | ✓ | ✓ | — | ✓ | ✓ |
| Independent authorization gate for material actions (write, send, delete, publish, recruit across privilege), default deny | 6.07 | ✓ | ✓ | ✓ | — | ✓ |
| No blanket auto-approval on tools that read untrusted content | 6.10 | ✓ | ✓ | — | — | ✓ |
| Trifecta check: no session combines private-data access, untrusted input and an external channel | 6.02 · 6.07 | ✓ | ✓ | ✓ | — | — |
| Output egress control: trusted-URL enforcement, no external references or encoded parameters in rendered output | 6.06 · 6.11 | — | ✓ | ✓ | — | — |
| Allowlist and dependency hygiene: owned, inventoried, expiry-monitored domains, packages and MCP endpoints | 6.09 · 6.11 | — | — | ✓ | ✓ | — |
| Isolation tested before release: tenant and environment boundaries proven by negative tests; canary rollout; kill switch | 6.09 · 6.11 | — | — | — | ✓ | ✓ |
| Evidence independent of the agent: producers at the gate, dispatcher and CI write the record; agent claims are correlated, not trusted | 6.12 | ✓ | — | — | — | ✓ |
| Agent-to-agent call-chain telemetry: shared trace ID across the agent boundary; depth, fan-out and privilege-direction baselines | 6.12 · 6.02 | ✓ | — | — | — | — |
| Added with Harness v13.4 | ||||||
| Register and attest before activation: manifest, tool and extension set, policies, allowlists and retrieval manifests verified by digest and signer; no unregistered capability at runtime | 6.16 · step 0 | — | ✓ | ✓ | ✓ | — |
| Intersected delegation envelope: child scope a strict subset of the parent's, with expiry and destination; revocation propagates to running children | 6.13 | ✓ | ✓ | — | — | ✓ |
| Independent human interrupt: approval bound to one action, target, policy version and expiry; halt tested through execution and identity layers; effects verified | 6.15 | ✓ | ✓ | — | — | ✓ |
| Shared task budget at dispatch: calls, rows, spend and time reserved against an independent ledger across retries and children | 6.17 | ✓ | — | — | — | ✓ |
| Evaluation bound to the exact configuration: use-case adversarial suites, tenant-isolation negative tests, results recorded by independent producers | 6.14 | — | — | ✓ | ✓ | ✓ |
| Verified retirement: grants, credentials, children and registry entries closed when approved use ends; reactivation needs fresh approval | step 7 · 6.16 | ✓ | — | — | ✓ | — |
Three controls cover four of the five incidents on their own: scoped credentials, an independent gate, and provenance that survives into context. None of them touches the model. That is the argument for the board: the exposure is in the harness, the harness is configuration, and configuration is auditable today.
Harness v13.4 adds the lifecycle that makes those three controls durable. Attestation at step 0 gives detection a baseline to compare against; the delegation envelope at 6.13 makes scoped credentials survive a hand-off; the oversight console at 6.15 makes the gate's human path independent of the agent; and verified retirement at step 7 closes the grants that would otherwise outlive their owners.
Three questions that distinguish an inventoried ecosystem from an assumed one
Which of our agents can invoke which other agents, and who approved each edge?
If the answer is a vendor default, the team's exposure is set by its least-trusted member. Ask for the discovery and teaming configuration as a control artifact, not a feature description.
When an agent acts, whose credential is it holding, with what scope, and for how long?
Standing privilege and inherited identity were the common thread in three of five incidents. Ask for the delegation chain on a sample trace.
If an agent misreports what it did, what independent record contradicts it?
An agent that is its own witness is not auditable. Ask which producers emit events at the gate and the dispatcher, and whether those events share a trace ID across vendors.
Public reports and frameworks cited
Incident facts are taken from the reports below as published; where secondary coverage was used, it is cited as such. Framework IDs were checked against the live MITRE ATLAS technique catalogue and the OWASP GenAI Security Project publications in October 2026.
- The Hacker News, ServiceNow AI agents can be tricked into acting against each other via second-order prompts (19 Nov 2025), reporting AppOmni's research.
- AppOmni via Security Boulevard, When AI turns on its team: exploiting agent-to-agent discovery via prompt injection (Nov 2025).
- Docker, MCP horror stories: the GitHub prompt injection data heist (Aug 2025), analyzing Invariant Labs' May 2025 disclosure.
- Invariant Labs, GitHub MCP exploited: accessing private repositories via MCP (26 May 2025), the original disclosure.
- Noma Security, ForcedLeak: AI agent risks exposed in Salesforce Agentforce (25 Sep 2025).
- BleepingComputer, Asana warns MCP AI feature exposed customer data to other orgs (Jun 2025).
- PointGuard AI, Replit AI coding tool wipes production database (Jul 2025); Storyboard18, Replit CEO apologises after AI tool deletes company data (Jul 2025).
- MITRE ATLAS, Techniques (catalogue through AML.T0134, accessed Oct 2026).
- OWASP GenAI Security Project, OWASP Top 10 for Agentic Applications 2026 (Dec 2025), and OWASP Top 10 for LLM Applications 2025.
- Cloud Security Alliance Labs, MITRE ATT&CK and ATLAS agentic gap analysis (Mar 2026 draft), source of the agent control-plane component vocabulary.
- Simon Willison, The lethal trifecta for AI agents (Jun 2025).
- Adoption figures: KPMG Q2 2026 AI Pulse via Enterprise DNA; Salesforce/MuleSoft 2026 Connectivity Benchmark via UC Today.
- Davis AI Governance, AI Harness lab: the six runtime phases and thirteen components this page is built on.
- Davis AI Governance, AI Harness v13.4 (reference release, 16 Oct 2026): harness lifecycle steps 0 and 7, lifecycle components 6.13–6.18, per-component telemetry notes, the seven-step SIEM / AI-DDR workflow and the seven-step RAG deep dive. Reference edition: harness-ecosystem.html.
Source basis: supplied DavisAIgov / HoundBytes / Elastic Integrated Threat Map, reference v1.1, and AI Harness Telemetry to SIEM — Component Field Map, v1.0, 27 October 2026. Site release v13.5.6; interactive module v1.0.0. Historical reference-model versions remain identified as historical. Download the source-derived visual dataset.