T09 · Insecure Skill Coding Practices
- Location
scripts/generate_image.py:184- Finding
Unrestricted Local File Upload to External Service
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
This image skill is purpose-adjacent but should go to Review because its broad activation, generic model control, paid external API use, and unrestricted local-file upload are not tightly scoped.
Install only if you intentionally want Atlas Cloud handling your image prompts and photos and understand API usage may bill your account. Avoid using it with confidential prompts, private images, or arbitrary local paths unless you have reviewed the exact file and destination; prefer sandboxed output directories and explicit user confirmation for uploads, batch edits, and non-Seedream model choices.
scripts/generate_image.py:184Unrestricted Local File Upload to External Service
scripts/generate_image.py:162Unvalidated API-Controlled Output URL Download
The documented behavior materially overstates and misstates what the skill actually does, including claimed Seedream-specific constraints while apparently permitting arbitrary model selection, uploads, and other undeclared behavior. Security-relevant mismatches like these are dangerous because operators and users may trust the skill with data under false assumptions about destination, scope, pricing, model restrictions, and processing behavior.
The trigger text is extremely broad and is designed to activate for a wide range of common creative or marketing requests, not just explicit Seedream use. In a skill that sends prompts and image URLs to an external paid API using a bearer key, overbroad invocation increases the risk of accidental activation, unnecessary disclosure of user content to a third party, and unintended billing.
The skill declares access to an API key and documents network calls, but does not define an explicit tool scope such as permissions or allowed-tools. That creates an authorization/containment gap where a skill that can send prompts, image URLs, and bearer-authenticated requests externally is not constrained by least-privilege policy, increasing the chance of unintended data exfiltration or misuse.
This skill explicitly transmits user prompts and authenticated requests to an external service, and the surrounding documentation states that image URLs may also be sent. External transmission is expected for this type of skill, but it is still security-relevant because sensitive prompts, private image references, and account-linked API usage leave the local trust boundary.
# Step 1: Submit
curl -s -X POST "https://api.atlascloud.ai/api/v1/model/generateImage" \
-H "Authorization: Bearer $ATLASCLOUD_API_KEY" \
-H "Content-Type: application/json" \
-d '{
This skill explicitly transmits user prompts and authenticated requests to an external service, and the surrounding documentation states that image URLs may also be sent. External transmission is expected for this type of skill, but it is still security-relevant because sensitive prompts, private image references, and account-linked API usage leave the local trust boundary.
# Step 1: Submit
curl -s -X POST "https://api.atlascloud.ai/api/v1/model/generateImage" \
-H "Authorization: Bearer $ATLASCLOUD_API_KEY" \
-H "Content-Type: application/json" \
-d '{
The image-editing example sends image references to a third-party API, which is more sensitive than text-only generation because source images may contain personal, proprietary, or confidential content. In this skill context, editing user-supplied photos materially increases privacy and data-governance risk, especially because uploads/local image handling are also described elsewhere.
curl -s -X POST "https://api.atlascloud.ai/api/v1/model/generateImage" \
-H "Authorization: Bearer $ATLASCLOUD_API_KEY" \
-H "Content-Type: application/json" \
-d '{
Batch sequential editing combines two risk amplifiers: transmission of user images to a third party and the ability to process multiple images in one request. That raises the potential volume of sensitive data exposed in a single action and can magnify both privacy impact and unintended paid usage if triggered incorrectly.
curl -s -X POST "https://api.atlascloud.ai/api/v1/model/generateImage" \
-H "Authorization: Bearer $ATLASCLOUD_API_KEY" \
-H "Content-Type: application/json" \
-d '{
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
import urllib.error
import urllib.parse
API_BASE = "https://api.atlascloud.ai/api/v1"
def get_api_key():
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
import urllib.error
import urllib.parse
API_BASE = "https://api.atlascloud.ai/api/v1"
def get_api_key():
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
import urllib.error
import urllib.parse
API_BASE = "https://api.atlascloud.ai/api/v1"
def get_api_key():
No suspicious patterns detected.