T05 · Unauthorized Access and Privilege Escalation
- Location
assets/dashboard/ecosystem.config.js:3- Finding
Entire OpenClaw Workspace Exposed by Unauthenticated Static Server
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
This skill is a coherent local monitoring dashboard, but its deployment exposes workspace files and unauthenticated mutable APIs broadly enough that users should review and harden it before installing.
Install only in an isolated workspace and bind both services to 127.0.0.1 or place them behind authentication. Do not expose ports 8888 or 8889 to a network, avoid serving the whole workspace, sanitize dashboard-rendered data, pin PM2 or use a reviewed local dependency, and treat the recommended Cron job as an opt-in background collector.
assets/dashboard/ecosystem.config.js:3Entire OpenClaw Workspace Exposed by Unauthenticated Static Server
assets/dashboard/agent-api.js:41Unauthenticated Agent and Quota API Exposed on All Network Interfaces
assets/dashboard/agent-dashboard.html:1173Stored DOM XSS Through Unescaped Agent and Cron Data
assets/dashboard/agent-api.js:71Unbounded HTTP Request Bodies Permit Memory-Exhaustion Denial of Service
SKILL.md:34Unpinned Global PM2 Installation Creates Supply-Chain Risk
The skill advertises significant operational features that are not substantiated by the described or detected behavior, creating a trust gap between what users expect and what is actually deployed. In a monitoring/operations context, overstated capabilities can cause users to rely on nonexistent alerting, cron control, renewal, or agent-status features, leading to missed incidents, quota overruns, or unsafe administrative assumptions.
Without declared permissions the skill's intent is opaque and cannot be validated.
The header comment states this is a '轻量级 HTTP 服务,提供 Agent 状态数据', which suggests a read-oriented status API. In reality, the server also accepts POST requests to /api/quota and /api/cron-update and writes persistent changes to local JSON files, expanding the behavior beyond merely serving status data.
This HTML file declares lang="zh-CN" and the interface strings are consistently rendered in Chinese, with later logic also formatting dates/times using the zh-CN locale. Under the policy, forcing a specific language or locale without user opt-in is a natural-language policy violation unless clearly justified as region-specific.
The manifest advertises '订阅到期倒计时与一键续订' / 'one-click renewal', which implies an actual subscription renewal capability. However, the UI's renewal flow only opens a modal and later updates local in-memory countdown variables, with no backend/API call to any subscription service.
The modal tells the user '续订后到期日将自动顺延', suggesting a real persisted subscription update. In reality, confirmRenew merely adds 30 days to the JavaScript variable 'subExpire' and increments 'subTotalDays', so the effect is temporary and local to the page session.
This file explicitly instructs users to create a recurring cron job that continuously refreshes session-derived monitoring data, which introduces persistent automated access to agent/session metadata over time. In this skill context, persistence is expected for monitoring, but it still increases exposure by enabling ongoing collection and storage without per-run user review.
## Data Update Cron (Recommended)
Create a Cron job to update agent-data.json with fresh session data.
### Recommended Settings
The guide recommends a silent background cron that writes to {workspace}/agent-data.json without an explicit notice about ongoing file modification, retention, or overwrite behavior. Silent persistence can surprise users, create integrity issues for workspace files, and normalize unattended collection of session-derived data without clear consent or review.
The manifest description and heading prominently present the skill in Chinese alongside English branding, but the document does not state that language is optional or user-selectable. Under the policy, locale or language constraints should either be opt-in or clearly justified; here the skill appears generally applicable rather than region-specific.
The file’s natural-language description and many user-facing messages are written in Chinese, including the header and endpoint descriptions, with no indication that users may choose another language. This can violate a language/locale policy when a skill implicitly forces one language without opt-in.
At startup, the service prints an endpoint list containing only GET /api/agents and GET /api/health, while the code also implements GET/POST /api/quota, GET /api/cron, and POST /api/cron-update. This operational documentation gives a materially incomplete picture of the API surface, especially hiding state-changing endpoints.
The code calls toLocaleString('zh-CN', ...), which enforces a specific locale for displayed schedule times regardless of user preference. This is a locale policy issue because the file does not provide any user choice or documented regional justification.
new Date().toLocaleTimeString('zh-CN') forces Chinese locale formatting for a user-facing timestamp. Because the file does not offer locale selection or explain a region-specific limitation, this conflicts with the language/locale policy.
The code uses subExpire.toLocaleDateString('zh-CN', ...), which fixes expiry-date presentation to Chinese locale formatting. This is another user-facing locale constraint that is neither configurable nor explicitly justified.
This JavaScript file contains natural-language comments and console output in Chinese, including the title and operational messages. Under the stated policy, forcing a specific language without user opt-in or a documented locale-specific justification is a natural-language policy issue.
This markdown file describes a recurring cron job and payload template, but it does not clearly specify the exact activation boundaries for when this skill should run beyond a generic recommended schedule. Because the guidance is broad and lacks explicit negative examples or tighter constraints, it could lead to unintended or overly broad background invocation patterns.