Back to skill

Security audit

Clawflow Free

Security checks for vulnerabilities and agentic risk

Overview

ClawFlow is a coherent productivity skill, but users should understand it can read calendar/task context and save daily summaries locally.

Install only if you are comfortable with a local assistant reading your OpenClaw workspace preferences, optional Todoist and Google Calendar data, current chat context, and file activity to create summaries. Review or delete files under ~/.openclaw/workspace/memory/ if they may contain sensitive information, and prefer an isolated or pinned install method for todoist-cli.

Vulnerability Patterns
  • Insecure DependenciesIntroduces malicious components through unsafe dependency sources
  • 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)

T08 · Insecure Dependencies

Warning
Location
INSTALL.md:123
Finding
Unpinned and Unverified Third-Party Dependency Installation## Vulnerability Details **File Location**: - `INSTALL.md:123-136` - `INSTALL.md:233-236` - `README.md:80-86` - `README.md:174-177` **Vulnerability Type**: Supply-chain risk caused by an unpinned and unverified Python dependency **Risk Level**: Medium ### Vulnerable Code Snippets `INSTALL.md:123-136`: ```markdown ## Step 6: (Optional) Install Integrations ### Todoist Integration **Why:** See your tasks in morning brief and daily summary. **How:** ```bash # Install Todoist CLI pip install todoist-cli # Login todoist login ``` ``` `INSTALL.md:233-236`: ```markdown If this fails: ```bash pip install todoist-cli todoist login ``` ``` `README.md:80-86`: ```markdown ### Step 3: (Optional) Install Integrations **For Todoist integration:** ```bash pip install todoist-cli todoist login ``` ``` `README.md:174-177`: ```markdown If this fails: ```bash pip install todoist-cli todoist login ``` ``` ### Technical Analysis The documentation instructs users to install `todoist-cli` without specifying an exact version, validating package hashes, linking to a verified publisher, or using a reviewed lock file. The resulting package and its transitive dependencies are resolved dynamically from the user's configured Python package index. Consequently, the code installed when a user follows these instructions can change after the Skill itself has been audited. Risks include a compromised future release, compromised transitive dependency, package-index substitution, or installation from an untrusted index configured in the user's environment. This finding does not establish that the current `todoist-cli` package is malicious. The vulnerability is the unsafe and non-reproducible dependency installation procedure. ### Attack Path 1. An attacker compromises the referenced package, one of its transitive dependencies, or a package index trusted by the victim. 2. The ...[truncated 1172 chars]
Remediation
## Remediation Suggestions 1. Pin `todoist-cli` to an exact, reviewed version rather than resolving the latest release: ```bash python -m pip install "todoist-cli==<reviewed-version>" ``` 2. Publish a dependency lock file containing cryptographic hashes for the package and all transitive dependencies. Require hash verification during installation: ```bash python -m pip install --require-hashes -r requirements.txt ``` 3. Document the expected package publisher, canonical source repository, and verified package-index page so users can detect similarly named or substituted packages. 4. Recommend installation in a dedicated virtual environment or through `pipx` to limit package conflicts and reduce exposure: ```bash pipx install "todoist-cli==<reviewed-version>" ``` 5. Audit the pinned package and its full dependency tree before publishing the selected version and hashes. 6. Use a controlled package index or explicitly documented trusted index where feasible. Do not recommend bypassing TLS checks or adding unverified package sources. 7. Add a dependency-update process that reviews new releases, regenerates hashes, runs security scanning, and updates the pinned version only after validation.
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • Rogue AgentSelf-Modification, Session Persistence
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
Findings (13)

Session Persistence

