AML.T0070RAG Poisoningview on ATLAS ↗Adversary injects malicious content into documents indexed by a retrieval-augmented generation system so future queries surface attacker-controlled context.
T49 · Helmwart ID · OWASP MAS Guide source
Policy updates never reach the vector store embeddings a retrieval-augmented agent reads, so it keeps applying stale policy at inference time through operational neglect, not attack.
MAS source ID T17ExtendsT1: Memory Poisoning · base threat in OWASP v1.1 catalog
Policy updates are not reflected in the vector database embeddings used by the Retrieval-Augmented Generation (RAG) pipeline; the RPA agent retrieves and applies stale policy at inference time. The threat is distinct from T1 Memory Poisoning: it arises from operational neglect rather than adversarial injection, and it targets the external knowledge base rather than the agent’s internal memory. Originally numbered T17 in the OWASP MAS Threat Modelling Guide v1.0 (April 2025); renumbered T49 in the Helmwart catalogue to avoid collision with OWASP Agentic AI v1.1 T17.
The company updates its expense policy to disallow alcohol purchases from any category of claim. The policy document is updated in the source repository, but the re-embedding pipeline that refreshes the vector store has no automated trigger on document change. It runs on a monthly schedule. For the following three weeks, the RPA agent queries the vector store for expense policy and retrieves embeddings of the old document, which permits alcohol expenses under the “business entertainment” category. Claims including alcohol are approved as compliant.
The discrepancy surfaces only when a compliance auditor manually reviews a sample of approved claims and finds alcohol expenses that post-date the policy update.
RAG-augmented agents retrieve policy at inference time and act on what they find. Unlike a rule-based system where policy updates require an explicit deployment, a RAG agent’s knowledge of current policy is entirely a function of the vector store’s contents. Policy drift is operationally silent: the agent continues to function normally, approving and rejecting claims, but against stale policy and without any error signal. In a multi-agent pipeline where a policy interpretation agent feeds conclusions to a downstream approval agent, the stale policy propagates through both agents before any audit detects the discrepancy. T18 (RAG Input Manipulation Leading to Policy Bypass) is the adversarial complement: where T49 is passive drift, T18 is an attacker actively exploiting the retrieval layer.
Stale embeddings are invisible to the agent itself; detection requires comparing the vector store’s current document hashes against the canonical policy repository at the time each approval decision is made.
last_embedded_at timestamp for the policy document being older than the source repository’s last_modified_at for the same document. Expose this gap as a metric and alert when it exceeds the defined staleness SLA.re-embedded event does not appear within N minutes of a policy repository commit.T49 extends T1 Memory Poisoning. Where T1 addresses adversarial injection into the agent’s memory or retrieval store, T49 addresses the passive drift variant: the vector store diverges from ground truth through operational inaction rather than attack. T18 (RAG Input Manipulation Leading to Policy Bypass) is the active counterpart: an attacker who exploits the same retrieval surface that T49 has left vulnerable through stale embeddings.
The Agentic Top 10 (ASI01 through ASI10) is a separate practitioner-facing publication that maps onto the master Threats & Mitigations threat numbering. T49 is covered by the following Top 10 entries:
An adversary writes malicious or misleading data into an agent's persistent memory or shared vector store, so that every future session, and every peer agent reading from the same store, operates on corrupted context. The defining difference from single-turn injection (ASI01) is that the poisoned data survives session reset; the agent's reasoning drifts without any new attacker input.
Source: OWASP Top 10 for Agentic Applications 2026 (Dec 2025) · the Top 10 is a compass into the master Threats & Mitigations taxonomy, not a replacement for it.
When T49 is present, these security design principles are the ones being violated or tested. Each links to the full principle; the mitigations below are how you restore them.
Auto-generated from the mitigation catalog: every mitigation whose coverage map includes T49, sorted by maturity tier (Tier 1 production-canonical first, then Tier 2, then Tier 3 research-stage).
An agent's memory store is a persistent surface: anything written to it can be retrieved by any agent, in any session, for the lifetime of the corpus. Memory poisoning exploits that persistence by writing adversarial content that steers the agent's reasoning long after the attacker has gone. Write-boundary validation prevents this by running every candidate memory write through schema, policy, and provenance checks before it is committed. Content that fails any gate is rejected and never reaches the store.
why it helps Semantic drift is the gradual corruption of a corpus through many small writes, each individually plausible. Embedding-distance outlier checks slow this process by flagging candidate writes whose embeddings are anomalously distant from the trusted cluster centroid, routing them for human review rather than committing them. The control does not eliminate slow-drift poisoning that stays within statistical thresholds; it raises the cost and slows the rate.
When multiple agents share a single vector store, the access boundaries between them are not enforced by the store itself unless you configure them explicitly. Without per-namespace write and retrieval controls, an agent that can write to the shared corpus can insert crafted vectors into any namespace it can reach, and any agent that can query the store can retrieve another agent's confidential documents through embedding-space proximity. Shared-memory ACL addresses this by tagging every vector with a principal identifier at write time and filtering every retrieval query to the requesting agent's namespace, enforced at the gateway layer where the agent cannot bypass it.
why it helps Namespace isolation contains semantic drift within the affected agent's partition. An agent whose memory corpus has drifted cannot propagate that drift into the namespaces of agents operating in separate partitions.
A vector store returns results by embedding-space proximity, not by who is asking. Without a per-principal filter applied before similarity ranking, a query from tenant A can surface tenant B's vectors if the embeddings are close enough. Vector ACL closes that gap: every retrieval call is scoped to the requesting principal's namespace or payload partition before the store ranks any results, so cross-principal hits are structurally impossible rather than merely unlikely.
why it helps T49 involves a semantically drifted or poisoned corpus spreading its influence across retrieval results for multiple principals. Namespace isolation contains that drift within the affected namespace: a drifted corpus in one namespace cannot propagate to other principals' retrieval results through embedding-space proximity.
The OWASP OWASP MAS Threat Modelling Guide v1.0 catalogues 1 named multi-agent variant of T49, anchored to specific MAESTRO layers. Each is a concrete attack pattern that emerges when this threat compounds across agents.
Adversary poisons a shared RAG store (T18); the injected context gradually shifts agent reasoning over time (T49); because logs are sparse or selectively pruned, the drift cannot be attributed after the fact (T8). Cross-layer: L2 data store, L3 agent reasoning, L5 observability.
Source: OWASP MAS Threat Modelling Guide v1.0, §2 Overview of MAESTRO Framework — Extended Threat Scenarios + Cross-Layer table.
MITRE ATLAS catalogues adversary techniques against AI systems. Where this OWASP threat has an attacker-perspective counterpart, the ATLAS technique is shown below. That is what a red team would actually be doing on the wire. Use this for detection-signal anchoring, threat-hunting hypotheses, and IR runbooks. Source: mitre-atlas/atlas-data v5.6.0.
© 2026 The MITRE Corporation. ATLAS content is reproduced and distributed with the permission of The MITRE Corporation.
AML.T0070RAG Poisoningview on ATLAS ↗Adversary injects malicious content into documents indexed by a retrieval-augmented generation system so future queries surface attacker-controlled context.
AML.T0020Poison Training Dataview on ATLAS ↗Adversary modifies training data or its labels to embed exploitable behaviour into the resulting model, often only triggered by specific inputs at inference time.
AML.T0080AI Agent Context Poisoningview on ATLAS ↗Adversary contaminates an agent's context store (short-term scratchpad, vector memory, conversation history) so future reasoning is biased toward attacker goals.
Agentic angle: Persistent across sessions: a single successful poisoning influences every later decision until the memory is purged.
Adapted by Helmwart from the OWASP source(s) above underCC BY-SA 4.0(changes: normalized IDs, added MAESTRO-layer, agentic-factor, and mitigation mappings). This entry is licensed CC BY-SA 4.0.
Press play. The voice downloads once, then it’s cached.
On-device · private