T05 · Unauthorized Access and Privilege Escalation
- Location
scripts/fetch.py:167- 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
The skill is a real web-content extractor, but it needs review because it can fetch arbitrary URLs from the agent environment and may send URLs to a third-party reader without clear consent or internal-url safeguards.
Install only if you are comfortable with the agent making outbound web requests from your environment. Do not use it on private, internal, authenticated, signed, or token-bearing URLs unless you have reviewed the exposure; disable or require confirmation for the Jina Reader fallback, and prefer a virtual environment with pinned dependency versions.
scripts/fetch.py:167Unrestricted URL Fetching Enables Server-Side Request Forgery
SKILL.md:33Third-Party Reader Fallback Can Disclose Sensitive URLs
requirements.txt:1Runtime Dependencies Are Unpinned and Installed Without Integrity Verification
The code substantially matches the core declared purpose: it fetches web pages, supports fast and stealth Scrapling modes with auto fallback, handles WeChat-specific extraction, preserves links/images/lists/code blocks through HTML-to-Markdown conversion, and extracts article-like content. However, the description claims an additional alternative extraction method using Jina Reader for simple pages, and no Jina Reader integration exists in the supplied code. This is a description-behavior mismatch because a named capability/method is declared but absent. No other significant undeclared or unrelated behaviors are present.
The README encourages automatic fetching of arbitrary URLs and documents Jina Reader as a fallback, but it does not clearly warn that this performs outbound network requests and may transmit user-supplied URLs or page access patterns to a third-party service. In an agent context, this can cause unintended disclosure of sensitive URLs, internal endpoints, or private browsing targets, especially if users assume extraction is local-only.
The skill instructs the agent to perform network-capable actions, including fetching arbitrary URLs and possibly invoking an external reader service, but it declares no explicit tool scope or permissions boundary. That creates a governance gap: the skill can be invoked for broad URL-related tasks without clear least-privilege constraints or user-visible limits on outbound requests.
The skill does not clearly warn that user-supplied URLs and retrieved page contents may be sent to external services or remote websites during extraction. This matters because the skill may contact arbitrary domains and may also use a third-party reader service, creating privacy, confidentiality, and compliance risks if users provide sensitive or internal links.
The trigger language is very broad, covering almost any request to read, fetch, scrape, extract, or summarize a URL. This can cause unintended invocation on common user requests, increasing the chance of automatic outbound requests, over-collection of remote content, or use in contexts where the user did not explicitly consent to web retrieval.
The support matrix says '微信公众号 (mp.weixin.qq.com) | fast | ✅', but earlier routing guidance says the same domain should use '--stealth' because the content is JS-rendered. This is an active documentation contradiction about how the skill actually operates for a key target site.
The dependency 'scrapling' is unpinned, so installs may pull in different versions over time, including versions with newly introduced vulnerabilities, breaking changes, or even a compromised release. Because this skill fetches and processes arbitrary web content, its attack surface is network- and parser-facing, which makes uncontrolled dependency drift more risky than in purely local tooling.
scrapling
html2text
The dependency 'html2text' is also unpinned, allowing future installs to resolve to unexpected versions with security flaws or incompatible behavior. While this package is generally lower risk than a browser-automation or scraping stack, it still processes untrusted HTML-derived content, so supply-chain and parser-related issues remain relevant.
scrapling
html2text
No suspicious patterns detected.