Medium
Category
Rogue Agent
Content
cp skills/clawflow/templates/HEARTBEAT.md HEARTBEAT.md
```

**⚠️ Warning:** If you already have these files, DON'T overwrite them! Edit manually instead.

---
Confidence
60% confidence
Finding
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.

Missing User Warnings

Medium
Confidence
95% confidence
Finding
The guide instructs users to connect Todoist and Google Calendar, both of which expose personal schedule and task data, but it does not provide an explicit privacy warning, data-handling notice, or scope explanation. Users may enable the integrations without understanding what information the skill can access or how that information may be stored or summarized.

Vague Triggers

Medium
Confidence
93% confidence
Finding
The installation guide says the skill should activate on broad phrases like "morning brief" or "daily summary" but does not define clear activation boundaries, exclusions, or consent expectations. In a skill that can read personal agenda and task data, ambiguous triggers increase the chance of unintended activation and unnecessary access to sensitive personal context.

Session Persistence

Medium
Category
Rogue Agent
Content
- Motivational message

### Daily Summary 🌙
Ask: *"Create my daily summary"*

Get:
- What you accomplished today
Confidence
84% confidence
Finding
The skill is explicitly designed to generate and save daily summaries, which introduces session persistence of potentially sensitive behavioral and work-history data. In a productivity assistant context this is expected functionality, but it still poses a real security/privacy risk if persistence is not minimized, disclosed, access-controlled, or made optional.

Missing User Warnings

Medium
Confidence
96% confidence
Finding
The README states that daily summaries are saved to `memory/<date>.md`, but it does not clearly warn users that these files may contain sensitive personal activity data such as tasks, meetings, decisions, and document names. This creates a privacy and data-handling risk because users may enable or share the skill without understanding that persistent local records of their activity are being created.

Missing User Warnings

Medium
Confidence
92% confidence
Finding
The skill reads personal profile and identity files and later uses chat history, but it does not warn the user up front that these local personal data sources will be accessed. This creates a transparency and consent failure: users may invoke a simple productivity feature without realizing personal context and prior conversations will be inspected.

Missing User Warnings

Medium
Confidence
91% confidence
Finding
The skill can call calendar and Todoist integrations that retrieve highly personal schedule and task data from external services, but the description does not warn the user about that access. Without disclosure, a user may not understand that invoking the skill can query connected third-party accounts and surface sensitive appointments or tasks.

Context-Inappropriate Capability

Medium
Confidence
86% confidence
Finding
The skill tells the agent to inspect files modified today across the workspace, which can expose unrelated sensitive documents beyond what is necessary for a daily summary. Even if only timestamps are requested, this broad file discovery can reveal filenames, activity patterns, and potentially trigger over-collection of user data.

Session Persistence

Medium
Category
Rogue Agent
Content
Wait for user response (max 2 minutes). If no response or "skip", proceed with auto-summary.

### Step 5: Write Summary

Save to: `~/.openclaw/workspace/memory/<YYYY-MM-DD>.md`.
Confidence
90% confidence
Finding
This skill explicitly saves session-derived content into a persistent memory file, creating durable storage of potentially sensitive user activity. Persistence is risky here because the summary aggregates chat history, task data, file activity, and possibly calendar context, which can later be exposed, reused, or retained longer than the user expects.

Missing User Warnings

Medium
Confidence
95% confidence
Finding
The skill persistently writes daily summaries to memory files without clearly warning the user in advance. Because those summaries may contain chat-derived work details, decisions, and pending items, silent persistence increases privacy risk and can create an unintended long-term record of sensitive activity.

Natural-Language Policy Violations

Low
Confidence
91% confidence
Finding
The changelog text explicitly narrows language support to English and Dutch as the primary supported languages. Under the policy, locale constraints should either offer user choice/opt-in or be clearly justified as region-specific; this wording presents a limitation without either safeguard.

Natural-Language Policy Violations

Low
Confidence
88% confidence
Finding
This line describes a language policy that prioritizes English and Dutch while relegating other languages to best-effort handling. Because the text does not mention user choice or a justified regional requirement, it can be read as an organizational language constraint.

Natural-Language Policy Violations

Low
Confidence
87% confidence
Finding
The template includes a natural-language profile field prepopulated as 'Language: English', which can be interpreted as enforcing a specific language by default. The policy for this audit flags language or locale constraints unless the skill offers user choice or clearly justifies the restriction.

Static analysis

No suspicious patterns detected.