T09 · Insecure Skill Coding Practices
- Location
memory-manager/memory-manager.js:32- Finding
Path Traversal Allows File Access Outside the Memory Directory
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
This lead-generation skill is mostly aligned with its stated purpose, but it needs Review because it automatically stores lead data, can send email through Gmail, and includes unsafe local file and command patterns.
Install only if you are comfortable with an agent that stores prospect data locally, mutates lead status automatically, and can send outreach through a connected Gmail tool. Review generated recipients and messages before sending, avoid storing sensitive or regulated contact data, keep exports protected, and prefer a patched version that validates memory filenames, avoids shell command construction from web-derived fields, safely serializes CSV, pins dependencies, and documents deletion and retention controls.
memory-manager/memory-manager.js:32Path Traversal Allows File Access Outside the Memory Directory
SOUL.md:6Shell Command Injection Through Automatically Saved Web-Derived Lead Fields
memory-manager/memory-manager.js:283CSV and Spreadsheet Formula Injection in Lead Exports
README.md:10Unpinned Installation of Executable Third-Party Packages and Skills
The skill advertises lead finding and personalized outreach generation, but the described implementation only performs local CRUD/scoring/export and stores data in the user's home workspace. This mismatch is security-relevant because it misleads users about actual behavior, conceals local persistence/export risks, and undermines informed consent for data handling.
The README instructs users to install a memory manager and copy persistent files into the OpenClaw workspace, establishing session persistence for collected lead data. Persistence is not inherently malicious, but in this skill context it increases risk because the tool handles prospect records, outreach state, and potentially contact details, yet the README does not describe safeguards, scope limits, or deletion controls.
mkdir -p ~/.openclaw/workspace/skills/memory-manager
# Copy memory-manager.js and SKILL.md from the package
The README states that leads are automatically saved, but it does not warn users that business/contact data will be persisted to disk. This creates a transparency and privacy risk because users may unknowingly store potentially sensitive prospect information locally, where it may be retained longer than expected or exposed through weak file protections.
The README advertises that the skill can send outreach emails directly via Gmail, but it provides no indication that this is an outbound side effect requiring explicit user approval. In an autonomous lead-generation context, silent or poorly signaled email sending can cause unauthorized communications, spam, reputational damage, or accidental data disclosure to third parties.
Skill establishes unauthorized persistence across sessions via cron jobs, startup scripts, or state files. Session persistence allows an attacker to maintain access beyond the current interaction.
node ~/.openclaw/workspace/skills/memory-manager/memory-manager.js \
The guide instructs users to send outreach through Gmail but does not clearly warn that this action transmits messages to external recipients. In a lead-generation context, this can cause unintended outbound contact, privacy issues, or reputational harm if users assume the step is only drafting or internal testing.
The skill invokes a local Node.js tool under ~/.openclaw/workspace and relies on filesystem and likely environment-backed execution, but it declares no permissions or allowed-tools scope. This creates an authorization and transparency gap: users and the platform cannot accurately evaluate what resources the skill may access or modify before use.
The skill encourages storing lead and contact-related information and exporting it to CSV without warning about local persistence, data exposure, or downstream handling of exported files. This omission can lead users to place sensitive business or personal data into unprotected local files that may be copied, shared, or retained longer than intended.
Skill establishes unauthorized persistence across sessions via cron jobs, startup scripts, or state files. Session persistence allows an attacker to maintain access beyond the current interaction.
- **Find leads** - Add companies with details (name, size, industry, funding)
- **Auto-score** - Scores leads 0-100 based on funding stage, team size, industry
- **Write outreach** - Generates personalized cold emails
- **Track pipeline** - Status flows: new → enriched → drafted → sent → replied → closed
- **Follow-ups** - Get recommendations on who to follow up with
- **Export** - Export leads to CSV
The skill explicitly instructs the agent to persist lead data immediately and without asking the user, which creates unauthorized session-to-session storage of potentially sensitive business contact information. In this context, the danger is elevated because the action is tied to an exec command that writes to a persistent leads database, making silent data retention likely and hard for users to notice or control.
The email-sending workflow allows outbound communication and status mutation without requiring an explicit warning or confirmation at the point of action. In a lead-generation skill, sending external emails can create reputational, compliance, and spam risks, and automatically marking records as sent can also corrupt pipeline state if triggered accidentally or by prompt manipulation.
The outreach generation flow auto-saves generated content and updates status to drafted, creating persistent state changes from a simple content-generation request. While persistence is expected for a CRM-like skill, doing it automatically without clear user consent or visibility increases the risk of silent retention, accidental record modification, and cross-session data buildup.
Write personalized cold emails:
Write outreach for [company]
The bulk send command implies mass outbound action and mass status changes without any safety checks, preview, or confirmation. In this skill context, bulk operations amplify the blast radius of mistakes or prompt-injection-driven misuse, potentially causing large-scale unsolicited outreach and widespread corruption of CRM-style records.
Skill establishes unauthorized persistence across sessions via cron jobs, startup scripts, or state files. Session persistence allows an attacker to maintain access beyond the current interaction.
---
name: memory-manager
description: Read and write JSON data to memory files. Use for persisting leads, contacts, and structured data across sessions.
metadata: {"clawdbot":{"emoji":"💾","requires":{"bins":["node"]}}}
---
This markdown file tells the user to save data using printf ... > ~/.openclaw/workspace/memory/leads.json, which replaces the entire file contents. The surrounding instructions do not warn that malformed or incomplete JSON could permanently overwrite existing stored leads, contacts, or notes.
The export-to-CSV feature is documented without telling users that lead and contact information will be written to a local file. While lower severity, this can still expose sensitive business contact data through insecure storage, accidental sharing, or syncing to other services.
No suspicious patterns detected.