T09 · Insecure Skill Coding Practices
- Location
scripts/generate.py:41- Finding
Unvalidated API-Supplied Image URL in Python Implementation
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
This is a coherent EvoLink image-generation skill, but it needs Review because it downloads API-returned URLs without destination or size limits.
Install only if you are comfortable sending image prompts to EvoLink with your API key and saving generated files locally. Avoid sensitive prompts, protect the EVOLINK_API_KEY value, and be aware that the current download logic trusts the provider-returned result URL and may download large or unexpected content.
scripts/generate.py:41Unvalidated API-Supplied Image URL in Python Implementation
references/powershell.md:102Unvalidated API-Supplied Image URL in PowerShell Fallback
references/curl_heredoc.md:43Unvalidated API-Supplied Image URL in curl Fallback
The skill requires both environment access to read EVOLINK_API_KEY and network access to call the EvoLink API, but it does not explicitly declare a tool scope such as permissions or allowed-tools. That omission weakens least-privilege controls and makes it harder for a host agent or reviewer to understand and constrain what the skill is allowed to access before execution.
The example instructs users to send their API key and prompt content to a third-party service and later write the returned image to disk, but it does not clearly warn about those privacy and data-handling consequences. In a skill context, omission of this disclosure can cause users to unknowingly transmit sensitive prompts or credentials and persist generated content locally.
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
API_KEY="<API_KEY>"
OUT_FILE="<OUTPUT_FILE>"
RESP=$(curl -s -X POST "https://api.evolink.ai/v1/images/generations" \
-H "Authorization: Bearer $API_KEY" \
-H "Content-Type: application/json" \
-d @- <<'EVOLINK_END'
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
from urllib.parse import urlparse
API_BASE = "https://api.evolink.ai/v1"
_UA = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36"
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
from urllib.parse import urlparse
API_BASE = "https://api.evolink.ai/v1"
_UA = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36"
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
from urllib.parse import urlparse
API_BASE = "https://api.evolink.ai/v1"
_UA = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36"
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
from urllib.parse import urlparse
API_BASE = "https://api.evolink.ai/v1"
_UA = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36"
No suspicious patterns detected.