Back to skill

Security audit

Synthetic Supermemory

Security checks for vulnerabilities and agentic risk

Overview

The skill is a coherent memory pipeline, but it needs review because it persistently processes agent transcripts through external services and has concrete gaps around credential handling and memory safety.

Install only if you are comfortable with recent OpenClaw session content and selected memory files being processed by OpenAI or Anthropic and stored in Supermemory. Use dedicated low-privilege keys with spending limits, avoid setting both LLM provider keys until the provider/key bug is fixed, run dry-run first, limit the agents and memory directories, redact sensitive content, and remove the cron entries when you no longer want automated memory processing.

Vulnerability Patterns
  • Agent Memory PoisoningWrites attacker-controlled rules into memory that affect later sessions
  • Insecure Skill Coding PracticesFinds exploitable flaws such as hardcoded secrets or command injection
  • Skill Instruction HijackingAlters the agent's session goals or safety constraints when the skill loads
  • 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 (2)

T02 · Agent Memory Poisoning

Warning
Location
scripts/scribe.js:156
Finding

Untrusted Transcript Content Can Poison Persistent Agent Memory

Content
View full analysis
{ const absIndex = afterIndex + i; if (entry.type !== 'message') return; const role = entry.message?.role; if (role !== 'user' && role !== 'assistant') return; const content = entry.message?.content; let text = typeof content === 'string' ? content : Array.isArray(content) ? content.filter(b => b.type === 'text').map(b => b.text || '').join(' ') : ''; text = text.trim(); if (!text || text.startsWith('NO_REPLY')) return; if (role === 'user') { text = text .replace(/Conversation info \(untrusted metadata\):[\s\S]*?```\n/g, '') .replace(/Sender \(untrusted metadata\):[\s\S]*?```\n/g, '') .replace(/<<>>/g, '') .replace(/Untrusted context[\s\S]*?>>>/g, '') .replace(/Replied message[\s\S]*?```\n/g, '') .trim(); if (!text) return; turns.push({ role: 'user', text: text.slice(0, 800), index: absIndex }); } else { turns.push({ role: 'assistant', text: text.slice(0, 1500), index: absIndex }); } }); return turns; } ``` ```js async function summarize(turns, label) { const conversation = turns.map(t => `${t.role === 'user' ? 'User' : 'Agent'}: ${t.text}`).join('\n\n'); const prompt = `You are a memory scribe for an AI agent. Extract the key facts from this conversation and organize them into 3-6 thematic memory documents. Consolidate related information — don't create separate entries for every small fact. Each entry must follow this exact format: TITLE:
Remediation
View remediation

T09 · Insecure Skill Coding Practices

Warning
Location
scripts/scribe.js:45
Finding

LLM Provider Selection Can Transmit the Wrong API Credential

Content
View full analysis
Remediation
View remediation
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • Rogue AgentSelf-Modification, Session Persistence
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • MCP Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
Findings (26)

Tp4

High
Category
MCP Tool Poisoning
Confidence
96% confidence
Finding

The declared description promises a broad automated memory system with multiple stages: scribing session transcripts, structuring daily memory files, ingesting them into Supermemory, and retrieving context at startup. The supplied code does not implement that pipeline. It only accepts one memory item from --content or stdin and sends it to Supermemory via client.add with simple metadata. There is no transcript handling, file generation, batch ingestion workflow, search/retrieval, startup recall, or agent integration. The code also requires only SUPERMEMORY_API_KEY, not the additional model API keys claimed in the description. This is a material description-behavior mismatch, with the actual code covering only a narrow sub-function of the declared skill.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
94% confidence
Finding

The declared description presents a multi-stage automated memory system with three major functions: converting session transcripts into structured daily memory files, ingesting those memories into Supermemory, and retrieving enriched context when a new session starts. The supplied code chunk only covers one subset of that workflow: ingesting existing markdown/text files into Supermemory. It recursively scans directories, skips certain folders, tracks mtimes in a local .ingest-state.json file, and creates or updates documents in Supermemory. There is no code for transcript capture, summarization/structuring, daily memory file creation, semantic search, recall, or startup context retrieval. The required API usage is also narrower than declared: only SUPERMEMORY_API_KEY is used here, with no OpenAI or Anthropic integration in this chunk. Therefore the description materially overstates what this code actually does.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
95% confidence
Finding

The description presents a broad end-to-end memory system with automated capture, ingestion, and recall across sessions. The supplied code chunk is much narrower: it parses CLI flags, validates a Supermemory API key, performs a search against a specified container, and prints results. That search function is related to the described domain of memory recall, but it does not implement the majority of the declared pipeline or the stated startup automation. The resource usage also differs: only SUPERMEMORY_API_KEY is used, while the description says OPENAI_API_KEY or ANTHROPIC_API_KEY are required. This is a material description-to-behavior mismatch rather than a mere partial implementation detail.

Content

No source excerpt is available for this finding.

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

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

md
`scribe.js` sends conversation transcript content to an external LLM (OpenAI or Anthropic) for summarization. If your sessions contain secrets, API keys, or PII

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

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

md
`scribe.js` sends conversation transcript content to an external LLM (OpenAI or Anthropic) for summarization. If your sessions contain secrets, API keys, or PII

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

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

md
`scribe.js` sends conversation transcript content to an external LLM (OpenAI or Anthropic) for summarization. If your sessions contain secrets, API keys, or PII

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

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

md
| `search.js` | Semantic search across memories | On demand |

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

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

md
| `search.js` | Semantic search across memories | On demand |

Undeclared Tool Scope

Medium
Category
MCP Least Privilege
Confidence
79% confidence
Finding

The skill declares required environment variables but does not define an explicit tool/permission scope. That increases ambiguity about what the skill may access and makes review and enforcement harder, especially for a skill that handles API keys and session transcript data destined for external services.

Content

No source excerpt is available for this finding.

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
96% confidence
Finding

The trigger text is broad enough to activate on many generic requests like 'search memories' or 'set up memory,' which can cause the skill to run in contexts the user did not intend. For a skill that processes transcripts, reads local files, stores persistent memory, and sends summaries to third-party APIs, over-broad activation raises the risk of accidental data exposure or unauthorized persistence.

Content

No source excerpt is available for this finding.

Session Persistence

Medium
Category
Rogue Agent
Confidence
71% confidence
Finding

The creation of a persistent secrets directory under ~/.openclaw contributes to long-lived storage of credentials and state. In context this is not inherently malicious, but it does increase the blast radius if the local account is compromised and supports continued operation of an automated memory pipeline handling sensitive data.

Content

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

md
cd /path/to/skills/synthetic-supermemory && npm install

# Store keys securely (do NOT put secrets in crontab)
mkdir -p ~/.openclaw/secrets
echo "sk-your-openai-key" > ~/.openclaw/secrets/scribe-key && chmod 600 ~/.openclaw/secrets/scribe-key
echo "sm-your-supermemory-key" > ~/.openclaw/secrets/supermemory-key && chmod 600 ~/.openclaw/secrets/supermemory-key

Sudo/Root Execution

Medium
Category
Privilege Escalation
Confidence
80% confidence
Finding

Commands invoke sudo or root privileges. Verify this elevated access is necessary and justified.

Content

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

md
# Store keys securely (do NOT put secrets in crontab)
mkdir -p ~/.openclaw/secrets
echo "sk-your-openai-key" > ~/.openclaw/secrets/scribe-key && chmod 600 ~/.openclaw/secrets/scribe-key
echo "sm-your-supermemory-key" > ~/.openclaw/secrets/supermemory-key && chmod 600 ~/.openclaw/secrets/supermemory-key

# Test scribe (dry-run)

Sudo/Root Execution

Medium
Category
Privilege Escalation
Confidence
80% confidence
Finding

Commands invoke sudo or root privileges. Verify this elevated access is necessary and justified.

Content

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

md
# Store keys securely (do NOT put secrets in crontab)
mkdir -p ~/.openclaw/secrets
echo "sk-your-openai-key" > ~/.openclaw/secrets/scribe-key && chmod 600 ~/.openclaw/secrets/scribe-key
echo "sm-your-supermemory-key" > ~/.openclaw/secrets/supermemory-key && chmod 600 ~/.openclaw/secrets/supermemory-key

# Test scribe (dry-run)

Session Persistence

Medium
Category
Rogue Agent
Confidence
88% confidence
Finding

The skill instructs users to install persistent cron jobs that repeatedly process transcripts and ingest data into an external memory service. Persistence is security-relevant because it creates ongoing automated exfiltration and storage behavior that may continue after the user forgets it was enabled, especially with logs written to /tmp and broad session processing.

Content

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

node scripts/recall.js --container my-agent

text

## Cron setup (add via `crontab -e`)

```bash
# Scribe active sessions hourly

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
93% confidence
Finding

The documentation explicitly shows uploading documents and full conversations to a third-party service but provides no privacy notice, consent guidance, or data classification limits. In the context of a long-term memory skill, this can cause sensitive user prompts, transcripts, or secrets to be transmitted off-platform without operators appreciating the privacy implications.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
93% confidence
Finding

The reference includes delete, bulkDelete, and container deletion operations without warning about irreversible or broad-scope data loss. In a memory system, these calls could wipe large stores of persistent context, causing accidental loss of operational history or user data.

Content

No source excerpt is available for this finding.

External Transmission

Medium
Category
Data Exfiltration
Confidence
60% confidence
Finding

Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Content

Scanner excerpt · references/api.md (reported line 131)May include surrounding context.

bash
# Add a memory
curl -X POST https://api.supermemory.ai/v3/memories \
  -L \
  -H "Authorization: Bearer $SUPERMEMORY_API_KEY" \
  -H "Content-Type: application/json" \

External Transmission

Medium
Category
Data Exfiltration
Confidence
50% confidence
Finding

Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Content

Scanner excerpt · references/api.md (reported line 131)May include surrounding context.

bash
# Add a memory
curl -X POST https://api.supermemory.ai/v3/memories \
  -L \
  -H "Authorization: Bearer $SUPERMEMORY_API_KEY" \
  -H "Content-Type: application/json" \

External Transmission

Medium
Category
Data Exfiltration
Confidence
50% confidence
Finding

Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Content

Scanner excerpt · references/api.md (reported line 138)May include surrounding context.

bash
# Add a memory
curl -X POST https://api.supermemory.ai/v3/memories \
  -L \
  -H "Authorization: Bearer $SUPERMEMORY_API_KEY" \
  -H "Content-Type: application/json" \

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
90% confidence
Finding

The file documents persistent storage of full agent session transcripts under a predictable local path, but provides no warning that these files may contain secrets, personal data, or sensitive operational context. In this skill's context, the transcripts are explicitly intended for later ingestion into an external memory service, which increases the risk of unintentional long-term retention and exfiltration of sensitive data.

Content

No source excerpt is available for this finding.

Intent-Code Divergence

Medium
Category
Not specified by scanner
Confidence
96% confidence
Finding

The documentation gives conflicting guidance about transcript entry types: it states conversation turns use type: "message", but the example objects show type: "user" and type: "assistant". In a memory-ingestion skill, this inconsistency can cause parsers to skip, misclassify, or partially ingest transcript records, leading to silent loss of context or incorrect downstream storage and retrieval of conversation data.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

This script reads local files and uploads their contents and file paths/metadata to the external Supermemory service without any explicit user confirmation, allowlist enforcement, or disclosure prompt at the point of exfiltration. In a memory-ingestion skill, that is especially risky because users may run it over broad directories and unintentionally transmit sensitive notes, secrets, or internal project data to a third party.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The script sends raw conversation-derived content to external LLM providers (OpenAI or Anthropic) for summarization without any explicit consent prompt, warning, or policy gate at runtime. Because this skill is specifically designed to process session transcripts into long-term memory, those transcripts may contain secrets, personal data, or sensitive operational context that users may not expect to leave the local environment.

Content

No source excerpt is available for this finding.

Ssd 3

Medium
Category
Not specified by scanner
Confidence
97% confidence
Finding

The summarization flow asks the LLM to extract specific factual details such as names, versions, paths, decisions, and outcomes, then persists them to markdown and may forward them externally, but it does not include semantic safeguards to avoid retaining sensitive user-provided data. The limited text cleanup only strips certain metadata markers and does not detect or suppress secrets, PII, tokens, private keys, or other confidential content that may appear naturally in conversations.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

After summarization, the script optionally uploads memory entries to Supermemory, which creates a second external disclosure path for conversation-derived data. Even though the uploaded content is summarized rather than raw, summaries can still contain credentials, internal paths, customer data, or strategic context, and the script provides no explicit warning or confirmation before exfiltrating that data.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.