T09 · Insecure Skill Coding Practices
- Location
SKILL.md:3- Finding
Disclosure of Sensitive Target URLs to a Third-Party Conversion Service
- Content
View full analysis
Vulnerability Details
File Location:
SKILL.md, lines 3 and 9–21
Vulnerability Type: Uncontrolled disclosure of user-supplied URLs to a third party
Risk Level: MediumVulnerable Code
markdown description: Use markdown.new URLs like `https://markdown.new/{target_url}` to fetch and convert pages into static Markdown. Trigger this skill whenever the user asks to open/read/extract/summarize content from a web link (such as static resource, docs, README, blog post, changelog); Always try markdown.new first and prefer local terminal access (`curl`) instead of direct browsing when markdown.new can serve the page.markdown ## Markdown.New Local-First Static Access Use `markdown.new` as the default path to access URL content as structured Markdown. ### Required Behavior 1. Prefer local access with `curl` (or any suitable alternative tools): ```sh curl -L --fail --silent --show-error "https://markdown.new/<target_url>"- Always attempt
markdown.newfirst when the target is a readable page:
- docs and manuals
- GitHub repository home/README pages
- blog posts and announcements
- landing pages and product pages
- changelog and release-note pages
- Do not start with direct page browsing if
markdown.newcan reasonably handle the page. - When markdown.new succeeds, keep using this route for that task unless the user explicitly asks for another method.
text ### Technical Analysis The skill requires the agent to prepend `https://markdown.new/` to a user-supplied target URL and send the resulting request to an external service. This transfers the complete target URL across a third-party trust boundary. A URL may contain confidential information in its path, query string, or user-information component, including signed-download parameters, bearer-like tokens, private document identifiers, email addresses, session data, or internal hostnames. The instructions do not require the ...[truncated 2230 chars]- Always attempt
- Remediation
View remediation
Remediation Suggestions
- Use direct retrieval as the default for authenticated, private, tokenized, or otherwise sensitive URLs.
- Limit third-party conversion to clearly public HTTP or HTTPS resources.
- Before routing a URL through
markdown.new, reject or require explicit confirmation for:- URLs containing user information or credentials.
- Sensitive query parameters such as
token,key,signature,sig,auth, or session identifiers. - Localhost, loopback, private, link-local, multicast, and reserved IP address ranges.
- Internal hostnames and non-public DNS destinations.
- Display a clear consent prompt explaining that the complete URL will be sent to an external service.
- Remove or redact sensitive query parameters when they are not required to retrieve the public page.
- Define an allowlist of supported public schemes and reject non-HTTP(S) schemes.
- Replace “always attempt
markdown.newfirst” with a conditional rule that evaluates URL sensitivity and resource visibility before external disclosure. - Document the external service as a trust dependency, including its privacy, retention, logging, and security assumptions.
- If third-party conversion remains necessary, use an approved proxy that enforces URL validation, secret redaction, destination controls, request timeouts, and auditable access policies.
