T09 · Insecure Skill Coding Practices
- Location
SKILL.md:160- Finding
API Credential Forwarded to Unvalidated Response-Controlled URLs
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
The skill has a legitimate video-generation purpose, but its instructions include unsafe handling of personal photos, API credentials, and potentially billable retries.
Review before installing. Only use this skill with non-sensitive photos unless you are comfortable sending them to OpenRouter or other selected providers, set strict cost and retry limits, and avoid the people-frame proof-of-concept unless the skill is fixed to honor its face-scan block rule. Use a limited OpenRouter API key and rotate it if you ran the provided reference code unchanged.
SKILL.md:160API Credential Forwarded to Unvalidated Response-Controlled URLs
SKILL.md:45Deliberate Upload of a People-Containing Photo Contradicts the Privacy Gate
SKILL.md:175Unbounded Resubmission of Billable Video-Generation Jobs
The reference implementation transmits user-provided prompts and image data, along with an authorization token, to an external service. In a skill handling personal photos and narration scripts, this is a real data exfiltration surface: sensitive user content leaves the local environment and is sent to OpenRouter, and downloaded URLs are also fetched remotely.
req.add_header("Authorization", f"Bearer {KEY}")
req.add_header("Content-Type", "application/json")
data = json.dumps(body).encode() if body is not None else None
with urllib.request.urlopen(req, data=data, timeout=120) as resp:
return resp.status, json.loads(resp.read().decode())
status, result = call(API, payload)
The code treats any failure whose error text contains "copyright" as transient and automatically resubmits the identical job (L186-L193). But the surrounding documentation says content-policy failures for problematic frames are permanent and must never be retried with the same frame (L204-L206), creating an active contradiction between stated intent and implemented behavior.
The skill directs the agent to fetch third-party media over the network and to create multiple output files, but it does not prominently require explicit user consent at the point of action. That can lead to unexpected network activity, third-party content retrieval, and filesystem writes, which are security-relevant side effects in an agent environment even if the actions are part of the feature's normal behavior.