T09 · Insecure Skill Coding Practices
Warning
- Location
- references/timeliness.md:61
- Finding
- Bookmark URLs Disclosed to a Third-Party Content Service Without Explicit Per-Use Consent<![CDATA[ ## Vulnerability Details **File Location**: `references/timeliness.md:61-67` **Vulnerability Type**: Third-party disclosure of potentially sensitive bookmark URLs **Risk Level**: Medium ### Vulnerable Code ```bash ## Step 3: Content fetching via Jina Reader For each candidate, fetch content using Jina Reader: CONTENT=$(curl -s "https://r.jina.ai/BOOKMARK_URL" | head -c 5000) sleep 2 # Rate limiting between requests ``` ### Technical Analysis The timeliness workflow embeds each selected bookmark URL into a request to the external Jina Reader service. Consequently, Jina receives the complete bookmark URL and is instructed to retrieve its target. Bookmark URLs may contain sensitive information, including: - Private interests or browsing history - Internal hostnames and network topology - Unlisted document or repository identifiers - Authentication tokens, signed parameters, or session data in query strings - Customer, project, or account identifiers - URLs pointing to resources that users did not intend to disclose to Jina The Skill explains that it uses Jina Reader, but it does not require explicit confirmation immediately before sending the selected URLs. It also does not screen out private addresses, authenticated URLs, signed URLs, or URLs containing query strings. The third-party request is not strictly necessary for all timeliness checks. Local content retrieval or analysis based only on existing bookmark metadata would require less disclosure and would better follow the principle of minimum privilege. ### Attack Path 1. A user stores a sensitive or unlisted URL in Pinboard. 2. The bookmark has a technology-related tag and satisfies the age or version-number filter. 3. The Skill selects the bookmark as a timeliness-analysis candidate. 4. The Skill constructs a request to `https://r.jina.ai/BOOKMARK_URL`. 5. Jina receives the full URL and attempts to retrieve the referenced resource. 6. Jina or its infrastructure can log the URL, associ ...[truncated 651 chars]
- Remediation
- <![CDATA[ ## Remediation Suggestions 1. Display the exact candidate URLs before submitting them to Jina Reader and obtain explicit opt-in confirmation. 2. Make local retrieval and local analysis the default; use Jina only when the user specifically enables third-party processing. 3. Reject or redact URLs containing query strings, fragments, user information, signed parameters, or apparent secrets. 4. Exclude localhost, private-network, link-local, internal-domain, and non-HTTP(S) URLs. 5. Clearly document what data Jina receives, why it is needed, and the relevant retention or privacy implications. 6. Allow users to approve URLs individually rather than approving the entire candidate set. 7. Avoid transmitting credentials embedded in URLs under all circumstances. ]]>
