T06 · System Persistence
- Location
main.py:290- Finding
Undocumented Remote Creation and Control of Persistent Agent Jobs
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
This cloud bridge is mostly coherent with its dashboard purpose, but it gives the remote service high-impact local control that is under-scoped and partly under-disclosed.
Review carefully before installing. This skill is a persistent cloud-connected control bridge, not just remote chat: it can send workspace file contents to ChatClaw, mutate local skill configuration, force reinstall skills, and manage scheduled agent jobs. Install only if you trust the ChatClaw account, relay service, and operators with that level of control, and prefer a version that requires local approval for file reads, skill replacement, and cron changes.
main.py:290Undocumented Remote Creation and Control of Persistent Agent Jobs
main.py:259Remote Forced Replacement of Executable Skill Packages
main.py:178Cloud-Initiated Workspace File Content Exfiltration
gateway_client.py:63Excessive Operator Privileges Granted to a Persistent Cloud Bridge
relay_client.py:21Unrestricted Relay URL Allows Plaintext or Attacker-Controlled Data Transport
The dependency is pinned to a version reported by the scanner as having multiple published advisories, including issues in bundled OpenSSL wheels and PKCS#7 decryption behavior. In a skill that connects to a cloud dashboard and likely handles encrypted network traffic, vulnerable cryptographic primitives or packaged crypto libraries can directly affect confidentiality, integrity, and authentication.
The skill explicitly states it will modify openclaw.json to enable a local chat-completions endpoint, while the high-level description presents the skill mainly as a dashboard connector. Even if intended, remotely mediated access combined with undeclared local configuration changes and possible task-scheduling functionality expands the attack surface and can leave operators unaware that the skill is altering local service exposure.
The skill explicitly states it will modify openclaw.json to enable a local chat-completions endpoint, while the high-level description presents the skill mainly as a dashboard connector. Even if intended, remotely mediated access combined with undeclared local configuration changes and possible task-scheduling functionality expands the attack surface and can leave operators unaware that the skill is altering local service exposure.
The client requests broad scopes including operator.admin, operator.approvals, and operator.pairing, which exceed the described need for dashboard chat, token tracking, read-only file browsing, and limited skills management. Excessive privileges increase blast radius if the skill is misused or compromised, enabling actions beyond user expectations and violating least privilege.
The implemented capability set materially exceeds the declared skill purpose: in addition to chat and read-only file browsing, the client can create, modify, delete, and force-run cron jobs. That is a dangerous scope/behavior mismatch because downstream users, policy engines, or reviewers may authorize the skill under the assumption it is limited, while it actually has persistent execution and task-triggering power.
The skill accepts remote cloud messages that invoke local subprocesses to change skill enablement and reinstall packages via OpenClaw/ClawHub CLI. That gives the remote dashboard effective administrative control over local extensions, which can alter security posture or install untrusted code if the cloud account, API key, or relay channel is compromised.
Skill manipulates agent memory, state, or stored context. Memory corruption can alter personality, override safety rules, or cause unpredictable behavior.
logger.debug(f"Local → Cloud: {json.dumps(message)[:200]}")
async def close(self) -> None:
"""Gracefully close the connection and reset state."""
self._connected.clear()
if self.ws:
await self.ws.close()
The pinned aiohttp version is flagged with multiple advisories affecting cookie handling, header construction, and multipart parsing. Because this skill communicates with a remote cloud dashboard and may process HTTP responses, sessions, and uploaded/downloaded data, these flaws could enable request/response smuggling, session scope issues, or denial of service depending on how the library is used.
The README prominently advertises remote chat, token tracking, task management, and message relaying to a cloud dashboard, but does not clearly warn users that prompts, responses, metadata, and possibly workspace-derived content may leave the local machine and transit a third-party service. This omission can cause users to enable the skill without informed consent about privacy and data handling, which is especially sensitive for agent workflows that may process secrets, proprietary code, or internal documents.
The manifest frames the skill as providing remote chat, tracking, task management, read-only file browsing, and limited skills management. The README indicates the skill can change local gateway configuration or state by auto-enabling an HTTP endpoint, which is a broader write/action capability than the mostly access-oriented description suggests.
The skill declares substantial capabilities—network access, file read/write, environment access, and shell execution—but does not expose an explicit permission or allowed-tools declaration. That makes the trust boundary opaque to operators while the skill can modify local configuration, access authentication material, invoke local CLIs, and maintain a cloud relay, which materially increases the risk of overprivileged deployment.
npx commands without a version suffix (e.g. @1.0.0) create a rug-pull risk if the upstream server is compromised and publishes a malicious update.
Encouraging users to paste a setup prompt pre-filled with the API key directly into an agent chat creates a natural-language secret exfiltration path. Once the key is placed in chat context, it may be logged, retained in transcripts, forwarded through the relay, or exposed to other tools and prompts, violating basic secret-handling practices.
The code exposes direct cron deletion through cron_remove() with no built-in confirmation, safety interlock, or audit-oriented prompt. In a remote dashboard/control skill, this makes destructive action easier to trigger accidentally or via a confused-deputy flow, potentially disrupting scheduled automation or persistence visibility.
On enable, the skill silently rewrites the core OpenClaw configuration to enable the chatCompletions HTTP endpoint. Even if intended for functionality, modifying global platform configuration without explicit user consent expands the agent's attack surface and may expose a local endpoint other components can abuse.
The skill automatically rewrites openclaw.json during enablement, without an explicit warning in this code path that a core local config file will be changed. Automatic local configuration mutation is risky because it can unexpectedly enable new listening functionality and make incident review harder if users did not knowingly approve the change.
The files.get path retrieves local file contents from the gateway and sends them to the cloud relay without any local confirmation or warning in this file. Since the skill is specifically a remote dashboard bridge, this materially increases the danger: anyone controlling the remote channel can browse and exfiltrate workspace contents within the gateway's allowed scope.
Remote messages can trigger subprocess-backed state changes such as enabling/disabling skills and reinstalling them, with no explicit user warning or approval path shown here. In the context of a cloud-connected bot management skill, this is especially dangerous because it turns a remote control channel into privileged local administration over installed code.
The code exposes remote cron management operations (list/add/update/remove/trigger) through the cloud relay, but the disclosed metadata only mentions chat, token tracking, file browsing, and skills management. This capability gap is security-relevant because a user may authorize a chat/file browsing bridge without realizing it also grants persistent task creation and execution control to the remote service.
This client establishes a persistent WebSocket to a cloud relay and is explicitly designed to transmit agent messages between a local environment and a remote dashboard. In the context of a skill that also advertises remote chat, token tracking, workspace file browsing, and skills management, sending data off-host without an explicit user-facing consent/notice mechanism creates a real privacy and data-exposure risk, even if transport security is used.
The in-code documentation says the relay handles file browsing and chat dispatch, but omits the implemented cron and skills control functions. In a security-sensitive integration, incomplete documentation is a real transparency problem because reviewers and users may underestimate the authority granted to the remote service.
Detected: suspicious.exposed_secret_literal