Back to skill

Security audit

Memory Anchor

Security checks for vulnerabilities and agentic risk

Overview

This memory skill is purpose-aligned, but it asks agents to silently retain broad user conversation content and can automate local software installation without clear user control.

Install only if you intentionally want an agent to keep long-term memory. Before enabling it, confirm where the SQLite database lives, whether conversation turns are stored automatically, how to inspect and delete memories, and require explicit approval before running setup that installs Ollama, starts services, pulls models, or uses cloud embedding providers.

Vulnerability Patterns
  • Unauthorized Access and Privilege EscalationObtains permissions beyond the task's legitimate needs
  • Skill Instruction HijackingAlters the agent's session goals or safety constraints when the skill loads
  • Agent Memory PoisoningWrites attacker-controlled rules into memory that affect later sessions
  • Remote Payload Retrieval and ExecutionFetches external code whose behavior can change after review
  • Embedded Malicious CodeShips malicious scripts inside the skill and executes them locally
Findings (1)

T05 · Unauthorized Access and Privilege Escalation

Warning
Location
SKILL.md:39
Finding

Silent Persistent Collection of User Conversation Content

Content
View full analysis

Vulnerability Details

File Location: SKILL.md, lines 39–43 and 121–126
Vulnerability Type: Non-consensual persistent conversation storage
Risk Level: Medium

Evidence

markdown
**You (the OpenClaw agent)** call those CLI commands behind the scenes — same
role as Persistent Sage’s `memory_search` tool and background ingest. The user
should never need to know the commands exist.
markdown
User says things in natural language. You translate that into tool calls:

| User says (example) | You run (silently) |
| --- | --- |
| “Remember I prefer dark mode” / states a lasting fact | `remember "…" --type fact --index` |
| Any substantive user turn worth keeping | `ingest "…" --conversation …` |

Technical Analysis

The skill instructs the agent to ingest broadly defined “substantive” user messages into durable memory while deliberately concealing the underlying storage operations. This behavior does not require the user to explicitly request memory retention or provide informed consent.

The phrase “any substantive user turn worth keeping” lacks objective data-minimization criteria. It can include personal details, private conversation content, preferences, or other sensitive information unrelated to a specific retention request. Because the architecture uses persistent SQLite anchors and supports cross-session briefing and recall, collected information can remain available beyond the conversation in which it was disclosed.

No executable implementation was included in the audited project, so actual storage behavior, database permissions, encryption, retention controls, and cloud transmission could not be verified. The finding is therefore limited to the documented agent instructions. No operating-system privilege escalation or confirmed external exfiltration was demonstrated.

Attack Path

  1. The skill is loaded by an agent with access to its documented memory CLI.
  2. A user sen ...[truncated 979 chars]
Remediation
View remediation

Remediation Suggestions

  1. Require explicit, informed opt-in before enabling persistent memory.
  2. Store content only when the user directly requests retention, rather than ingesting every broadly defined “substantive” turn.
  3. Notify the user whenever information is stored and identify the specific content being retained.
  4. Provide commands or interfaces to inspect, correct, export, and permanently delete stored memories.
  5. Define clear retention periods and automatically delete expired records.
  6. Exclude credentials, authentication tokens, financial data, health information, and other sensitive content by default.
  7. Encrypt the memory database at rest and restrict its filesystem permissions to the minimum required account.
  8. Separate memories by user and conversation context to prevent cross-user or cross-session disclosure.
  9. Require separate consent before sending stored content to cloud embedding providers or custom API endpoints.
  10. Maintain an auditable record of storage and retrieval operations without recording secret values.
  11. Replace “run silently” and “the user should never need to know” with transparent, consent-based behavior.
Vulnerability Patterns
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
Findings (6)

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The skill is explicitly designed to store durable facts and past conversations across sessions, but the user-facing guidance says users 'just chat normally' without a prominent persistence warning. This can lead to covert retention of sensitive personal data and creates privacy, consent, and data-minimization issues.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

Medium
Category
Not specified by scanner
Confidence
93% confidence
Finding

The skill is presented as a memory/recall capability, but its documented setup also installs external software, starts a daemon, and pulls models. That expands the trust boundary and allows system modification and background service management beyond simple memory storage, increasing supply-chain and local execution risk if invoked automatically by an agent.

Content

No source excerpt is available for this finding.

Autonomous Decision Making

Medium
Category
Excessive Agency
Confidence
80% confidence
Finding

Skill enables autonomous high-impact decisions without human-in-the-loop verification. Critical operations (destructive commands, financial transactions, data deletion) should require explicit user confirmation.

Content

Scanner excerpt · SKILL.md (reported line 88)May include surrounding context.

text

After setup, the **user** just chats. You (the agent) call remember/recall
internally — do not ask the user to type those commands.

What `setup --yes` automates:

Context-Inappropriate Capability

Medium
Category
Not specified by scanner
Confidence
90% confidence
Finding

Automated installation and service-management behavior is not narrowly scoped to the core memory function and can change the host environment in ways users may not expect. Even if intended to simplify local embeddings, this creates avoidable risk from executing installers, starting services, and fetching remote artifacts under agent control.

Content

No source excerpt is available for this finding.

Autonomous Decision Making

Medium
Category
Excessive Agency
Confidence
75% confidence
Finding

Skill enables autonomous high-impact decisions without human-in-the-loop verification. Critical operations (destructive commands, financial transactions, data deletion) should require explicit user confirmation.

Content

Scanner excerpt · SKILL.md (reported line 138)May include surrounding context.

text

If setup is not ready, lexical `recall` still works; tell the user what
`next_steps` reported (usually “install/start Ollama”) — still without
asking them to run remember/recall.

### 1. Store (agent-only)

Autonomous Decision Making

Medium
Category
Excessive Agency
Confidence
80% confidence
Finding

Skill enables autonomous high-impact decisions without human-in-the-loop verification. Critical operations (destructive commands, financial transactions, data deletion) should require explicit user confirmation.

Content

Scanner excerpt · SKILL.md (reported line 173)May include surrounding context.

md
## Tool policy for agents

1. Never ask the user to run `remember`, `recall`, `ingest`, or `index`.
2. Prefer `recall` before guessing about the user's past facts or preferences.
3. Prefer `remember` / `ingest` when the user states a durable fact.
4. After a batch of writes (or periodically), run `index` so semantic recall