T09 · Insecure Skill Coding Practices
- Location
scripts/ddg_fetch.py:65- 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 mostly does what it says, but its page fetcher can request arbitrary destinations without internal-network or size safeguards.
Review this skill before installing in any environment with access to private networks, localhost services, cloud metadata endpoints, or sensitive internal web apps. If used, run it with outbound network restrictions, avoid fetching untrusted or internal URLs, and remove or pin the unused pip dependency guidance.
scripts/ddg_fetch.py:65Unrestricted URL Fetching Enables Server-Side Request Forgery
scripts/ddg_fetch.py:101Unbounded Response Reading and Decompression Enables Memory Exhaustion
SKILL.md:14Unpinned and Unnecessary Third-Party Dependency Installation
The skill promises arbitrary URL fetching and readable content extraction, but that functionality is not evidenced by the provided artifacts. A skill that claims unverified remote-fetch behavior can mislead operators into enabling network-sensitive workflows and weakens trust boundaries around what data may be retrieved or processed.
The skill promises arbitrary URL fetching and readable content extraction, but that functionality is not evidenced by the provided artifacts. A skill that claims unverified remote-fetch behavior can mislead operators into enabling network-sensitive workflows and weakens trust boundaries around what data may be retrieved or processed.
The skill advertises and demonstrates shell execution and network access but does not declare any tool scope such as permissions or allowed-tools. In an agent environment, missing scope declarations can cause the skill to run with broader-than-necessary privileges, increasing the chance of unintended command execution or outbound access if invoked automatically.
Broad trigger phrases like 'search for', 'look up', and 'fetch url' can cause this skill to activate in many benign conversations, including contexts where the user did not intend network access. In an agent system, over-triggering increases the risk of unsolicited web requests, data exposure in queries, and execution of shell-backed workflows without sufficiently explicit user intent.
Spawning an external curl process gives the skill unnecessary process-execution capability for a feature that can already be implemented with the standard library. While this code does not obviously permit command injection, adding subprocess execution broadens the attack surface, increases environmental dependency risk, and may bypass controls or monitoring that apply only to in-process HTTP requests.
subprocess module calls execute external commands. Without careful input validation, this enables command injection.
url
]
result = subprocess.run(cmd, capture_output=True, text=True, timeout=25)
html = result.stdout
if result.returncode != 0:
The document switches from English to Chinese for key usage sections such as prerequisites and feature headings, which imposes a language choice without opt-in. This can violate language/locale policy expectations when the skill does not state that it is intended specifically for Chinese-speaking users or offer alternatives.
The request hard-codes an Accept-Language header of 'en-US,en;q=0.9,zh-CN;q=0.8,zh;q=0.7', which imposes locale preferences regardless of the user's actual language choice. This matches the policy category for language or locale constraints that are not user-selectable or clearly justified.
No suspicious patterns detected.