T09 · Insecure Skill Coding Practices
- Location
scripts/wechat_to_md.py:43- Finding
Server-Side Request Forgery Through Unrestricted Article URLs
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
The skill matches its WeChat-to-Markdown purpose, but it needs review because it can fetch arbitrary web or embedded image URLs and write downloaded content into local notes without strong validation or limits.
Install only if you are comfortable with a local crawler that downloads remote article text and images into your Obsidian files. Use a dedicated virtual environment, avoid --break-system-packages, choose an explicit output directory, prefer --no-images for untrusted links, and only process links you trust until URL/domain, size, and path validation are added.
scripts/wechat_to_md.py:43Server-Side Request Forgery Through Unrestricted Article URLs
scripts/wechat_to_md.py:404Server-Side Request Forgery Through Attacker-Controlled Image Sources
scripts/wechat_to_md.py:391Directory Traversal and File Overwrite Through Remote Article Titles
scripts/wechat_to_md.py:43Unbounded Remote Response Processing Enables Resource Exhaustion
SKILL.md:68Unpinned Third-Party Dependency Installation
The skill clearly performs network access, shell/package installation steps, and local file writes, but the manifest does not declare any tool scope or permission boundaries. This increases the chance of over-broad execution in an agent environment, where the skill may be invoked with more capabilities than users expect, especially since it downloads remote content and writes it to disk by default.
The description says the tool saves WeChat articles to a local Obsidian knowledge base, but it does not prominently warn that downloaded article text and images are written to the local filesystem by default. In an agent setting, insufficient disclosure can lead to unintended persistence of untrusted remote content, surprising users and increasing the risk of clutter, sensitive data mixing, or accidental storage in synced note repositories.
The package description is entirely in Chinese and describes the tool only in that locale, which can indicate a language-specific constraint without user opt-in. The file does not provide any alternative language option or document a justified region-specific limitation.
No suspicious patterns detected.