T09 · Insecure Skill Coding Practices
- Location
scripts/parse_article.py:21- Finding
Unrestricted URL Fetching Enables Server-Side Request Forgery
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
This skill has a coherent WeChat article-search purpose, but it grants broad network and persistent publishing behavior without enough scoping or user control.
Review before installing. Use it only in an environment where sending search terms and article metadata to Sogou/Serper and writing collected content to Feishu is acceptable. Avoid running it unattended until URL allowlisting, Feishu write confirmation, output-path restrictions, and dependency pinning are added.
scripts/parse_article.py:21Unrestricted URL Fetching Enables Server-Side Request Forgery
scripts/parse_article.py:119User-Controlled Output Path Allows Arbitrary File Overwrite
SKILL.md:38Unpinned Third-Party Dependency Installation Creates Supply-Chain Risk
代码的主要功能是“微信公众号文章解析器”,针对已知 mp.weixin.qq.com 链接抓取并解析文章内容。这与描述中的“文章搜索与解析”只部分吻合:解析部分存在,但搜索部分——尤其是搜狗微信、新榜双源搜索和 Serper 兜底——在该代码块中完全没有体现。代码也没有调用相关搜索接口、处理搜索结果或执行来源回退逻辑。因此,该描述不能准确代表此代码块的实际行为,属于显著能力缺失型不匹配。
The skill describes network access, local image storage under /tmp, and document creation in an external knowledge base, but it does not declare any explicit tool scope or permission boundaries. That makes the operational trust boundary unclear and increases the chance the agent will perform outbound requests or writes without informed approval or least-privilege controls.
The skill sends search terms, article titles, and URLs to third-party services including Sogou and Serper, but the description does not warn users that their queries and possibly derived content will leave the local environment. This can expose internal research topics, sensitive keywords, or content metadata to external providers without informed consent.
The skill explicitly performs outbound requests to external search services, transmitting user-supplied keywords and using a browser-like User-Agent to access third-party content. In this context, the danger is not that network use exists at all, but that it can leak sensitive research terms externally and may bypass normal access expectations or compliance review.
curl -s "https://weixin.sogou.com/weixin?type=2&query=关键词" \
-H "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36"
用 Python 正则提取标题和链接,返回搜狗中间链接列表。
The skill documents automatic Feishu document creation, index updates, and local image storage, but does not prominently warn users that running it can persist fetched content to external systems and disk. This creates a data-governance risk: users may unintentionally store copyrighted, sensitive, or unreviewed third-party content in a knowledge base.
The parser fetches whatever URL is supplied on the command line without validating that it belongs to mp.weixin.qq.com or another explicitly allowed domain. In an agent context, this creates an SSRF-style primitive that could be abused to access internal services, cloud metadata endpoints, or other unintended network locations while disguising the action as article parsing.
The JSON example includes a fixed Chinese query string, which can reflect a language-specific default in skill behavior or examples. If this output is used as guidance for the skill, it may imply Chinese-only operation without offering user language choice or documenting the locale constraint.
The Accept-Language header forces zh-CN/zh as the preferred locale, which is a natural-language policy concern because the skill does not provide user opt-in or an alternative locale selection. Although the script targets WeChat articles, the file does not explicitly justify this locale constraint or make it configurable.
The manifest description focuses on article search and parsing, while this script additionally supports persisting results to a user-selected local JSON file via --save/--output. Local file writing is not mentioned in the stated skill purpose and is an extra behavior beyond pure parsing.
No suspicious patterns detected.