Back to skill

Security audit

Mvp Kanban Skill

Security checks for vulnerabilities and agentic risk

Overview

This Kanban skill has a coherent purpose, but it runs an unverifiable placeholder Docker image and includes unsafe global MCP configuration instructions.

Review before installing. Only use this skill if you trust the Docker image publisher, replace the placeholder image with a verified pinned digest, and merge the kanban MCP entry into your existing config instead of copying over the whole file. Avoid putting secrets into Kanban tasks unless the runtime image and data storage are trusted, and remember the Docker volume can preserve task data after the container is removed.

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

T08 · Insecure Dependencies

Error
Location
mcp.json:4
Finding
Execution of an Unverifiable and Mutable External Docker Image## Vulnerability Details **File Location**: `mcp.json:4-12` **Additional Locations**: `README.md:9-10`, `README.md:25-30`, `README.md:83-91`, `SKILL.md:27-43`, `SKILL.md:145-153`, `clawhub.yaml:10-13` **Vulnerability Type**: Unpinned and unverifiable external dependency **Risk Level**: High **Vulnerable Code**: ```json "kanban": { "command": "docker", "args": [ "run", "--rm", "-i", "your-dockerhub-username/mvp-kanban:latest", "python", "mcp_server.py" ], ``` The installation documentation also instructs users to retrieve the image directly: ```bash docker pull your-dockerhub-username/mvp-kanban:latest ``` ### Technical Analysis The MCP configuration launches `mcp_server.py` from an external Docker image whenever the Kanban MCP server is started. The image uses an unresolved placeholder publisher and the mutable `latest` tag. No immutable SHA-256 digest, image signature, verified registry namespace, source mapping, Dockerfile, or reproducible build instructions are included. Consequently, the actual executable payload is not part of the audited project and can change independently after review. The metadata is also inconsistent: `clawhub.yaml` declares `tag: v3.0.0`, while the executable image reference still explicitly uses `:latest`. The project contains only documentation and configuration files. It does not contain `mcp_server.py` or the implementation of the advertised 21 MCP tools, so the behavior of the executed server cannot be verified from this package. ### Attack Path 1. An attacker gains control of the referenced registry namespace, publishes under an unclaimed placeholder namespace, compromises the image publisher, or replaces the mutable `latest` tag. 2. The attacker publishes a modified image containing a malicious `mcp_server.py`. 3. A user follows the installation instructions or configures the supplied `mcp.json`. 4. OpenClaw starts the MCP serv ...[truncated 1109 chars]
Remediation
## Remediation Suggestions 1. Replace the placeholder image namespace with an image published by a verified and documented owner. 2. Pin the image using an immutable digest, for example: ```json "verified-publisher/mvp-kanban@sha256:EXPECTED_DIGEST" ``` 3. Do not use `latest` or rely solely on a mutable semantic-version tag for executable dependencies. 4. Sign the image and enforce signature or provenance verification before execution. 5. Include the corresponding application source, `Dockerfile`, lock files, and reproducible build instructions in the reviewed repository. 6. Ensure `clawhub.yaml`, `README.md`, `SKILL.md`, and `mcp.json` all reference the same immutable image. 7. Run the container as a non-root user with a read-only root filesystem, dropped Linux capabilities, resource limits, and restricted network access. 8. Avoid mounting host directories, credentials, or the Docker socket. If persistent data is required, grant access only to a dedicated volume containing Kanban data.

T09 · Insecure Skill Coding Practices

Warning
Location
README.md:17
Finding
Installation Instructions Overwrite the User's Global MCP Configuration## Vulnerability Details **File Location**: `README.md:17-19` **Vulnerability Type**: Unsafe global configuration replacement **Risk Level**: Medium **Vulnerable Code**: ```bash # 2. Copy Skill to OpenClaw cp -r mvp-kanban-skill ~/.openclaw/workspace/skills/mvp-kanban # 3. Configure MCP cp ~/.openclaw/workspace/skills/mvp-kanban/mcp.json ~/.openclaw/config/mcp.json ``` ### Technical Analysis The final `cp` command replaces the complete user-level MCP configuration with the package's `mcp.json`. Registering one Kanban MCP server only requires adding or updating the `mcpServers.kanban` object; replacing the entire file exceeds the minimum privilege and modification scope necessary for the declared functionality. The destination may already contain unrelated MCP server definitions, environment settings, access restrictions, or other security-sensitive configuration. The command performs no backup, conflict detection, structured merge, validation, or confirmation. The supplied `mcp.json` does not contain credentials, and the reviewed files do not read or exfiltrate the prior configuration. Therefore, this finding concerns destructive configuration replacement rather than demonstrated credential theft. ### Attack Path 1. A user already has a populated `~/.openclaw/config/mcp.json`. 2. The user follows the documented manual installation steps. 3. The unrestricted `cp` command replaces the existing file with the Skill's bundled configuration. 4. Existing MCP server registrations and security-related settings are lost. 5. OpenClaw subsequently operates with only the replacement configuration, including the external Docker-based Kanban server. ### Impact Assessment Exploitation or accidental triggering can cause loss of all existing MCP integrations and configuration-level controls, resulting in denial of service or unintended changes to the user's trusted tool set. It does not directly grant additional operating-sys ...[truncated 257 chars]
Remediation
## Remediation Suggestions 1. Remove the full-file copy instruction. 2. Add or update only the `mcpServers.kanban` object through a structured JSON merge. 3. Create a timestamped backup of the existing configuration before modification. 4. Ask for explicit user confirmation and display the proposed change. 5. Write the merged configuration to a temporary file with restrictive permissions, validate its JSON syntax, and then replace the destination atomically. 6. Preserve the destination file's ownership and restrictive permissions. 7. Prefer documenting the exact JSON fragment users should merge rather than automatically modifying a global configuration. 8. After merging, validate that all pre-existing MCP server entries remain present.
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
Findings (15)

