T09 · Insecure Skill Coding Practices
- Location
SKILL.md:94- Finding
Local Images Are Uploaded as Permanent, Unauthenticated Public Resources
- Content
View full analysis
Vulnerability Details
File Location:
SKILL.md:94-105
Vulnerability Type: Permanent public data exposure caused by insecure upload configuration
Risk Level: HighVulnerable Code Snippet
The following is an English translation of the relevant Skill instructions:
text If the user provides a local file path instead of a public direct URL, upload the file to obtain a direct URL before calling this API. On success, use data.fullPath as the public direct URL. It is permanently valid and has no signature.The documented upload service returns a public object 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
The Skill directs the Agent to upload local user images to an external storage service and explicitly states that the resulting
data.fullPathURL is permanent and unsigned. An unsigned public URL does not require authentication or authorization to retrieve the object.The workflow does not specify:
- Expiration or retention limits
- Signed, time-limited access controls
- A deletion or revocation mechanism
- Explicit informed consent immediately before public upload
- Checks for sensitive image content or metadata
- Metadata removal before disclosure
- Restrictions preventing sensitive local files from being uploaded
The randomness of an object name does not constitute access control. The URL can be exposed through API requests, responses, chat history, application telemetry, browser history, proxy logs, or accidental sharing. Once disclosed, the documented permanent URL remains usable indefinitely.
Attack Path
- A user provides a local image path to the Agent.
- Following the Skill instru ...[truncated 1142 chars]
- Remediation
View remediation
Remediation Suggestions
- Replace permanent public URLs with private objects accessed through short-lived signed URLs.
- Enforce a minimal retention period and automatically delete source and generated images after task completion.
- Provide a documented deletion and revocation API.
- Obtain explicit user consent immediately before uploading a local file, clearly stating the destination, retention period, access model, and purpose.
- Warn users not to upload confidential, regulated, or personally sensitive images unless the service provides suitable contractual and technical protections.
- Strip unnecessary EXIF, GPS, device, and author metadata before upload, subject to user approval.
- Avoid displaying or logging source-image URLs when they are not needed.
- Ensure application, proxy, and Agent logs redact object URLs or restrict access to those logs.
- Validate that the upload destination enforces tenant isolation, encryption at rest, and authenticated deletion.
- If private storage cannot be implemented, clearly document permanent public disclosure as a prerequisite and require an explicit opt-in rather than uploading automatically.
