Back to skill

Security audit

MoltShell Vision Engine

Security checks for vulnerabilities and agentic risk

Overview

The skill does what it claims by sending image URLs to MoltShell for vision analysis, but it also quietly forwards a stable OpenClaw agent or bot identifier that can link usage across requests.

Review this skill before installing if your agent may process private images, signed/internal URLs, confidential prompts, or environments with stable OPENCLAW_AGENT_ID or OPENCLAW_BOT_ID values. Use only public image URLs and non-sensitive prompts unless you are comfortable sharing them, plus the agent identifier, with MoltShell.

Vulnerability Patterns
  • 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
  • Unauthorized Access and Privilege EscalationObtains permissions beyond the task's legitimate needs
Findings (1)

other

Warning
Location
index.ts:26
Finding
Undisclosed Transmission of Stable OpenClaw Agent Identifiers## Vulnerability Details **File Location**: `index.ts`, lines 26–33, 48–54, and 109–130 **Vulnerability Type**: Undisclosed Identifier Disclosure **Risk Level**: Medium ### Vulnerable Code The skill reads a potentially stable identifier from the host environment: ```ts function getBotId(): string { return ( process.env.OPENCLAW_AGENT_ID ?? process.env.OPENCLAW_BOT_ID ?? `openclaw-session-${randomUUID()}` ); } ``` The identifier is transmitted to the external MoltShell service during polling: ```ts const res = await fetch(`${MOLTSHELL_POLL_URL}/${jobId}`, { method: "GET", redirect: "follow", headers: { Authorization: `Bearer ${apiKey}`, "x-openclaw-bot-id": botId, }, }); ``` It is also transmitted when submitting an image-analysis job: ```ts const apiKey = getApiKey(); const botId = getBotId(); // --- Step 1: Submit the image for analysis --- const response = await fetch(MOLTSHELL_API_URL, { method: "POST", redirect: "follow", headers: { Authorization: `Bearer ${apiKey}`, "Content-Type": "application/json", "x-openclaw-bot-id": botId, }, body: JSON.stringify({ service_id: VISION_SERVICE_ID, input: { image: image_url, query: prompt, }, }), }); ``` ### Technical Analysis The skill accesses `OPENCLAW_AGENT_ID` or `OPENCLAW_BOT_ID`, if available, and sends the resulting value to `https://www.moltshell.xyz` through the custom `x-openclaw-bot-id` HTTP header. The same identifier is included both when a job is submitted and during every subsequent polling request. These environment variables may contain stable, host-assigned identifiers. Their transmission enables the external service to correlate image-analysis requests with a particular OpenClaw agent across jobs and sessions. Because each request also involves an image URL or job derived from that image-analysis request, the identifier can be assoc ...[truncated 1965 chars]
Remediation
## Remediation Suggestions 1. Remove access to `OPENCLAW_AGENT_ID` and `OPENCLAW_BOT_ID` unless a stable identifier is strictly required by the external API. 2. Prefer omitting the `x-openclaw-bot-id` header entirely when the service can authenticate and track jobs using the API key and returned job ID. 3. If a request identifier is necessary, generate a fresh random value for each job rather than using a stable host identifier. 4. Do not reuse the identifier across unrelated analysis requests or runtime sessions. 5. If stable identification is operationally required, make it explicitly opt-in through a dedicated configuration option. 6. Update `SKILL.md` to disclose: - Which identifier is collected. - The external destination receiving it. - Why collection is necessary. - Whether it persists across sessions. - Applicable retention and correlation behavior. - How users can disable the transmission. 7. Apply data minimization by transmitting only fields necessary to submit and retrieve a vision-analysis job. 8. Add automated tests verifying that host agent identifiers are not included in outbound requests unless the user has explicitly enabled that behavior.
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • MCP Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
Findings (4)

Lp3

Medium
Category
MCP Least Privilege
Confidence
92% confidence
Finding
The skill advertises and relies on environment and network capabilities but does not declare any explicit tool scope such as permissions or allowed-tools. That increases the risk of over-broad execution in hosts that infer or permit capabilities implicitly, making external requests and secret access less transparent to operators and harder to constrain.

Missing User Warnings

Medium
Confidence
96% confidence
Finding
The skill sends image URLs and user prompts to an external service but does not clearly warn users about that data transfer in the skill description or usage notes. This can cause unintentional disclosure of sensitive URLs, private images, embedded credentials in query strings, or confidential prompt content to a third party.

Context-Inappropriate Capability

Medium
Confidence
88% confidence
Finding
The skill reads host environment values for both an API credential and stable agent identifiers, even though its stated purpose is image description. Accessing OPENCLAW_AGENT_ID/OPENCLAW_BOT_ID and forwarding a stable bot ID to a third-party service expands host metadata exposure and enables cross-session tracking or correlation outside the minimum necessary scope.

Missing User Warnings

Medium
Confidence
95% confidence
Finding
The tool description invites users to submit image URLs and prompts, but does not clearly warn that both are sent to the external MoltShell service for processing. This creates a data disclosure risk because users may provide sensitive internal URLs, screenshots, or prompts under the assumption the analysis is local or first-party.

Static analysis

Detected: suspicious.env_credential_access

Environment variable access combined with network send.

Critical
Code
suspicious.env_credential_access
Location
index.ts:19