T05 · Unauthorized Access and Privilege Escalation
- Location
relayClient.ts:87- Finding
Operational Commands Are Accepted Before Relay Authentication Completes
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
This skill is a disclosed remote-control relay, but its implementation weakens key security guarantees around authentication state and encrypted transport.
Install only if you trust the relay operator and can enforce wss:// configuration yourself. Before using this in production, the maintainer should reject plaintext ws:// URLs and enforce authenticated online state before accepting prompt, workflow, status, or restart commands.
relayClient.ts:87Operational Commands Are Accepted Before Relay Authentication Completes
config.ts:7Plaintext WebSocket Configuration Exposes Credentials and Remote-Control Traffic
The declared description frames the skill as a secure outbound-only relay and emphasizes what it does not expose (ports, SSH, Telegram), but the actual code chunk shows a remote control protocol and runtime contract with significant control capabilities. Incoming messages include prompt, workflow, status, and restart types, and the runtime must support executing prompts, executing workflows, returning runtime state, and restarting OpenClaw. These are substantive remote administration capabilities not clearly disclosed in the description. While the code does not contradict the 'no exposed ports, no SSH, no Telegram' claims, it materially expands the skill’s functional purpose beyond a generic relay into an active remote execution and restart mechanism.
Referenced artifact was not completely inspected
files: ["relayClient.ts", "config.ts", "capabilities.ts", "index.ts"]
On connection, the client sends the configured auth token to the relay as part of the hello message. Although this is likely functionally necessary, the file lacks any user-facing disclosure or comment warning that credentials are transmitted to an external endpoint.
The code executes a remotely received prompt and streams generated token content back over the WebSocket relay. While the file logs connection and authentication events, it does not provide a user-facing warning or confirmation that prompt contents and model output will be transmitted to a remote service.