T09 · Insecure Skill Coding Practices
- Location
scripts/extractor.py:130- 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 is a coherent web extraction skill, but it can fetch arbitrary user-provided URLs without safeguards against private or internal network targets.
Install only if you are comfortable with the skill making outbound requests to URLs you provide. Do not use it on localhost, private network addresses, cloud metadata endpoints, intranet pages, authenticated links, or URLs containing secrets unless the runtime blocks those destinations. Prefer a version that pins dependencies and adds private-address and redirect validation.
scripts/extractor.py:130Unrestricted URL Fetching Enables Server-Side Request Forgery
The README describes extracting content from '任意网页' but does not clearly warn that the skill makes outbound requests to arbitrary URLs and may transmit user-requested destinations to remote hosts. In an agent setting, this omission can mislead users about privacy and security implications, making accidental access to sensitive endpoints, internal services, or user-specific URLs more likely.
The README advertises a very broad natural-language trigger ('帮我提取 ... 的内容') that could be invoked in ordinary conversation without a strong capability boundary or confirmation step. In an agent environment, this increases the chance of unintended network access to user-supplied URLs, including internal, sensitive, or tracking URLs, which can lead to privacy issues or SSRF-like behavior depending on the runtime.
The description and user-facing instructions are presented in Chinese, which effectively forces a specific language for users without any opt-in or explanation. Under the policy, locale or language constraints should either be optional for the user or clearly documented as justified.
The script's natural-language interface, prompts, help text, and status messages are consistently presented only in Chinese. Per the policy, forcing a specific language without user opt-in or documented justification is a language/locale policy violation.
The skill performs a network request to a user-supplied URL without any explicit warning or consent step, which can cause the user to contact an external site and disclose request metadata such as IP address, User-Agent, and access timing. In a network-enabled agent context, this is a real privacy and safety issue because users may provide sensitive internal or personal URLs without realizing the request will be made directly.
The skill explicitly accepts arbitrary web URLs and requires network access, but the documentation does not warn users that it will fetch untrusted remote content and process attacker-controlled HTML. This can lead to unsafe use, including unintended requests to sensitive internal endpoints or ingestion of malicious content, especially if users assume the skill is harmless utility tooling.
该安装文档全文以中文编写,未说明这是面向特定中文用户群的区域性技能,也未提供其他语言选项或用户选择机制。根据语言/区域策略,未经用户选择而强制单一语言属于自然语言层面的政策风险。
The dependency is specified with a lower bound only, so builds can resolve to different future versions and are not reproducible. This increases supply-chain risk because a later vulnerable or malicious release could be installed without any change to the skill source, and it also makes it hard to verify whether known advisories affect the deployed version.
requests>=2.28.0
beautifulsoup4>=4.11.0
The manifest does not pin requests, and requests has multiple known advisories across versions, so the actual installed version cannot be verified as safe. In a network-enabled web-content-extractor, this matters more because requests is directly in the path of fetching attacker-controlled URLs, increasing the relevance of HTTP/client-side library flaws such as credential leakage or TLS/redirect handling issues.
beautifulsoup4 is also unpinned, which creates non-reproducible environments and avoidable supply-chain exposure. Even if no specific advisory is cited here, allowing any future release means the skill may silently pick up breaking, vulnerable, or compromised versions.
requests>=2.28.0
beautifulsoup4>=4.11.0
No suspicious patterns detected.