T09 · Insecure Skill Coding Practices
- Location
scripts/curl_examples.sh:98- Finding
Unescaped User-Controlled URL Allows JSON Request Injection
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
This skill is a coherent video translation integration that sends user-provided videos or video URLs to a disclosed external service and returns a preview link.
Use this skill only for videos or URLs you are allowed to send to the disclosed third-party service. Keep VIDEO_TRANSLATE_SERVICE_API_KEY in the environment, avoid pasting it into prompts or logs, and be cautious with confidential media. If using the helper script with untrusted URLs, harden JSON construction with a serializer first.
scripts/curl_examples.sh:98Unescaped User-Controlled URL Allows JSON Request Injection
The README clearly states that user-provided videos are sent to an external service, but it provides no warning about third-party transmission, retention, or privacy implications. Because videos often contain sensitive personal or proprietary content, lack of disclosure can lead to unintended data exposure and unsafe operator assumptions about where user data is processed.
The skill declares shell runtime requirements and operational steps that imply code/tool execution, but it does not explicitly constrain tool scope with permissions or allowed-tools. In an agent environment, that increases the chance the skill can invoke broader shell capabilities than intended, which can enable unsafe command execution paths or unreviewed network access.
The skill is built to send user-provided video files or URLs to a third-party service, but the user-facing description does not clearly warn that potentially sensitive media and linked content will leave the local system. This creates a privacy and data-handling risk because users may submit confidential videos or internal URLs without informed consent.
The instructions require defaulting targetLanguage to en whenever the user does not specify a target language. This imposes a language choice without asking the user or offering an opt-in, which is a natural-language policy concern under the language/locale rule.
The default_prompt specifies targetLanguage (zh/en, default en), which imposes English as the default output language unless the user explicitly requests otherwise. This is a natural-language locale policy issue because it forces a specific language without opt-in or offering a neutral user choice in the interaction.
Lines L115-L120 instruct the skill to route CN users to the default Chinese site and non-CN users to an English-locale URL. This imposes a locale decision based on geography rather than offering the user a language choice, which matches the language/locale policy violation criteria.
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
echo "[2/4] Submit job"
if [[ "${VIDEO_SOURCE}" =~ ^https?:// ]]; then
SUBMIT_RESP="$(curl -sS -X POST "${BASE_URL}/video-trans/orchestrate" \
-H "Authorization: Bearer ${API_KEY}" \
-H 'Content-Type: application/json' \
--data-binary @- <<JSON
The README instructs the skill to default to en if the user does not specify a target language. This imposes a specific language choice without user opt-in, which matches the language/locale policy violation criteria for natural-language instructions.
The skill requires an API key in an environment variable and uses it for authorization to an external service, but the description does not clearly warn users that sensitive credentials are required and will be handled by the skill. Without that notice, operators may mismanage secrets, expose them in logs, or misunderstand the trust boundary around external authentication.
No suspicious patterns detected.