Back to skill

Security audit

Chat DeepSeek by Browser

Security checks for vulnerabilities and agentic risk

Overview

The skill mainly automates DeepSeek chat, but it also forwards login QR-code screenshots through messaging channels and requests broad command and file authority without tight scoping.

Review this skill before installing. Use it only if you are comfortable sending prompts to DeepSeek and letting the skill operate a logged-in browser profile. Avoid forwarding login QR codes through messaging channels; prefer scanning directly in the browser. The publisher should narrow tool permissions, remove automatic QR screenshot forwarding, and add explicit confirmation and destination checks for any outbound message.

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

T05 · Unauthorized Access and Privilege Escalation

Warning
Location
SKILL.md:13
Finding
Overly Broad Tool Permissions Violate Least Privilege<![CDATA[ ## Vulnerability Details **File Location**: `SKILL.md:13`; duplicated in `skills/SKILL.md:13` **Vulnerability Type**: Excessive tool permissions **Risk Level**: Medium ### Vulnerable Code ```yaml allowed-tools: Bash(npm:*) Bash(npx:*) Bash(openclaw:*) Bash(curl:*) Read Write WebFetch ``` ### Technical Analysis The skill declares access to package execution through `npm` and `npx`, arbitrary outbound requests through `curl` and `WebFetch`, unrestricted file reading and writing, and broad OpenClaw command execution. These capabilities materially exceed the permissions required for the declared workflow, which is primarily browser automation against `https://chat.deepseek.com`. In particular: - `npx` can download and execute third-party packages. - `npm` can execute package lifecycle scripts and locally defined scripts. - `curl` and `WebFetch` can communicate with destinations unrelated to DeepSeek. - `Read` may expose local configuration, credentials, tokens, and user data. - `Write` can modify files outside the narrow requirements of storing a screenshot. - `Bash(openclaw:*)` permits a broad set of OpenClaw operations rather than only the required browser and messaging actions. No malicious use of these permissions was identified in the reviewed files. However, exposing all of them to an instruction-driven skill creates an unnecessary privilege boundary failure and increases the consequences of malicious input, compromised external content, or agent misinterpretation. The same permission declaration is included in both copies of the skill documentation, so either packaged entry point retains the excessive authority. ### Attack Path 1. A user, external page, or other untrusted source supplies instructions while this skill is active. 2. The agent interprets those instructions as requiring an allowed command or filesystem operation. 3. The broad permission declaration allows the agent to invoke `npx`, `npm`, `curl`, `WebFetch`, `Read`, `Write`, ...[truncated 891 chars]
Remediation
<![CDATA[ ## Remediation Suggestions 1. Remove capabilities that are not necessary for the browser workflow: - Remove `Bash(npm:*)` and `Bash(npx:*)`. - Remove `Bash(curl:*)` and `WebFetch` unless a separately reviewed network workflow requires them. - Remove unrestricted `Read` and `Write`. 2. Replace broad `Bash(openclaw:*)` access with narrowly scoped browser and messaging operations. 3. If screenshot storage is required, grant write access only to a dedicated directory and grant read access only to the generated screenshot. 4. Restrict outbound browser navigation to approved DeepSeek origins, including: - `https://chat.deepseek.com/` - Any explicitly documented authentication origin required for QR login. 5. Require explicit user confirmation before transmitting screenshots, questions, or responses through messaging channels. 6. Apply the corrected permission declaration to both `SKILL.md` and `skills/SKILL.md` so the duplicate packaged definitions remain consistent. ]]>

T09 · Insecure Skill Coding Practices

Warning
Location
SKILL.md:169
Finding
Shell Command Injection Risk in Messaging Command Construction<![CDATA[ ## Vulnerability Details **File Location**: `SKILL.md:169-177`; duplicated in `skills/SKILL.md:169-177` **Vulnerability Type**: Unsafe construction of shell commands using runtime identifiers **Risk Level**: Medium ### Vulnerable Code ```javascript await exec({ command: 'imsg send --to "<account_id>" --text "DeepSeek QR Code Login - Please scan with WeChat" --file "/path/to/screenshot.jpg"' }); await exec({ command: 'openclaw message send --channel whatsapp --target <account_id> -m "DeepSeek QR Code Login - Please scan with WeChat" --media "<your-workspace>/snapshot/screenshot.jpg"' }); await exec({ command: 'openclaw message send --channel signal --target <account_id> -m "DeepSeek QR Code Login - Please scan with WeChat" --file "/path/to/screenshot.jpg"' }); ``` ### Technical Analysis The documented implementation constructs complete shell command strings and expects placeholders such as `<account_id>` and `<your-workspace>` to be replaced with runtime values. The WhatsApp and Signal account identifiers are not quoted. A value containing whitespace or shell metacharacters could therefore introduce additional arguments, redirections, pipelines, command substitutions, or additional commands. The iMessage example surrounds the identifier with double quotes, but double quotes do not safely neutralize every shell construct, including command substitution, if untrusted content is inserted without escaping. The workspace and file paths are also embedded in shell command strings. If they are replaced with paths containing quote characters or shell syntax, they can create a similar injection condition. The finding applies to the documented execution pattern. The reviewed project does not contain a concrete implementation that validates these values, uses an argument-array process API, or otherwise establishes that substitution is safe. ### Attack Path 1. An attacker influences an account identifier, channel target, workspace value, or genera ...[truncated 1281 chars]
Remediation
<![CDATA[ ## Remediation Suggestions 1. Do not construct shell command strings from runtime values. Use a process API that accepts an executable and an argument array, for example: ```javascript await spawnCommand("openclaw", [ "message", "send", "--channel", channel, "--target", accountId, "-m", message, "--media", screenshotPath ]); ``` 2. Disable shell interpretation explicitly, such as by using `shell: false`, where supported. 3. Validate channel names against a fixed allowlist such as `whatsapp` and `signal`. 4. Validate account identifiers using strict, channel-specific formats. Reject whitespace, control characters, shell metacharacters, unexpected prefixes, and values that do not correspond to the current verified conversation. 5. Resolve and normalize screenshot paths before use. Require the resulting path to remain inside a dedicated workspace screenshot directory. 6. Require explicit user approval before sending a login QR code and display the resolved channel and destination to the user. 7. If the platform only supports shell strings, apply a well-tested operating-system-specific shell escaping routine to every dynamic argument. Simple quoting or manual character replacement is not sufficient. 8. Update both `SKILL.md` and `skills/SKILL.md` to remove the unsafe duplicated examples. ]]>
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
Findings (11)

Ssd 3

High
Confidence
98% confidence
Finding
The instructions operationalize forwarding a live login QR code through plain-language messaging workflows, which exposes authentication material outside the intended trust boundary. A forwarded QR image can be intercepted, misrouted, retained by messaging providers, or abused by unintended recipients, enabling account compromise or unauthorized session establishment.

Ssd 3

High
Confidence
96% confidence
Finding
The skill explicitly instructs operators to capture a login QR code and relay it over external messaging channels for scanning. Authentication bootstrapping material should not be redistributed because it broadens who can access it, undermines channel integrity, and can enable unauthorized session creation if intercepted or sent to the wrong target.

Missing User Warnings

Medium
Confidence
93% confidence
Finding
The skill is designed to send user prompts to chat.deepseek.com, yet its description does not clearly warn that user content will be transmitted to a third-party AI service. This creates a privacy and data-handling risk, especially if users assume the skill only performs local browser automation.

Missing User Warnings

Medium
Confidence
94% confidence
Finding
The QR-login workflow includes sending screenshots and messages via third-party channels, but the skill description does not clearly disclose this behavior to the user up front. That lack of transparency prevents informed consent for cross-channel transmission of potentially sensitive authentication-related content.

Context-Inappropriate Capability

Medium
Confidence
96% confidence
Finding
The skill explicitly instructs taking a DeepSeek login QR-code screenshot and forwarding it over external messaging channels such as iMessage, WhatsApp, and Signal. Even if intended to help the user complete login, this expands the exposure of authentication material beyond the browser session and creates an unnecessary exfiltration path that is not required for basic chat automation.

Intent-Code Divergence

Medium
Confidence
89% confidence
Finding
The skill states "No Files Uploading" and tells operators not to upload files, but earlier sections instruct sending screenshot files externally during login. This contradiction increases operator confusion and weakens security boundaries, making unsafe handling of sensitive images more likely.

Vague Triggers

Medium
Confidence
91% confidence
Finding
The alias list is broad and includes multiple natural-language variants such as 'ask-deepseek', 'open-deepseek', and 'deepseek-search', which can cause the skill to be selected for common user requests that merely mention DeepSeek. In an agentic environment, overbroad invocation increases the chance of unintended browser automation, account use, and data being sent to an external service without the user explicitly choosing this skill.

Missing User Warnings

Medium
Confidence
94% confidence
Finding
The skill description omits a clear warning that user prompts are sent to DeepSeek, a third-party service. That omission is security-relevant because users may share sensitive or regulated data under the assumption the skill only performs local browser automation, when in reality their content is disclosed externally.

Missing User Warnings

Medium
Confidence
92% confidence
Finding
The skill lacks a clear warning and consent boundary before sending login QR-code screenshots through external messaging channels. Even if intended to help the user complete login, silently exporting authentication-related images to other channels can violate user expectations and expose sensitive material to third parties or misaddressed recipients.

Context-Inappropriate Capability

Medium
Confidence
95% confidence
Finding
The skill instructs capturing a DeepSeek login QR code and sending the image over external messaging channels, which exceeds the stated purpose of asking questions and returning responses. QR-based login artifacts are authentication material; relaying them through unrelated channels increases the attack surface, can expose session-establishment data to unintended recipients, and creates a path for account takeover or privacy leakage.

Intent-Code Divergence

Medium
Confidence
89% confidence
Finding
The document claims 'No Files Uploading' and instructs not to upload files, yet earlier steps direct the skill to create and send screenshot files through messaging channels. This contradiction can mislead operators about actual data flows, causing them to underestimate that the skill handles and transmits image files containing sensitive authentication content.

Static analysis

No suspicious patterns detected.