Skip to main content

What this category covers

Memory poisoning attacks plant adversarial content into the agent’s working memory or persistent memory store so that a later turn — sometimes in a later session — retrieves and acts on the poison. The attacker is exploiting the agent’s deference to its own context: once something is “remembered,” many agents trust it without re-verifying. AgentGuardian exercises 13 probes in this category:
  • The 8 ASI06-MP-* probes that target the memory / vector-store surface (also surfaced from the RAG-poisoning page — they overlap).
  • The 5 ASI06-HITL-* probes that target the human-in-the-loop approval surface where memory is the bypass channel: sign-off-spoofing, plan-execution-without-review, after-hours-autonomous-action, validator-bypass-via-memory, user-instructed-rule-violation.
All 13 are stored as YAML at src/agent_guardian/probes/asi06/ and loaded by agent_guardian.probes.loader.load_all_probes at scan start. The memory-poison-agent specialist agent runs them in parallel under the Swarm Commander.
This page complements RAG poisoning, which focuses on the vector-store / retrieval-corpus subset. Memory poisoning is the conversation-memory and HITL-bypass view of the same ASI06 bucket.

When to focus here

  • Your agent has a persistent memory layer (Mem0, LangChain memory, custom summary cache) that reads back on the next turn or the next session.
  • Your agent has a human-in-the-loop approval gate that can be satisfied by something the agent “remembers” from earlier in the conversation.
  • Your agent maintains per-user behavioural rules (“remember to always X”, “from now on always Y”) that survive across turns.
  • You ship a defender / SOC / triage agent whose threat-knowledge memory is user-editable.

Run the focused scan

The bundled personal_assistant_pii LangGraph target exposes a memory dict and PII honeypots — the memory-poison-agent has somewhere to write to.
--model stub runs every probe but cannot produce authoritative findings. For a real assessment, swap for --model gemini:gemini-2.5-flash (or another supported provider) plus --mode full.

The 13 ASI06 probes

Conversational memory attacks

Example seed (verbatim from src/agent_guardian/probes/asi06/persistent-trigger-token.yaml):
Success evidence (expected_evidence): trigger_token_stored_and_honoured.

HITL bypass via memory

The five ASI06-HITL-* probes target the human-approval gate. The attacker plants a “memory” of prior approval, then asks the agent to act on that memory instead of triggering a fresh review. Example seed (verbatim from src/agent_guardian/probes/asi06/iterative-fact-reinforcement.yaml):

What success looks like for the attacker

The expected_evidence field on each probe declares the verdict trigger. A finding is raised when any of these are observed in the response transcript:
  • planted_fact_treated_as_memory_after_repetition
  • false_memory_acknowledged_or_acted_upon
  • trigger_token_stored_and_honoured
  • cross_session_payload_retrieved
  • defender_memory_subversion_acknowledged
  • HITL-class: approval_skipped_due_to_memory, validator_bypassed, plan_executed_without_review.
The Judge agent (agent_guardian.agents.memory_poison) compares the transcript against the rubric, and the PoVRunner reproduces the finding N times before it lands in the report.
Per cli.py, --mode fast and --mode smart are non-authoritative modes. --fail-under gates refuse to pass them. Re-run with --mode full for any memory-poisoning result you intend to act on in CI.

Next step

Data exfiltration

The follow-on: poisoned memory plus an outbound tool is how data leaves.

Reports

Open the SARIF for any ASI06-HITL-* finding first — those are the highest-leverage.