T09 · Insecure Skill Coding Practices
- Location
scripts/jina-reader.py:30- Finding
Secret-Bearing URLs Are Disclosed to a Third-Party Service
- Content
View full analysis
Vulnerability Details
File Location:
scripts/jina-reader.py:30-38;scripts/jina-reader.sh:12-15
Vulnerability Type: Sensitive URL disclosure to an external service
Risk Level: MediumVulnerable Code
scripts/jina-reader.py:30-38:python # Normalize URL if not url.startswith(('http://', 'https://')): url = f'https://{url}' jina_url = f"https://r.jina.ai/http://{url.replace('http://', '').replace('https://', '')}" headers = { 'User-Agent': 'Mozilla/5.0 (compatible; JinaReader/1.0)' } try: response = requests.get(jina_url, headers=headers, timeout=timeout)scripts/jina-reader.sh:12-15:bash URL="$1" JINA_API="https://r.jina.ai/http://${URL#http://}" curl -s "$JINA_API"Technical Analysis
Both implementations embed the complete user-supplied target URL into a request sent to
r.jina.ai. No validation or redaction is applied to URL user information, query parameters, fragments, signed parameters, API tokens, session identifiers, or other credentials.Consequently, a URL such as a private signed download link or a password-reset link is disclosed in full to the third-party Jina Reader service. The third party may also retrieve and process the content available through that URL. The Skill documentation describes extraction from “any URL” without warning users that complete URLs and remotely accessible content are processed externally.
Attack Path
- A user, Agent, or upstream tool supplies a private URL containing a secret, signed query parameter, session identifier, or embedded credential.
- The Skill constructs a Jina Reader endpoint containing the complete supplied URL.
- The Skill sends that endpoint to
https://r.jina.ai. - The third-party service receives the secret-bearing URL and may use it to retrieve the protected resource.
- The URL and fetched content may enter third-party request logs, processing systems, or retentio ...[truncated 528 chars]
- Remediation
View remediation
Remediation Suggestions
- Clearly disclose that target URLs and retrieved content are sent to and processed by
r.jina.ai. - Reject URLs containing user-information credentials such as
https://user:password@example.com/. - Detect and reject or redact sensitive query parameters, including common token, signature, key, session, and authentication parameter names.
- Require explicit user confirmation before transmitting URLs containing query strings or indicators of signed/private access.
- Avoid placing secrets in URLs and recommend credential-free public URLs in the documentation.
- Offer a direct/local retrieval mode when third-party processing is unnecessary.
- Parse and reconstruct URLs with a standard URL library rather than using unrestricted string replacement.
- Document third-party data handling, logging, and retention implications so users can make an informed decision.
- Clearly disclose that target URLs and retrieved content are sent to and processed by
