T09 · Insecure Skill Coding Practices
- Location
SKILL.md:18- Finding
Shell Command Injection Through User-Controlled Search Query
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
This cloud-memory recall skill is review-worthy because it can send conversation-derived queries to an external service and tells the agent to run those queries through an unsafe shell command.
Review before installing. Use this only if you trust MemOS Cloud with conversation-derived search terms and memories. Avoid sensitive conversations until the shell command is replaced with safe argument passing, recall and storage require clearer user control, API keys are stored non-destructively with restrictive permissions, and recalled memory is treated only as untrusted context.
SKILL.md:18Shell Command Injection Through User-Controlled Search Query
SKILL.md:25Untrusted Remote Memory Can Influence Agent Instructions
README.md:20Installation Command Destructively Overwrites a Shared Plaintext Credential File
Skill reads from agent configuration directories (.claude/, .codex/, .gemini/). These directories may contain API keys, personal settings, and other credentials that the skill has no legitimate need to access.
# 创建配置文件
cat > ~/.claude/.env << 'EOF'
MEMOS_API_KEY=your_api_key_here
MEMOS_USER_ID=openclaw-user
MEMOS_BASE_URL=https://memos.memtensor.cn/api/openmem/v1
The README tells users to store an API key in ~/.claude/.env but does not mention secret-handling precautions such as file permissions, avoiding accidental commits, or limiting exposure to other local processes. In an agent/plugin environment, poorly documented credential storage can increase the chance of key leakage and unauthorized access to the memory service.
# 创建配置文件
cat > ~/.claude/.env << 'EOF'
MEMOS_API_KEY=your_api_key_here
MEMOS_USER_ID=openclaw-user
MEMOS_BASE_URL=https://memos.memtensor.cn/api/openmem/v1
The skill instructs the agent to query MemOS Cloud with the user’s input or extracted search keywords before responding, but it does not disclose this behavior or obtain user consent. This creates a significant privacy risk because potentially sensitive prompts may be transmitted to an external service unexpectedly, especially given the broad triggers and the instruction to fail silently on API errors.
The README promotes cross-session memory through a cloud service but does not provide an explicit warning about privacy, data transmission, retention, or sensitivity of stored content. In this skill context, the plugin handles prior conversations and preferences, so silent or under-disclosed cloud storage materially increases the risk of exposing sensitive personal information.
The manifest for this skill says its purpose is to recall memories before responding, focused on retrieving prior conversations, preferences, or decisions. However, the documentation in this skill file presents broader functionality including storing memories and managing them via commands, which exceeds the recall-only scope claimed for memos-recall.
The automatic recall trigger is described ambiguously as activating when a conversation involves previous content. In a recall skill, unclear activation boundaries can lead to unnecessary transmission of prompts or retrieval of unrelated memories, increasing privacy and data-minimization risk.
The documented behavior says Claude will automatically call an add operation to save important information. For a skill whose manifest purpose is only to recall prior memories, advertising write behavior is a semantic mismatch because it expands from read/retrieval into persistence.
The phrase describing storage activation (e.g. when the user says 'remember' or when information is 'important') is too broad and subjective. In a memory plugin that sends data to a cloud service, vague triggers can cause the agent to store ordinary or sensitive user content without clear, informed intent.
The trigger conditions are broad enough to fire on common words like "before," "last time," or any request needing context, which can cause the skill to send user input or derived keywords to MemOS Cloud without clear necessity. In this skill’s context, over-invocation increases the chance of unnecessary disclosure of sensitive conversational content and may retrieve unrelated prior memories that influence the response incorrectly.
The natural-language instructions, headings, and examples are presented in Chinese, which can impose a specific language on operators or users without opt-in. The file does not state that this is a region-specific skill or offer an alternative language option.
Most operational instructions and trigger descriptions are presented only in Chinese, which can impose a language constraint on users without opt-in. The file does not state that the skill is region-specific or offer an alternate language path.
No suspicious patterns detected.