T09 · Insecure Skill Coding Practices
- Location
SKILL.md:113- Finding
Permanent Public Exposure of Uploaded User Images
- Content
View full analysis
Vulnerability Details
File Location:
SKILL.md:113-124
Vulnerability Type: Permanent unsigned public object exposure
Risk Level: HighVulnerable Documentation Snippet
The instructions require local files to be uploaded to a third-party service and specify that
data.fullPathis a permanently valid, unsigned public URL:json { "code": 200, "msg": null, "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", "serviceProvider": null } }Technical Analysis
When a user supplies a local image, the Skill directs the agent to upload it to Flyelep and use the returned
data.fullPathas a publicly accessible image URL. The documentation explicitly describes this URL as permanent and unsigned.An unsigned public URL operates as a bearer credential: anyone who obtains the URL can access the object without authentication. No expiration, deletion procedure, access control, retention policy, or explicit privacy-consent step is defined. Consequently, a temporary image-processing request can produce persistent third-party storage and long-term public availability.
URL entropy may reduce accidental discovery, but it is not an access-control mechanism. URLs can leak through agent transcripts, browser history, proxy logs, terminal output, API responses, monitoring systems, support records, or subsequent sharing.
Attack Path
- A user supplies a local image, potentially containing private or sensitive information.
- The agent follows the Skill and uploads the image to the third-party Flyelep endpoint.
- Flyelep returns a permanent, unsigned
fullPathURL. - The URL is included in API traffic, agent context, output, logs, or conversation history.
- An unauthorized party obtains the URL from any of these locations.
- The p ...[truncated 737 chars]
- Remediation
View remediation
Remediation Suggestions
- Require explicit, informed user consent before transferring any local file to a third party.
- Clearly disclose the destination service, retention behavior, and whether the resulting object is publicly accessible.
- Store uploaded objects privately and provide short-lived signed URLs with narrowly scoped read access.
- Add a documented deletion API and automatically delete source and generated images after processing or after a short retention period.
- Avoid returning permanent public URLs in agent output. Return authenticated or expiring links instead.
- Redact object URLs from telemetry and application logs where feasible.
- Apply unpredictable object identifiers as defense in depth, while not treating identifier entropy as authorization.
- Permit users to opt out of upload-based processing when local or privacy-preserving alternatives are unavailable.
