Back to skill

Security audit

WeChat Article Extractor

Security checks for vulnerabilities and agentic risk

Overview

The skill has a coherent WeChat-article extraction purpose, but its automatic mirror-download flow combines untrusted search results with shell execution and broad network/browser access without enough safeguards.

Review before installing. Use this only in a restricted environment if you accept sending article search terms to third-party search or mirror sites, writing outputs to local disk, and allowing the agent to run shell commands. Prefer a version that validates mirror domains and redirects, avoids shell interpolation, asks before browser snapshot access, and stores outputs in a user-approved private location.

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)

T09 · Insecure Skill Coding Practices

Error
Location
SKILL.md:78
Finding

Shell Command Injection Through an Unvalidated Mirror URL

Content
View full analysis
" -o /tmp/wechat-article.html ``` Verify file size > 10KB (smaller usually means redirect/error page). ``` ### Technical Analysis The workflow instructs the Agent to take a mirror URL obtained from web-search results and interpolate it directly into a shell command executed through the `exec` tool. The URL is enclosed in double quotes, but double quotes do not neutralize all shell syntax. If an attacker-controlled value can terminate the quoted argument or introduce command substitution, shell operators may be evaluated by the command interpreter. The instructions do not require URL parsing, hostname allowlisting, shell metacharacter rejection, or a structured process API that passes arguments without shell interpretation. Search poisoning, a compromised mirror, or an unexpectedly crafted search-result URL could therefore turn a content-download operation into arbitrary local command execution. ### Attack Path 1. An attacker creates or compromises a page likely to appear in mirror-search results for a targeted WeChat article. 2. The attacker causes the discovered mirror URL to contain shell-significant content or otherwise supplies a crafted URL to the workflow. 3. The Agent selects that search result as the mirror URL. 4. The Agent substitutes the untrusted value into: `curl -s -L "" -o /tmp/wechat-article.html` 5. The `exec` tool invokes the command through a shell. 6. The shell evaluates the injected syntax, executing attacker-selected commands in addition to or instead of `curl`. ### Impact Assessment Successful exploitation could execute arbitrary commands with the operating-system privileges of the Agent or OpenClaw process. Depending on that accou ...[truncated 546 chars]
Remediation
View remediation

T05 · Unauthorized Access and Privilege Escalation

Error
Location
SKILL.md:63
Finding

Server-Side Request Forgery Through Unrestricted Mirror Retrieval and Redirects

Content
View full analysis
") ``` **Mirror site priority** (ranked by content quality and reliability): 1. **53ai.com** — full content, reliable formatting 2. **mp.ofweek.com** — tech articles 3. **juejin.cn** — developer content 4. **woshipm.com** — product/business content 5. **36kr.com** — tech/business news If title is unknown, try: `web_search("site:53ai.com ")` **If no mirrors found:** Try the Chrome Extension Relay fallback (see Fallback section). ### Step 4 — Download and extract **Option A — Mirror found:** ```bash curl -s -L "" -o /tmp/wechat-article.html ``` Verify file size > 10KB (smaller usually means redirect/error page). ``` ### Technical Analysis The documented mirror domains are presented only as priorities; the workflow does not enforce them as an allowlist. A URL selected from search results is fetched with `curl -L`, which automatically follows redirects. There is no requirement to validate the initial destination, resolve and inspect its IP address, or validate every redirect target. Consequently, an attacker-controlled search result or compromised mirror can direct the Agent toward loopback, private-network, link-local, or otherwise sensitive endpoints. A public URL may also pass an initial hostname check and then redirect to an internal address. DNS rebinding can create a similar validation-to-connection discrepancy if validation and retrieval do not use a securely pinned resolution result. The downloaded response is subsequently processed as article HTML and may be written to Markdown, creating a path by which internal response content could be exposed through the generated output. ### Attack Path 1. An attacker publishes ...[truncated 1506 chars]
Remediation
View remediation
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 Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
Findings (9)

Tp4

High
Category
MCP Tool Poisoning
Confidence
96% confidence
Finding

The skill claims to safely and automatically extract WeChat articles from shared URLs, but its documented behavior actually relies on mirror-site discovery, shelling out to curl, and processing local HTML files. This mismatch is dangerous because users and orchestrators may trust it with one data-flow and privacy model while it performs another, including pulling content from third-party mirrors that may be untrusted, stale, or maliciously modified.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

The README explicitly states that the skill works by searching third-party mirror and aggregator sites for copies of WeChat articles, but it does not warn users that their requested article URL or reading intent may be disclosed to those external sites. This creates a real privacy and OPSEC risk, especially when the article topic, account followed, or timing of access is sensitive.

Content

No source excerpt is available for this finding.

Undeclared Tool Scope

Medium
Category
MCP Least Privilege
Confidence
84% confidence
Finding

The skill invokes disk-writing behavior by directing output to /tmp/ and describing saved Markdown files, but it does not declare an explicit tool scope or permissions boundary. This creates a transparency and least-privilege problem: a reviewer or runtime may underestimate the skill's ability to read/write local files, increasing the chance of unintended file access or unsafe composition with other tools.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

The Chrome Relay fallback instructs the user to open the article in their local browser and then allows the skill to read a browser snapshot, but it does not clearly warn that page contents from the user's local session will be exposed to the agent. This can create an unexpected privacy boundary crossing, especially if the browser tab contains personalized data, account context, or adjacent sensitive content.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

Medium
Category
Not specified by scanner
Confidence
97% confidence
Finding

The manifest describes a skill that takes an mp.weixin.qq.com URL, finds accessible mirrors automatically, and saves the extracted article. This file's documented usage and implementation only accept an existing local HTML file, then parse and convert it to Markdown; there is no network retrieval, bot-detection handling, or mirror-site selection logic anywhere in the code.

Content

No source excerpt is available for this finding.

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
90% confidence
Finding

Several trigger phrases are broad enough to match ordinary user requests, increasing the chance of unintended activation. In this skill, accidental activation is more concerning because the skill also requests web access and exec, so a false trigger could cause unnecessary network activity or expose the agent to untrusted content and downstream prompt-injection risk.

Content

No source excerpt is available for this finding.

Context-Inappropriate Capability

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

The manifest requests the general-purpose exec capability even though the stated task is fetching and converting web content into Markdown. Because exec enables arbitrary command execution, it materially expands the attack surface: a compromised skill implementation, prompt injection from fetched pages, or future logic changes could use shell access to run unintended commands, access local files, or invoke external utilities beyond the article-extraction need.

Content

No source excerpt is available for this finding.

Missing User Warnings

Low
Category
Not specified by scanner
Confidence
92% confidence
Finding

The skill instructs saving extracted article content to disk and defaults to /tmp/ without making the write behavior prominent to the user. While low severity, silent or weakly disclosed file creation can surprise users, leak sensitive reading material into shared temp storage, or leave recoverable artifacts on multi-user systems.

Content

No source excerpt is available for this finding.

Intent-Code Divergence

Low
Category
Not specified by scanner
Confidence
72% confidence
Finding

The top-level documentation frames the tool as extracting WeChat article content from mirror HTML, suggesting a bounded purpose. However, the CLI accepts any '--source' value and injects it into the generated Markdown as the original article URL, regardless of whether it is a WeChat source or related to the input HTML.

Content

No source excerpt is available for this finding.