Back to skill

Security audit

MCP Server Pack

Security checks for vulnerabilities and agentic risk

Overview

This MCP server pack is not malicious, but it needs Review because its generated configs can run unpinned Docker/npm server code with local file access and credentials.

Review this carefully before installing. Pin Docker images by digest and npm packages by exact version, avoid unattended npx -y execution, mount only narrow directories and make them read-only unless writes are required, use short-lived fine-grained credentials, keep secrets out of reusable config, and confirm what data goes to the cloud-hosted service.

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

Error
Location
SKILL.md:77
Finding
Unpinned Third-Party Executables Receive Sensitive Capabilities## Vulnerability Details **File Location**: `SKILL.md`, lines 77-85 **Vulnerability Type**: Unpinned third-party dependencies executed with access to credentials and host-mounted files **Risk Level**: High ### Vulnerable Code ```json { "mcp": { "servers": { "filesystem-secure": { "command": "docker", "args": ["run", "-i", "--rm", "-v", "/path/to/allowed:/data", "openclaw/mcp-filesystem-secure"] }, "github": { "transport": "stdio", "command": "npx", "args": ["-y", "mcp-github"], "env": {"GITHUB_TOKEN": "..."} } } } } ``` ### Technical Analysis The proposed configuration executes two third-party artifacts without immutable version constraints: - `openclaw/mcp-filesystem-secure` is referenced without a version tag or image digest. The container receives a read/write host bind mount at `/data`. - `npx -y mcp-github` automatically downloads and executes the package selected by the npm registry without an exact version, lockfile, or integrity verification. The resulting process receives `GITHUB_TOKEN`. Mutable dependency references allow the effective executable content to change after the Skill has been reviewed. A compromised registry account, malicious package release, replaced image tag, or unexpected upstream update could therefore introduce attacker-controlled code. The project contains no implementation, lockfile, digest, signature policy, source reference, or verification procedure that establishes the integrity of these artifacts. ### Attack Path 1. An attacker compromises the npm package, container repository, publisher account, or mutable image tag, or causes a malicious release to become the version resolved by the configuration. 2. A user or agent applies the generated MCP configuration. 3. Docker pulls the mutable `openclaw/mcp-filesystem-secure` image, or `npx -y` downloads and automatically executes t ...[truncated 1070 chars]
Remediation
## Remediation Suggestions 1. Pin the npm package to a reviewed exact version rather than resolving the latest release, and use a lockfile with integrity hashes. 2. Avoid unattended `npx -y` execution. Install dependencies through a controlled build process and require explicit approval for version changes. 3. Pin the Docker image by immutable digest, for example `image@sha256:...`, after reviewing and verifying the corresponding source and build provenance. 4. Verify dependency publishers, official source repositories, signatures, checksums, and software bill of materials before execution. 5. Run dependencies with least privilege. Use a read-only bind mount where writes are unnecessary, narrow the mounted path, run as a non-root user, drop Linux capabilities, enable a read-only container filesystem, and apply network restrictions. 6. Use a fine-grained, short-lived GitHub credential with only the minimum required repository and API permissions. Do not expose broader personal access tokens to the MCP process. 7. Store credentials through a dedicated secret manager rather than embedding them in reusable configuration, and rotate any credential suspected of exposure. 8. Add an update-review process so dependency version or digest changes trigger source review, security scanning, and integrity verification before deployment.
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
Findings (3)

MCP Config Access

High
Category
Agent Snooping
Content
tags: ["mcp", "server", "filesystem", "github", "database", "search"]
tools:
  - name: mcp_list
    description: "List available MCP servers and their status"
    input_schema:
      type: object
      properties: {}
Confidence
80% confidence
Finding
Skill accesses MCP server configuration files (mcp.json). MCP configs contain server URLs, authentication tokens, and tool definitions — reading them allows the skill to discover and potentially abuse other tool integrations.

Missing User Warnings

Medium
Confidence
93% confidence
Finding
The self-hosted section states that the skill downloads Docker images or binaries and manages their lifecycle, but it does not present a clear security warning about executing third-party code locally. This can lead users to run containers or binaries with insufficient scrutiny, potentially exposing local files, credentials, or network resources if the images are malicious or misconfigured.

Intent-Code Divergence

Low
Confidence
90% confidence
Finding
The FAQ says the skill supports custom entries via `mcp_config_append`, but the manifest declares only `mcp_list` and `mcp_config_generate`. This is a direct documentation-to-declared-capability contradiction about what the skill provides.

Static analysis

No suspicious patterns detected.