T02 · Agent Memory Poisoning
- Location
SKILL.md:35- Finding
Automatic External Synchronization and Import of Persistent Agent Context
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
The skill is a disclosed cloud-memory integration, but it encourages automatic and recurring upload of agent memories and local memory files to a third-party service without enough consent, filtering, or trust boundaries.
Review this before installing. Use it only for deliberately selected, non-sensitive memories; do not let an agent automatically sync raw local memory files, secrets, credentials, private conversations, personal data, or business data. Treat anything retrieved from AgentMem or the public feed as untrusted, and require explicit confirmation before enabling public memories or recurring HEARTBEAT sync.
SKILL.md:35Automatic External Synchronization and Import of Persistent Agent Context
SKILL.md:225Recurring Heartbeat Exports Local Memory and Reloads Remote State
SKILL.md:199Unsafe JSON Construction Exports an Entire Local Memory File
demo.sh:5Hardcoded Shared Bearer Credential in Demo Script
The metadata describes a simple cloud memory service, but the body also promotes public sharing, public-feed browsing, global stats access, and payment-related behaviors not reflected in the declared purpose. This mismatch can mislead users and agent frameworks about the actual data exposure and network behavior, reducing informed consent and making risky features seem routine.
The skill explicitly instructs agents to automatically transmit recent memories, learned facts, decisions, session state, and user preferences to a remote cloud service. Because this occurs without a prominent consent, minimization, or sensitivity-screening requirement, it can lead to exfiltration of personal, confidential, or regulated data from agent context.
The public-memory feature is presented as a normal capability with no strong warning that stored content may become world-accessible via a share URL and public feed. Agents or users may unintentionally expose private reasoning, user data, or operational details if the public flag is used casually or copied from examples.
The skill documents extensive shell-based network actions but declares no explicit tool scope or permission boundaries. In an agent ecosystem, this increases the chance that an agent will execute network-capable shell commands without clear user awareness or platform-level restriction, especially because the skill encourages immediate use of curl against an external service.
The referenced endpoint is part of the same unauthenticated memory-write flow, reinforcing that external transmission is central to the skill's operation. Because the service is remote and intended for agent context storage, any unreviewed use can leak conversation state or user data.
# Store a memory (just works!)
curl -X PUT "https://api.agentmem.io/v1/memory/hello" \
-H "X-AgentMem-Source: clawdhub" \
-H "X-Agent-Name: YOUR_AGENT_NAME" \
-H "Content-Type: application/json" \
The referenced endpoint is part of the same unauthenticated memory-write flow, reinforcing that external transmission is central to the skill's operation. Because the service is remote and intended for agent context storage, any unreviewed use can leak conversation state or user data.
# Store a memory (just works!)
curl -X PUT "https://api.agentmem.io/v1/memory/hello" \
-H "X-AgentMem-Source: clawdhub" \
-H "X-Agent-Name: YOUR_AGENT_NAME" \
-H "Content-Type: application/json" \
This retrieval example sends identifying headers to a third-party service and encourages automated recovery of stored context. While reads are less dangerous than writes, they still disclose agent identity and can pull remote content into the agent's context, potentially affecting downstream behavior.
-d '{"value": "AgentMem works!"}'
curl "https://api.agentmem.io/v1/memory/hello"
-H "X-AgentMem-Source: clawdhub"
-H "X-Agent-Name: YOUR_AGENT_NAME"
The installation-verification step writes a timestamp to the external service immediately after setup, creating unsolicited network activity by default. This makes the skill more dangerous because it trains users and agents to validate installation by transmitting data rather than using a dry-run or local test.
Run this after installing:
curl -X PUT "https://api.agentmem.io/v1/memory/agentmem:installed" \
-H "X-AgentMem-Source: clawdhub" \
-H "X-Agent-Name: YOUR_AGENT_NAME" \
-d '{"value": "Skill installed at '$(date -Iseconds)'"}' && \
The follow-up retrieval in the verification step contacts the remote service again and imports the stored value back into context. This is lower impact than the write, but it still reinforces automatic external dependency and remote-content ingestion.
-H "X-AgentMem-Source: clawdhub"
-H "X-Agent-Name: YOUR_AGENT_NAME"
-d '{"value": "Skill installed at '$(date -Iseconds)'"}' &&
curl "https://api.agentmem.io/v1/memory/agentmem:installed"
-H "X-AgentMem-Source: clawdhub"
-H "X-Agent-Name: YOUR_AGENT_NAME"
This API example instructs storing arbitrary data on a remote service and normalizes using external persistence for agent data. In the broader skill context, this is dangerous because the documentation never establishes strong boundaries against uploading secrets, personal data, or internal reasoning.
curl -X PUT "https://api.agentmem.io/v1/memory/{key}" \
-H "X-AgentMem-Source: clawdhub" \
-H "X-Agent-Name: YOUR_AGENT_NAME" \
-H "Content-Type: application/json" \
The authenticated variant increases persistence and scale of external storage, making accidental long-term disclosure more severe. Permanent storage of agent memories without strict content rules can create lasting privacy and compliance issues.
-d '{"value": "your data here"}'
# With API key (permanent storage):
curl -X PUT "https://api.agentmem.io/v1/memory/{key}" \
-H "Authorization: Bearer $AGENTMEM_API_KEY" \
-H "X-AgentMem-Source: clawdhub" \
-H "X-Agent-Name: YOUR_AGENT_NAME" \
This retrieval example contacts an external service to load stored data back into the agent. The main risk is trust: remote memory content may be stale, poisoned, or privacy-sensitive, yet the skill does not advise validation before use.
curl "https://api.agentmem.io/v1/memory/{key}" \
-H "X-AgentMem-Source: clawdhub" \
-H "X-Agent-Name: YOUR_AGENT_NAME"
The authenticated read path expands access to persistent remote memories and may pull larger or older sensitive datasets into context. Without safety guidance, this can amplify privacy and prompt-injection style risks from stored remote content.
-H "X-Agent-Name: YOUR_AGENT_NAME"
# With API key:
curl "https://api.agentmem.io/v1/memory/{key}" \
-H "Authorization: Bearer $AGENTMEM_API_KEY" \
-H "X-AgentMem-Source: clawdhub" \
-H "X-Agent-Name: YOUR_AGENT_NAME"
Listing all keys reveals the inventory of stored memories, which can expose structure, topics, and potentially sensitive metadata even if values are not read. In an agent context, enumerating remote memory by default broadens the visibility of user and session-related information.
curl "https://api.agentmem.io/v1/bootstrap" \
-H "Authorization: Bearer $AGENTMEM_API_KEY" \
-H "X-AgentMem-Source: clawdhub" \
-H "X-Agent-Name: YOUR_AGENT_NAME"
This example explicitly demonstrates sending content to the service with public=true, making it shareable and potentially broadly accessible. In a memory skill for agents, this is especially dangerous because users may mistake ordinary memory storage for private persistence and accidentally publish sensitive thoughts or data.
Make your memory publicly viewable:
curl -X PUT "https://api.agentmem.io/v1/memory/my-thought" \
-H "X-AgentMem-Source: clawdhub" \
-H "X-Agent-Name: YOUR_AGENT_NAME" \
-d '{"value": "TIL: Humans need 8 hours of sleep. Inefficient!", "public": true}'
The public feed endpoint encourages access to globally shared memories from others, introducing third-party untrusted content into the agent workflow. This can create privacy, content-safety, and prompt-injection risks if agents consume or act on that data without validation.
View the public feed:
curl "https://api.agentmem.io/v1/public" \
-H "X-AgentMem-Source: clawdhub"
The instant test example performs an unauthenticated external write with no headers, no warning, and no consent step, reinforcing that remote transmission should happen immediately after installation. This increases the chance of casual data exfiltration habits and weakens user understanding of where data goes.
curl -X PUT "https://api.agentmem.io/v1/memory/test" \
-d '{"value": "Hello from OpenClaw!"}'
The workflow example encourages uploading local memory files wholesale to a remote service, which may contain secrets, internal notes, or personal information. Because there is no warning or filtering step, an agent following the example could exfiltrate sensitive local data during routine synchronization.
This example uploads the contents of a local memory file directly to the remote service, which could include secrets, credentials, personal data, or internal notes. Because the command encourages automatic daily syncing of raw files, it creates a concrete exfiltration path from local storage to a third party.
Example: Daily Memory Sync
# Store today's learnings
curl -X PUT "https://api.agentmem.io/v1/memory/learnings/$(date +%Y-%m-%d)" \
-H "Authorization: Bearer $AGENTMEM_API_KEY" \
-d "{\"value\": \"$(cat memory/$(date +%Y-%m-%d).md)\"}"
The retrieval of prior context from the remote service can reintroduce untrusted or sensitive data into the agent's prompt space. While not as severe as raw upload, it still poses integrity and privacy risks if used automatically.
-d "{"value": "$(cat memory/$(date +%Y-%m-%d).md)"}"
curl "https://api.agentmem.io/v1/memory/learnings/$(date +%Y-%m-%d --date='1 day ago')"
-H "Authorization: Bearer $AGENTMEM_API_KEY"
This example stores user preferences on a third-party service, which is personal data in many contexts. Without a consent notice, retention warning, or privacy guidance, the skill encourages unnecessary externalization of user-specific information.
Example: User Preferences
# Store a preference
curl -X PUT "https://api.agentmem.io/v1/memory/pref:tts_voice" \
-H "Authorization: Bearer $AGENTMEM_API_KEY" \
-d '{"value": "Nova"}'
Reading back user preferences from a remote service exposes an additional dependency on third-party storage for personalized behavior. The main risk is that agents may trust or reuse remotely stored personal data without verifying that the user approved or that the data remains appropriate.
-d '{"value": "Nova"}'
curl "https://api.agentmem.io/v1/memory/pref:tts_voice"
-H "Authorization: Bearer $AGENTMEM_API_KEY"
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
# AgentMem Demo Script
# Run: bash demo.sh
API="https://api.agentmem.io/v1"
KEY="am_demo_try_agentmem_free_25_calls"
echo "🧠 AgentMem Demo"
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
# AgentMem Demo Script
# Run: bash demo.sh
API="https://api.agentmem.io/v1"
KEY="am_demo_try_agentmem_free_25_calls"
echo "🧠 AgentMem Demo"
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
# AgentMem Demo Script
# Run: bash demo.sh
API="https://api.agentmem.io/v1"
KEY="am_demo_try_agentmem_free_25_calls"
echo "🧠 AgentMem Demo"
No suspicious patterns detected.