Natural-Language Policy Violations

Medium
Confidence
90% confidence
Finding
The file's instructional content and headings are all presented in Chinese, and there is no indication that the skill is region-specific or that alternative language support is available. This can violate a language/locale policy when users are not given an explicit language choice or opt-in.

Rp1

Medium
Category
MCP Rug Pull
Confidence
93% confidence
Finding
The README instructs users to pull and run a Docker image using the mutable `latest` tag rather than a pinned version or digest. This creates a supply-chain risk because the image content can change over time, making builds non-reproducible and allowing a compromised or replaced image to be deployed without notice.

Missing User Warnings

Medium
Confidence
92% confidence
Finding
The README tells users to copy the skill's `mcp.json` over their existing global MCP configuration, which can overwrite unrelated settings and silently replace trusted server definitions. In an agent/tooling context, changing MCP configuration affects what commands the host may execute, so unsafe replacement guidance increases the risk of misconfiguration and unintended trust expansion.

Rp1

Medium
Category
MCP Rug Pull
Confidence
75% confidence
Finding
Docker image references without a specific tag (:latest is implicit) or digest (@sha256:...) can be silently replaced by a malicious image.

Rp1

Medium
Category
MCP Rug Pull
Confidence
75% confidence
Finding
Docker image references without a specific tag (:latest is implicit) or digest (@sha256:...) can be silently replaced by a malicious image.

External Transmission

Medium
Category
Data Exfiltration
Content
### 检查健康状态
```bash
curl http://localhost:9999/api/health
```

### 访问 Web 界面
Confidence
60% confidence
Finding
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Natural-Language Policy Violations

Medium
Confidence
93% confidence
Finding
The feature list explicitly states `中文命令解析`, and the natural-language examples are presented only in Chinese with no indication that other languages are supported or that users can opt in to a Chinese-only mode. This is a natural-language policy concern because it imposes a locale/language constraint without user choice or justification.

Rp1

Medium
Category
MCP Rug Pull
Confidence
75% confidence
Finding
Docker image references without a specific tag (:latest is implicit) or digest (@sha256:...) can be silently replaced by a malicious image.

External Transmission

Medium
Category
Data Exfiltration
Content
```bash
# 添加任务
curl -X POST http://localhost:9999/api/projects \
  -H "Content-Type: application/json" \
  -d '{"name":"任务","lane":"feature","priority":"high"}'
Confidence
60% confidence
Finding
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Missing User Warnings

Medium
Confidence
90% confidence
Finding
The skill exposes delete operations, including batch deletion, without any warning about irreversibility, confirmation requirements, backup guidance, or recovery expectations. In an AI/MCP context this increases the chance of accidental or over-broad destructive actions, leading to unintended data loss through automation or operator error.

External Transmission

Medium
Category
Data Exfiltration
Content
# GitHub Actions 发现 bug 自动创建任务
import requests

requests.post("http://localhost:9999/api/projects", json={
    "name": f"修复:{bug_title}",
    "lane": "bugfix",
    "priority": "high",
Confidence
60% confidence
Finding
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

External Transmission

Medium
Category
Data Exfiltration
Content
# GitHub Actions 发现 bug 自动创建任务
import requests

requests.post("http://localhost:9999/api/projects", json={
    "name": f"修复:{bug_title}",
    "lane": "bugfix",
    "priority": "high",
Confidence
70% confidence
Finding
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Internal Network Request

Medium
Category
Server-Side Request Forgery
Content
# GitHub Actions 发现 bug 自动创建任务
import requests

requests.post("http://localhost:9999/api/projects", json={
    "name": f"修复:{bug_title}",
    "lane": "bugfix",
    "priority": "high",
Confidence
70% confidence
Finding
Code issues a request to a loopback, link-local, or private-range host. This can reach internal services not meant to be exposed and is a common SSRF pivot.

Natural-Language Policy Violations

Medium
Confidence
95% confidence
Finding
This manifest contains multiple natural-language fields in Chinese, including the main description and post-install user messages, but does not indicate that the skill is China-specific or offer an alternate language/locale option. That creates a language-policy concern because users are implicitly forced into a specific language without opt-in.

Missing User Warnings

Low
Confidence
74% confidence
Finding
The startup instructions publish port 9999 and mount a persistent Docker volume, but the README does not mention that the service becomes locally accessible and stores data persistently. For a markdown skill description, this is a relevant operational warning affecting privacy and system state.

Static analysis

No suspicious patterns detected.