T09 · Insecure Skill Coding Practices
- Location
SKILL.md:98- Finding
Permanent Public Exposure of Uploaded Local Images
- Content
View full analysis
Vulnerability Details
File Location:
SKILL.md, lines 98–122
Vulnerability Type: Persistent unauthenticated data exposure
Risk Level: MediumVulnerable Code Snippet
The following is an English translation of the relevant instructions:
markdown ## Local File Upload If the user provides a local file path instead of a publicly accessible direct link, first upload the file to obtain a direct link, and then invoke this API. - URL: POST https://www.flyelep.cn/prod-api/poster-design/api/v1/file/upload - Request format: multipart/form-data - Authentication: Pass secretKey in the request header. Use data.fullPath from a successful response as the publicly accessible direct link. It is permanently valid and has no signature: { "code": 200, "data": { "relativePath": "cos_ai_agent/2026-08-11/3f2a9c1b7d84e6f5a012.png", "fullPath": "https://agent-1404002717.cos.ap-guangzhou.myqcloud.com/cos_ai_agent/2026-08-11/3f2a9c1b7d84e6f5a012.png" } }Technical Analysis
The skill instructs the agent to upload a user-supplied local image to third-party Flyelep infrastructure and use the resulting
data.fullPathURL. The document explicitly states that this URL is permanently valid and unsigned.An unsigned public URL does not require authentication or authorization when accessed. Anyone who obtains the URL can retrieve the uploaded image. The workflow does not require the agent to obtain explicit informed consent before transferring the local file, warn the user that the image will become permanently accessible, or provide a deletion and retention mechanism.
Although a high-entropy object path may make a URL difficult to guess, URL secrecy is not an adequate access-control mechanism. URLs may be disclosed through agent transcripts, application logs, proxy logs, browser history, referrer headers, monitoring systems, support tickets, or accidental sharing.
Attack Path
- A ...[truncated 1118 chars]
- Remediation
View remediation
Remediation Suggestions
- Require explicit user confirmation before uploading any local file to third-party infrastructure.
- Clearly identify the destination service and disclose that the file leaves the local environment.
- Do not use permanently public objects. Store uploads privately and return short-lived, cryptographically signed URLs.
- Apply the shortest practical expiration period and restrict access to the minimum required service identity.
- Add a documented deletion endpoint and automatically delete source and generated images after processing.
- Warn users not to upload sensitive, regulated, confidential, or personally identifying images.
- Avoid printing full image URLs in logs. Redact object identifiers and query parameters from diagnostics.
- Document the third party's retention, geographic storage, content-review, and privacy policies.
- If the external API cannot provide private storage, require the user to provide an already-hosted URL after acknowledging the privacy implications rather than silently uploading local files.
