T09 · Insecure Skill Coding Practices
Error
- Location
- SKILL.md:148
- Finding
- Unrestricted Disclosure of Private Local Files to an External Conversion Service<![CDATA[ ## Vulnerability Details **File Location**: `SKILL.md:148-161`, `SKILL.md:232-238`, `SKILL.md:305-308`; corroborated by `readme.txt:43-49` **Vulnerability Type**: Transmission of sensitive local data to a third-party service without adequate authorization or privacy controls **Risk Level**: High ### Complete Vulnerable Snippets From `SKILL.md:148-161`: ```markdown ### 4️⃣ Upload Local File Use when file is not publicly accessible. ``` POST /convert multipart/form-data ``` Example: ```bash curl -s https://markdown.new/convert \ -F "file=@document.pdf" ``` ``` From `SKILL.md:232-238`: ```markdown ### File Upload Strategy Use `/convert` only if: * File is local * File is private * File requires authentication to access Otherwise always prefer URL conversion. ``` From `SKILL.md:305-308`: ```markdown | Input Type | Action | | --------------- | ---------------------- | | Public file URL | Use GET or POST | | Local file | Use POST /convert | ``` From `readme.txt:43-49`: ```text POST /convert Upload a local file when no public URL is available. Notes * Prefer URL conversion when possible for speed. * Use file upload only for private or local files. ``` ### Technical Analysis The Skill explicitly instructs an agent to transmit complete local files to `https://markdown.new/convert` using a multipart HTTP request. It specifically recommends this workflow for files that are private, local, or otherwise inaccessible to the remote service. Remote processing is intrinsic to the advertised cloud conversion functionality, but automatically selecting it for private files crosses the local trust boundary and is not protected by compensating controls. The instructions do not require: - Explicit, informed, per-file user consent before disclosure. - Confirmation that the user is authorized to disclose the file. - Classification or inspection of the file for credentials, personal data, regulated records, or propri ...[truncated 2626 chars]
- Remediation
- <![CDATA[ ## Remediation Suggestions 1. **Default to local processing for private content** - Use an offline, sandboxed converter for local or confidential files. - Reserve the external API for public files or content explicitly approved for external processing. 2. **Require explicit, informed consent** - Before each upload, identify the exact file, destination domain, and fact that the complete contents will leave the local environment. - Require affirmative user confirmation rather than inferring consent from a generic conversion request. - Do not reuse consent across unrelated files or sessions. 3. **Add sensitivity and authorization checks** - Confirm that the user owns the file or is authorized to disclose it. - Block or warn on credentials, secrets, personal data, regulated records, and files from sensitive directories. - Never upload hidden configuration files, credential stores, private keys, environment files, or authentication material. 4. **Minimize transmitted data** - Permit users to select pages, sheets, ranges, or redacted copies. - Remove unnecessary metadata and confidential fields before transmission. - Upload only the minimum content needed for the requested conversion. 5. **Constrain file access** - Require an explicit path supplied or approved by the user. - Apply directory and extension allowlists. - Reject path traversal, symbolic-link escapes, device files, and unintended bulk-directory processing. 6. **Document third-party data handling** - Disclose the service operator, retention period, deletion process, subprocessors, processing locations, and whether submitted data may be used for training. - Do not claim that private uploads are safe unless those guarantees are verifiable. 7. **Harden network use** - Allow outbound requests only to the exact approved HTTPS origin. - Enforce certificate validation, request-size limits, timeouts, and bounded retries. - Avoid logging request b ...[truncated 253 chars]
