T05 · Unauthorized Access and Privilege Escalation
- Location
scripts/wechat_fetch.py:40- Finding
Unrestricted Browser Navigation Enables SSRF and Local Resource Access
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
This skill has a coherent WeChat article-reporting purpose, but its browser and file-writing scripts are under-scoped enough to risk unintended local/private URL access and file overwrite if inputs are untrusted.
Install only if you are comfortable running a browser automation scraper that sends search terms to Sogou/WeChat, stores fetched article content locally, and asks the current model to summarize it. Treat articles_new.json and keyword inputs as trusted-only until the skill validates URL hosts, escapes report HTML, and sanitizes output filenames to prevent path traversal and unintended file overwrite.
scripts/wechat_fetch.py:40Unrestricted Browser Navigation Enables SSRF and Local Resource Access
scripts/wechat_pdf.py:91Persistent HTML Injection in Locally Rendered PDF Report
{art['source']} | {date}
{art.get('summary', '摘要生成中...')}
scripts/wechat_pdf.py:235User-Controlled Keyword Enables Path Traversal and File Overwrite
SKILL.md:102Unpinned Runtime Dependencies and Browser Artifacts
The skill claims to collect article metadata but also describes fetching full article bodies, opening each article detail page, capturing final URLs, and writing full text to local JSON. That is a substantial expansion of network and data-handling scope, increasing privacy, copyright/compliance, and data-exfiltration risk compared with the declared purpose.
The skill claims to collect article metadata but also describes fetching full article bodies, opening each article detail page, capturing final URLs, and writing full text to local JSON. That is a substantial expansion of network and data-handling scope, increasing privacy, copyright/compliance, and data-exfiltration risk compared with the declared purpose.
The skill claims to collect article metadata but also describes fetching full article bodies, opening each article detail page, capturing final URLs, and writing full text to local JSON. That is a substantial expansion of network and data-handling scope, increasing privacy, copyright/compliance, and data-exfiltration risk compared with the declared purpose.
The skill instructs reading and writing multiple local files (articles.json, articles_new.json, wechat_pages/*.pdf, final report PDF) but declares no tool scope or permissions. This creates an authorization and transparency gap: an agent could modify the user's workspace and generate files without an explicit capability declaration, making unintended file-system effects harder to review or constrain.
The workflow explicitly sends fetched article content to the current chat model for summarization, yet the skill does not prominently warn about external content retrieval and model processing. This creates a privacy and data-governance risk because full article text and potentially sensitive material may be transmitted, retained, or processed outside the user's expectations.
The script’s implemented behavior materially differs from the advertised skill behavior: instead of performing a keyword-based WeChat search and extracting metadata, it reads a local JSON file of URLs and renders entire pages to PDF. In an agent setting, this can hide undeclared collection of arbitrary URLs and content, expanding access beyond user intent and making the skill capable of processing attacker-supplied local inputs without transparent disclosure.
The docstring and CLI usage imply the keyword argument controls what is fetched, but the code ignores it and processes every entry in a local file. This discrepancy is dangerous because users or higher-level agents may believe execution is scoped to a requested query when in fact arbitrary pre-populated URLs are fetched, enabling unintended data access or exfiltration through misleading interface semantics.
This file contains natural-language instructions and status/error messages exclusively in Chinese, which effectively forces a specific language on users. The policy allows fixed locale behavior only when user opt-in is offered or the locale restriction is clearly justified, neither of which is present here.
The code sends user-provided search keywords to Sogou/WeChat-related third-party services and then follows result links, but it does not warn users that their queries and browsing activity will leave the local environment. In this skill context, keywords may reveal research interests or sensitive topics, so undisclosed network exfiltration of user input is a meaningful privacy and operational risk.
The skill metadata says it should collect titles, summaries, publication dates, and source accounts, but the code opens each article page, extracts the full body text, and stores it locally. This creates a data over-collection issue: it gathers substantially more third-party content than disclosed, increasing privacy, copyright, and compliance risk if the skill is used or redistributed at scale.
技能描述声称最终产物是 PDF 报告,但该脚本仅将结果序列化到 articles.json,没有任何 PDF 生成逻辑。这里不是实现细节差异,而是输出形式与技能宣称的核心结果不一致。
The skill creates several local artifacts, including JSON intermediates, a directory of per-article PDFs, and a final report, but does not clearly warn users up front. Lack of notice can lead to unexpected disk usage, residual sensitive content on disk, and confusion about what was created or where it was stored.
Error output is presented only in Chinese, and there is no indication elsewhere in the file that users can choose another language. This is a natural-language policy concern because the skill imposes a locale without explicit opt-in or documented justification.
The module docstring and all user-facing messages indicate the skill is designed to operate only in Chinese, and there is no option for the user to choose another language or locale. This matches the policy category for forced language/locale behavior without explicit opt-in.
Natural-language text throughout the script, including the module docstring and runtime messages, is exclusively in Chinese. There is no opt-in, language selection, or stated justification that this skill is intended only for a Chinese-speaking or region-specific context.
The script persistently writes scraped article data to a fixed file in the workspace without clearly disclosing that collected content will be stored locally. Undisclosed persistence can expose sensitive search activity or retained third-party content to other local processes, users, or later workflow steps that access the workspace.
No suspicious patterns detected.