Back to skill

Security audit

OpenClaw Projects

Security checks for vulnerabilities and agentic risk

Overview

The skill is transparent about setting up coordinated OpenClaw agent projects, but it needs Review because it persistently changes agent behavior/configuration and includes unsafe shell/path setup examples using user-provided values.

Review this before installing if your OpenClaw setup manages valuable projects or sensitive agent workspaces. Use it only with a trusted operator, take recovery snapshots, verify every project ID/repo name/folder name is strictly validated, and avoid running the documented shell examples by direct string substitution.

Vulnerability Patterns
  • 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
  • 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)

T09 · Insecure Skill Coding Practices

Error
Location
SKILL.md:493
Finding

Unsanitized User-Controlled Values Used in Shell Commands and Filesystem Paths

Content
View full analysis

Vulnerability Details

File Location: SKILL.md, lines 207, 258, 414, and 493–500
Vulnerability Type: Command injection and path traversal
Risk Level: High

Vulnerable Code

markdown
- Project ID (lowercase, hyphens or underscores, used in folder names — e.g., "ezbi")
markdown
- If a git repo: SSH URL(s) for cloning
markdown
This creates the entire project at `~/.openclaw/projects/[project-id]/`.
markdown
**Shared medium initialization:**
- Git repo: `cd ~/.openclaw/projects/[project-id]/workspace && git clone [ssh-url] [repo-name]`
- Folder/Drive: create `workspace/[folder-name]/` and add a `LINKS.md` file with the external URL if not local
- CRM/external: skip — write a `workspace/EXTERNAL_SYSTEM.md` describing where work happens
- None: skip

**Media folder** — only if Pass 2 #7 was yes:
```bash
mkdir -p ~/.openclaw/projects/[project-id]/workspace/[media-folder-name]
text

### Technical Analysis

The Skill directs an agent to collect project identifiers, repository URLs, repository names, and folder names from the user and interpolate them into shell commands and filesystem paths. Although line 207 informally describes the expected project-ID format, the Skill does not require programmatic validation, canonicalization, shell-safe argument handling, or containment checks before these values are used.

The command on line 493 places `[project-id]`, `[ssh-url]`, and `[repo-name]` into a shell command. If an implementation follows this instruction through a shell, metacharacters in any substituted value could alter command structure. The `mkdir` command on line 500 has the same issue for `[project-id]` and `[media-folder-name]`.

Separately, path components containing `../`, path separators, absolute paths, or other special values could escape the intended `~/.openclaw/projects/[project-id]/` directory. Values beginning with `-` may also be interpreted as command options where an end-of-options marker is n
...[truncated 1638 chars]
Remediation
View remediation

Remediation Suggestions

  1. Enforce strict allow-list validation before using identifiers as path components:

    • Project IDs, role keys, repository destination names, and media folder names should match a rule such as ^[a-z0-9][a-z0-9_-]*$.
    • Reject .., /, \, control characters, leading hyphens, shell metacharacters, and empty values.
  2. Avoid constructing shell command strings. Invoke executables through structured process APIs with argument arrays, for example:

    • Executable: git
    • Arguments: ["clone", "--", validatedUrl, validatedDestination]
    • Working directory: a separately validated workspace path.
  3. Use native filesystem APIs for directory creation instead of interpolated mkdir commands.

  4. Canonicalize every destination path and verify that it remains beneath the canonical project root before creating or writing files.

  5. Validate repository origins separately. Permit only supported SSH or HTTPS Git URL formats, reject shell syntax and local command-style transports, and display the normalized origin for explicit user confirmation.

  6. Add an explicit mandatory validation step to the Skill before Step 7. Setup must stop on any invalid identifier rather than attempting to sanitize ambiguous input.

  7. Use an end-of-options marker where supported and ensure user-controlled values are never interpreted as command-line options.

  8. Add negative tests covering shell metacharacters, traversal sequences, absolute paths, leading hyphens, whitespace, control characters, and malformed repository URLs.

Vulnerability Patterns
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • Rogue AgentSelf-Modification, Session Persistence
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
Findings (5)

Vague Triggers

High
Category
Not specified by scanner
Confidence
96% confidence
Finding

The trigger conditions are extremely broad and include vague phrases like building a team or making agents work together, which can cause the skill to activate in situations the user did not intend. Because the skill performs high-impact administrative actions such as modifying OpenClaw config, agent workspaces, and multi-agent communication paths, accidental invocation could lead to unauthorized state changes and expanded agent permissions.

Content

No source excerpt is available for this finding.

Credential Access

High
Category
Privilege Escalation
Confidence
60% confidence
Finding

Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Content

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

md
This skill collects only the *names* of env vars (e.g., `PROJ_ASANA_PAT`) — never their values. The dependency skills the user installed (Asana skill, ClickUp skill, any other domain-specific skill) hold and use credentials. This skill passes credential env var *names* to those skills so they know which value to pull from the agent runtime environment.

Credentials must be stored in the user's secret management system (Kubernetes ConfigMap/Secret, .env file, or equivalent) before this skill runs.

---

Session Persistence

Medium
Category
Rogue Agent
Confidence
71% confidence
Finding

The skill is designed to create persistent project state across sessions, including queue files, shared memory, decision logs, and updates to AGENTS.md and HEARTBEAT.md. Persistent coordination state is expected for this kind of administrative skill, but it becomes security-relevant because it can silently alter future agent behavior and preserve potentially sensitive operational context beyond the immediate session.

Content

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

md
any kind of team: software development, marketing, real estate, content, sales,
  operations, research, customer success, or anything else where multiple agents
  need to work together toward shared goals. Use this skill whenever someone says
  "set up a project", "create a project", "add a project to my team", "build a
  team", "make my agents work together", "configure agent coordination",
  "set up agent collaboration", "I want a team of agents", "how do I run multiple
  agents on one project", "wire up Asana for my agents", "wire up ClickUp for my

Description-Behavior Mismatch

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

The manifest states that the skill does not make task-manager API calls itself and delegates those to separately installed Asana or ClickUp skills. However, Step 6 instructs the skill to use the task-manager dependency skill to add a project description or pinned note to the task manager board, which is still an operational task-manager write performed as part of this skill's workflow. That creates a meaningful mismatch between the declared non-API-calling scope and the actual documented behavior.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

Low
Category
Not specified by scanner
Confidence
83% confidence
Finding

The manifest says the skill does not read or store credentials or secret values, which suggests no credential handling. Later documentation says the skill collects environment variable names and passes those names to dependency skills so they can resolve credentials at runtime. While this does not involve secret values themselves, it expands the skill's handling of credential metadata beyond the simple manifest claim and may mislead users about what credential-related data the skill processes.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.