Back to skill

Security audit

Sun-Panel Navigation

Security checks for vulnerabilities and agentic risk

Overview

This Sun-Panel skill does what it says, but it stores a reusable password in plaintext and may send it over unencrypted HTTP before making authenticated panel changes.

Review before installing. Use this only with a dedicated low-privilege Sun-Panel account, prefer HTTPS, avoid shared machines, restrict config-file permissions manually if used, and confirm every add or edit operation before allowing the agent to change your panel.

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:18
Finding

Plaintext Credential Storage and Insecure HTTP Transmission

Content
View full analysis
"$HOME/.openclaw/skills/sun-panel/config.json" << 'EOF' { "url": "USER_PROVIDED_URL", "username": "USER_PROVIDED_USERNAME", "password": "USER_PROVIDED_PASSWORD" } EOF echo "配置已保存到 $HOME/.openclaw/skills/sun-panel/config.json" ``` Credential transmission at lines 79-82: ```bash RESPONSE=$(curl -s -X POST "$SUN_PANEL_URL/api/login" \ -H "Content-Type: application/json" \ -d "{\"username\":\"$SUN_PANEL_USERNAME\",\"password\":\"$SUN_PANEL_PASSWORD\"}") ``` ### Technical Analysis The configuration procedure persists a reusable password directly in `config.json`. No `umask`, `chmod`, ownership validation, or other access-control operation is applied. Consequently, the effective permissions depend on the host's existing umask and directory permissions. On a shared or compromised system, another local account or process may be able to read the credential file. The example service URL uses `http://`, and the skill does not validate that `SUN_PANEL_URL` uses HTTPS. If HTTP is used over an untrusted network, the username and password in the login request are transmitted without transport encryption. The token returned by the server and subsequent authenticated API calls are similarly exposed t ...[truncated 2289 chars]
Remediation
View remediation
&2 exit 1 fi cat > "$CONFIG_FILE" << 'EOF' { "url": "USER_PROVIDED_HTTPS_URL", "username": "USER_PROVIDED_USERNAME", "password": "USER_PROVIDED_PASSWORD" } EOF chmod 600 "$CONFIG_FILE" ``` 4. **Validate configuration before authentication** - Parse and validate the URL scheme and hostname. - Refuse empty, malformed, or unexpected values. - Warn users when connecting to private or self-hosted endpoints whose identity cannot be verified. 5. **Limit token exposure** - Keep authentication tokens only in process memory. - Never print token values. - Reauthenticate when necessary rather than persisting tokens. ...[truncated 80 chars]
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Rogue AgentSelf-Modification, Session Persistence
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
Findings (10)

Missing User Warnings

High
Category
Not specified by scanner
Confidence
98% confidence
Finding

The skill instructs the agent to store the Sun-Panel URL, username, and password in a local plaintext JSON file without any explicit warning or protection guidance. Plaintext credential storage materially increases the chance of credential theft from local compromise, backup leakage, or unintended file exposure.

Content

No source excerpt is available for this finding.

Session Persistence

Medium
Category
Rogue Agent
Confidence
83% confidence
Finding

The skill is explicitly designed around persistent local configuration containing reusable credentials, enabling future sessions to authenticate and modify Sun-Panel without re-collecting secrets. This persistence increases blast radius if the local environment or skill execution context is compromised, especially since the secret is stored in plaintext.

Content

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

md
---
name: sun-panel
description: Use this skill when the user wants to add websites, manage shortcuts, create groups, or get icon recommendations for Sun-Panel navigation panel. Keywords: "添加网站", "add website", "sun-panel", "图标推荐", "icon recommend", "快捷方式", "bookmark", "导航面板".
---

# Sun-Panel 导航面板操作指南

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

The trigger description is very broad and overlaps with common requests like adding websites, bookmarks, shortcuts, and icon recommendations. That makes accidental activation more likely, which is risky here because the skill can read stored credentials and perform authenticated changes against a Sun-Panel instance.

Content

No source excerpt is available for this finding.

External Transmission

Medium
Category
Data Exfiltration
Confidence
86% confidence
Finding

This sends stored credentials to a user-configured remote endpoint using curl. While remote login is expected for the skill's purpose, the danger is elevated because the host is arbitrary, may use insecure HTTP as shown in examples, and the skill does not require validation of transport security or endpoint trustworthiness.

Content

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

md
SUN_PANEL_PASSWORD=$(jq -r '.password' "$CONFIG_FILE")

# 登录
RESPONSE=$(curl -s -X POST "$SUN_PANEL_URL/api/login" \
  -H "Content-Type: application/json" \
  -d "{\"username\":\"$SUN_PANEL_USERNAME\",\"password\":\"$SUN_PANEL_PASSWORD\"}")

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
91% confidence
Finding

The skill presents authenticated API operations that create and modify groups and icons, but does not clearly warn that using the skill will make persistent changes to the user's Sun-Panel configuration. This weakens informed consent and increases the chance of unintended administrative changes.

Content

No source excerpt is available for this finding.

External Transmission

Medium
Category
Data Exfiltration
Confidence
60% confidence
Finding

Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Content

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

获取分组列表

bash
curl -s -X POST "$SUN_PANEL_URL/api/panel/itemIconGroup/getList" \
  -H "Content-Type: application/json" \
  -H "token: $TOKEN"

External Transmission

Medium
Category
Data Exfiltration
Confidence
86% confidence
Finding

This is a second instance of the same login pattern: credentials are transmitted to a user-supplied endpoint without strong safeguards. As with the earlier example, the main issue is not malicious exfiltration intent but insufficient controls around where secrets are sent and whether transport is secure.

Content

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

md
SUN_PANEL_PASSWORD=$(jq -r '.password' "$CONFIG_FILE")

# Step 3: 登录获取 Token
RESPONSE=$(curl -s -X POST "$SUN_PANEL_URL/api/login" \
  -H "Content-Type: application/json" \
  -d "{\"username\":\"$SUN_PANEL_USERNAME\",\"password\":\"$SUN_PANEL_PASSWORD\"}")

External Transmission

Medium
Category
Data Exfiltration
Confidence
60% confidence
Finding

Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Content

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

md
# 2. 如果不存在,创建分组
if [ -z "$AI_GROUP_ID" ] || [ "$AI_GROUP_ID" == "null" ]; then
  curl -s -X POST "$SUN_PANEL_URL/api/panel/itemIconGroup/edit" \
    -H "Content-Type: application/json" \
    -H "token: $TOKEN" \
    -d '{"title":"AI工具","icon":"mdi:robot"}'

External Transmission

Medium
Category
Data Exfiltration
Confidence
60% confidence
Finding

Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Content

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

md
fi

# 3. 批量添加图标
curl -X POST "$SUN_PANEL_URL/api/panel/itemIcon/addMultiple" \
  -H "Content-Type: application/json" \
  -H "token: $TOKEN" \
  -d "[

External Transmission

Medium
Category
Data Exfiltration
Confidence
60% confidence
Finding

Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Content

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

md
ICON_URL=$(echo $ICON_RESP | jq -r '.data.iconUrl')

# 使用获取到的 favicon 作为图标
curl -X POST "$SUN_PANEL_URL/api/panel/itemIcon/edit" \
  -H "Content-Type: application/json" \
  -H "token: $TOKEN" \
  -d '{

Static analysis

No suspicious patterns detected.