Back to skill

Security audit

1panel Skill

Security checks for vulnerabilities and agentic risk

Overview

This appears to be a real 1Panel server-management skill, but it exposes very broad administrative power with weak defaults and limited safety controls.

Install only if you trust the 1Panel host, the API key is least-privileged, and the agent will ask for explicit confirmation before destructive actions. Prefer HTTPS, avoid using this over untrusted networks, and treat command execution, disk partitioning, wget_file, file edits, firewall/SSH changes, and backup restore as high-risk operations.

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 (2)

T09 · Insecure Skill Coding Practices

Error
Location
src/api/base.ts:7
Finding

Administrative API Traffic Uses Plaintext HTTP by Default

Content
View full analysis
{ const { token, timestamp } = generateToken(this.config.apiKey); const url = `${this.config.protocol}://${this.config.host}:${this.config.port}${path}`; const response = await fetch(url, { ...options, headers: { "1Panel-Token": token, "1Panel-Timestamp": timestamp, "Content-Type": "application/json", ...options.headers, }, }); ``` The command-line wrapper independently applies the same insecure default: ```javascript const config = { host: process.env.ONEPANEL_HOST || 'localhost', port: parseInt(process.env.ONEPANEL_PORT || '8080'), apiKey: process.env.ONEPANEL_API_KEY, protocol: process.env.ONEPANEL_PROTOCOL || 'http' }; ``` The authentication token is derived as follows in `src/utils/auth.ts:3-8`: ```typescript export function generateToken(apiKey: string): { token: string; timestamp: string } { const timestamp = Math.floor(Date.now() / 1000).toString(); const token = createHash("md5") .update(`1panel${apiKey}${timestamp}`) .digest("hex"); return { token, timestamp }; } ``` ### Technical Analysis Every API request carries a timestamp and an MD5-derived authentication token. The raw API key is not transmitted directly, and the destination is the user-configured 1Panel host rather than a hard-coded third party. Network communication is necessary for the declared API-client functionality. However, the client defaults to `http`, and both the Skill documentation and installation instruction ...[truncated 2989 chars]
Remediation
View remediation

T09 · Insecure Skill Coding Practices

Error
Location
src/api/file.ts:238
Finding

Unrestricted Server-Side URL Download Exposes SSRF and Arbitrary File-Placement Capabilities

Content
View full analysis
{ return this.post("/api/v2/files/wget", { url, path, ignoreCertificate }); } ``` The capability is directly exposed as an Agent tool: ```typescript { name: "wget_file", description: "Download from URL", inputSchema: { type: "object", properties: { url: { type: "string" }, path: { type: "string" }, ignoreCertificate: { type: "boolean" } }, required: ["url", "path"] } } ``` The handler passes Agent-controlled arguments through unchanged: ```typescript case "wget_file": return await client.wgetFile(args?.url, args?.path, args?.ignoreCertificate); ``` ### Technical Analysis The `wget_file` tool instructs the managed 1Panel server to retrieve an arbitrary URL and store the response at an Agent-selected path. The Skill does not validate: - URL schemes - Hostnames or destination ports - Resolved IP addresses - Loopback, private, link-local, multicast, or reserved address ranges - Cloud instance metadata addresses - Redirect destinations - DNS rebinding - Destination paths - Path traversal or sensitive system locations - Existing-file overwrite behavior - The `ignoreCertificate` TLS-validation bypass Because the request is performed by the managed server rather than the local Agent process, it originates from the server's network position. That position may have access to internal control panels, databases, container services, orchestration endpoints, or cloud metadata services that are inaccessib ...[truncated 2701 chars]
Remediation
View remediation
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • Tool MisuseTool Parameter Abuse, Chaining Abuse, Unsafe Defaults
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
Findings (142)

Tool Parameter Abuse

High
Category
Tool Misuse
Confidence
90% confidence
Finding

Tool parameters are crafted to achieve unintended or unsafe behavior. Parameter abuse can bypass intended safety checks (e.g. shell=True, --force, dangerous glob patterns).

Content

Scanner excerpt · OPENCLAW_INSTALL.md (reported line 175)May include surrounding context.

卸载

bash
rm -rf ~/.openclaw/skills/1panel

Tool Parameter Abuse

High
Category
Tool Misuse
Confidence
90% confidence
Finding

Tool parameters are crafted to achieve unintended or unsafe behavior. Parameter abuse can bypass intended safety checks (e.g. shell=True, --force, dangerous glob patterns).

Content

Scanner excerpt · OPENCLAW_INSTALL.md (reported line 175)May include surrounding context.

卸载

bash
rm -rf ~/.openclaw/skills/1panel

Tp4

High
Category
MCP Tool Poisoning
Confidence
96% confidence
Finding

The declared description presents the skill as an operational 1Panel server management capability exposing many API endpoints. However, this specific code chunk does not manage servers, containers, databases, websites, or SSL certificates, nor does it call 1Panel APIs. Instead, it is a development/maintenance script used to analyze API docs versus existing implementation and generate missing TypeScript endpoint methods. That is materially different from the declared runtime purpose, so this chunk is a description-behavior mismatch.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
94% confidence
Finding

The declared description presents a broad server-management skill for 1Panel, including infrastructure and hosting operations. However, the supplied code is narrowly scoped to AI-related features under /api/v2/ai, such as agent lifecycle management, account verification, messaging channel configuration, MCP server operations, GPU info retrieval, and Ollama model management. None of the advertised core server-management capabilities (Linux, Docker, databases, websites, SSL) appear in this chunk. This is a material description-behavior mismatch in primary purpose and exposed capabilities.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
95% confidence
Finding

The declared description presents a broad 1Panel server-management skill centered on infrastructure administration. However, the supplied code chunk is focused on XPack AI features and MCP management, not on general server, container, database, website, or certificate administration. This is a materially different functional area from the declared primary purpose. While this may be only one file from a larger project, for the supplied chunk the behavior does not accurately match the stated description.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
96% confidence
Finding

The supplied code does not implement broad 1Panel server management capabilities. It exclusively exposes ClamAV operations such as listing/creating/updating/deleting scan configs, reading/updating ClamAV file config, triggering scans, retrieving/cleaning scan records, and updating ClamAV status. That is a materially narrower and different functional scope than the declared description of comprehensive Linux/server/Docker/database/website/SSL management through 580+ endpoints. There is no evidence here of unrelated hidden behavior, but the description significantly overstates and mischaracterizes what this code chunk actually does.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
97% confidence
Finding

The declared description emphasizes broad 1Panel server management capabilities across many domains and 580+ API endpoints. However, the supplied code chunk implements only two narrowly scoped GPU/XPU functions, calling getGPUInfo and getGPUMonitorData. GPU monitoring is not represented in the declared purpose, and the code does not demonstrate the broad 1Panel management functionality described. This is a material description-behavior mismatch for the provided code chunk.

Content

No source excerpt is available for this finding.

Tool Parameter Abuse

High
Category
Tool Misuse
Confidence
90% confidence
Finding

Tool parameters are crafted to achieve unintended or unsafe behavior. Parameter abuse can bypass intended safety checks (e.g. shell=True, --force, dangerous glob patterns).

Content

Scanner excerpt · scripts/generate_all_apis.py (reported line 13)May include surrounding context.

python
def generate_method_name(path, method):
    """Generate camelCase method name from API path"""
    # Remove /api/v2/ prefix
    path = path.replace('/api/v2/', '').replace('/api/v1/', '')
    
    # Split by / and filter

Tool Parameter Abuse

High
Category
Tool Misuse
Confidence
90% confidence
Finding

Tool parameters are crafted to achieve unintended or unsafe behavior. Parameter abuse can bypass intended safety checks (e.g. shell=True, --force, dangerous glob patterns).

Content

Scanner excerpt · scripts/generate_apis.py (reported line 66)May include surrounding context.

python
def generate_method_name(path, method):
    """Generate method name from API path"""
    # Remove /api/v2 prefix
    path = path.replace('/api/v2/', '').replace('/api/v1/', '')
    
    # Split by / and convert to camelCase

MCP Config Access

High
Category
Agent Snooping
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.

Content

Scanner excerpt · src/api/ai.ts (reported line 151)May include surrounding context.

ts
// ==================== MCP Server ====================

  /** List mcp servers */
  async listMCPServers(params?: any): Promise<any> {
    return this.post("/api/v2/ai/mcp/search", params || {});
  }

MCP Config Access

High
Category
Agent Snooping
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.

Content

Scanner excerpt · src/tools/ai.ts (reported line 25)May include surrounding context.

ts
{ name: "get_ai_agent_telegram_config", description: "Get AI agent Telegram config (XPack)", inputSchema: { type: "object", properties: { agentId: { type: "number" } }, required: ["agentId"] } },
  { name: "update_ai_agent_telegram_config", description: "Update AI agent Telegram config (XPack)", inputSchema: { type: "object", properties: { agentId: { type: "number" }, params: { type: "object" } }, required: ["agentId", "params"] } },
  // MCP Server
  { name: "list_mcp_servers", description: "List MCP servers (XPack)", inputSchema: { type: "object", properties: {} } },
  { name: "create_mcp_server", description: "Create MCP server (XPack)", inputSchema: { type: "object", properties: { params: { type: "object" } }, required: ["params"] } },
  { name: "update_mcp_server", description: "Update MCP server (XPack)", inputSchema: { type: "object", properties: { id: { type: "number" }, params: { type: "object" } }, required: ["id", "params"] } },
  { name: "delete_mcp_server", description: "Delete MCP server (XPack)", inputSchema: { type: "object", properties: { id: { type: "number" } }, required: ["id"] } },

Missing User Warnings

High
Category
Not specified by scanner
Confidence
97% confidence
Finding

The skill exposes a direct partition_disk capability with no visible confirmation gate, safety interlock, allowlist, or warning despite partitioning being inherently destructive and capable of causing irreversible data loss or host unavailability. In the context of a server-management skill for AI agents, this is more dangerous because an agent may invoke it from ambiguous user prompts or workflow mistakes, turning a legitimate admin function into a high-risk destructive action.

Content

No source excerpt is available for this finding.

Missing User Warnings

High
Category
Not specified by scanner
Confidence
92% confidence
Finding

updatePHPConfFile appears to modify a PHP configuration file directly, which is a safety-critical file write operation. The file contains no confirmation prompt, logging, or explanatory warning indicating that user or system configuration files will be changed.

Content

No source excerpt is available for this finding.

Missing User Warnings

High
Category
Not specified by scanner
Confidence
90% confidence
Finding

Changing the PHP version is a potentially disruptive and irreversible system/runtime modification, yet this code provides no visible warning, confirmation, or explanatory documentation. In a code file, such operations should include some disclosure unless the destructive behavior is clearly communicated elsewhere.

Content

No source excerpt is available for this finding.

Context-Inappropriate Capability

High
Category
Not specified by scanner
Confidence
98% confidence
Finding

The skill explicitly exposes an exec_command tool that accepts an arbitrary string and forwards it to client.execCommand(args?.command, args?.cwd) with no visible restriction, allowlist, confirmation step, or safety boundary. In an agent skill context, this is highly dangerous because prompt-influenced or indirect user-controlled input could become operating-system command execution on the managed server, far exceeding read-only administration and enabling full host compromise, data destruction, or persistence.

Content

No source excerpt is available for this finding.

Missing User Warnings

High
Category
Not specified by scanner
Confidence
96% confidence
Finding

The tool description 'Execute command' understates the risk of unrestricted shell/OS command execution and provides no warning that use may alter, destroy, or exfiltrate system data. In the context of a server-management skill with broad infrastructure access, the lack of clear disclosure and safety gating makes accidental misuse and prompt-driven abuse substantially more likely.

Content

No source excerpt is available for this finding.

Intent-Code Divergence

Medium
Category
Not specified by scanner
Confidence
98% confidence
Finding

The document materially overstates API coverage by claiming approximately 100% overall coverage while its own numeric calculation later shows only 315/584, or 53.9%, for the stated metric. In a server-management skill with broad administrative capabilities, misleading coverage claims can cause agents or operators to overtrust the implementation, assume unsupported actions are safe or available, and make risky automation decisions based on false completeness.

Content

No source excerpt is available for this finding.

Intent-Code Divergence

Medium
Category
Not specified by scanner
Confidence
96% confidence
Finding

The conclusion repeats '100% API coverage' even though the document later concedes that this is an inferred 'actual functional coverage' judgment rather than a demonstrated one-to-one API coverage measurement. For an infrastructure control skill managing containers, databases, files, hosts, and SSL, this kind of unsupported assurance can mislead deployment decisions and reduce scrutiny of unimplemented or partially implemented security-sensitive operations.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
91% confidence
Finding

This markdown file contains user-facing natural language exclusively in Chinese, including headings, descriptions, and recommendations. Under the language/locale policy rule, forcing a specific language without user opt-in or justification is a policy concern.

Content

No source excerpt is available for this finding.

Intent-Code Divergence

Medium
Category
Not specified by scanner
Confidence
97% confidence
Finding

Line L188 states that core modules including File and System are '完整' (complete). Earlier coverage data contradicts this: File is listed at 49% on L026 and System Setting at 18% on L029, so the document's conclusion misrepresents actual implementation status.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
85% confidence
Finding

The installation guide instructs users to export a long-lived API key in shell configuration files but gives no warning about secret exposure, least-privilege, rotation, or accidental leakage through logs, history, or shared accounts. Because this skill manages servers, containers, databases, and websites, compromise of that key could grant broad administrative control.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
92% confidence
Finding

The document advertises operationally destructive commands such as stopping and restarting containers without any warning about service disruption, production impact, or confirmation requirements. In a server-management skill, these examples can be translated directly into agent actions, increasing the chance of accidental outages if a user request is ambiguous or an agent acts too eagerly.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
91% confidence
Finding

This progress document presents all user-facing natural language in Chinese, and there is no indication that the skill is region-specific or that users may choose another language. Under the stated policy, forcing a specific language without user opt-in is a natural-language policy violation.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
87% confidence
Finding

The documentation instructs users to provide an API key and then use the skill to query system, file, log, database, and host-management endpoints across a server, but it does not warn that the skill will use privileged credentials to access and modify remote resources. For markdown files, omissions around credential use and sensitive system access are relevant user-warning gaps.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

This markdown file describes file saves, permission/ownership changes, hostname updates, firewall and SSH changes, and backup restore actions, but does not include warnings that these operations can modify system state, affect availability, or overwrite user data. For markdown files, the skill description should disclose behaviors that could affect user data, privacy, or system integrity.

Content

No source excerpt is available for this finding.

Static analysis

Detected: suspicious.destructive_delete_command

Documentation contains a destructive delete command without an explicit confirmation gate.

Warn
Code
suspicious.destructive_delete_command
Location
OPENCLAW_INSTALL.md:175