T09 · Insecure Skill Coding Practices
- Location
scripts/douyin_parse.py:35- Finding
Unrestricted User-Supplied URL Requests Enable Blind SSRF
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
The skill’s Douyin transcription and download purpose is clear, but its scripts can make requests to arbitrary user-supplied URLs before validating that they are Douyin links.
Review before installing. Only use this with trusted Douyin links, avoid running it in environments with access to internal services, and prefer an isolated virtual environment with pinned dependencies. Be aware that transcription sends the video URL and API key to Alibaba Cloud and downloading writes video files locally.
scripts/douyin_parse.py:35Unrestricted User-Supplied URL Requests Enable Blind SSRF
scripts/install_deps.sh:11Unpinned Dependencies Are Installed into User or System Python Environments
This finding includes a real security issue: the skill documents access to DASHSCOPE_API_KEY and outbound calls to Douyin and Alibaba Cloud, yet no explicit permissions/tool scope are declared. Even if the 'download not implemented' portion is likely a false positive, the undeclared secret and network usage can lead to unreviewed data exfiltration or policy bypass in environments that rely on manifest-declared capabilities.
This finding includes a real security issue: the skill documents access to DASHSCOPE_API_KEY and outbound calls to Douyin and Alibaba Cloud, yet no explicit permissions/tool scope are declared. Even if the 'download not implemented' portion is likely a false positive, the undeclared secret and network usage can lead to unreviewed data exfiltration or policy bypass in environments that rely on manifest-declared capabilities.
This finding includes a real security issue: the skill documents access to DASHSCOPE_API_KEY and outbound calls to Douyin and Alibaba Cloud, yet no explicit permissions/tool scope are declared. Even if the 'download not implemented' portion is likely a false positive, the undeclared secret and network usage can lead to unreviewed data exfiltration or policy bypass in environments that rely on manifest-declared capabilities.
This finding includes a real security issue: the skill documents access to DASHSCOPE_API_KEY and outbound calls to Douyin and Alibaba Cloud, yet no explicit permissions/tool scope are declared. Even if the 'download not implemented' portion is likely a false positive, the undeclared secret and network usage can lead to unreviewed data exfiltration or policy bypass in environments that rely on manifest-declared capabilities.
This finding includes a real security issue: the skill documents access to DASHSCOPE_API_KEY and outbound calls to Douyin and Alibaba Cloud, yet no explicit permissions/tool scope are declared. Even if the 'download not implemented' portion is likely a false positive, the undeclared secret and network usage can lead to unreviewed data exfiltration or policy bypass in environments that rely on manifest-declared capabilities.
This finding includes a real security issue: the skill documents access to DASHSCOPE_API_KEY and outbound calls to Douyin and Alibaba Cloud, yet no explicit permissions/tool scope are declared. Even if the 'download not implemented' portion is likely a false positive, the undeclared secret and network usage can lead to unreviewed data exfiltration or policy bypass in environments that rely on manifest-declared capabilities.
The skill declares external network use and environment variable access in metadata (requires.env, external endpoints, and API-key-driven transcription) but does not declare an explicit tool scope such as permissions or allowed tools. This creates a transparency and policy-enforcement gap: an orchestrator or reviewer may not realize the skill can access secrets and send user data to third parties.
The skill description includes broad triggers such as 'use when user shares a Douyin link' or 'needs to extract text from Chinese short videos,' which could cause the agent to invoke a networked, file-writing, or API-consuming workflow in situations where the user did not explicitly request those actions. In a skill that can contact third parties and consume an API key, over-broad activation increases the risk of unintended data disclosure, surprise downloads, or unnecessary paid API usage.
The manifest explicitly advertises speech-to-text extraction and watermark-free video downloading but does not warn users that shared Douyin links, video content, and extracted audio/transcripts may be sent over the network to third-party services such as Alibaba Cloud Bailian ASR. This creates a real privacy and transparency issue because users may submit videos containing personal, copyrighted, or otherwise sensitive material without understanding that external processing and content retrieval occur.
Data from a source is assigned to a variable that is later passed to a sink, creating a variable-mediated taint flow.
video_id = share_response.url.split("?")[0].strip("/").split("/")[-1]
page_url = f'https://www.iesdouyin.com/share/video/{video_id}'
response = requests.get(page_url, headers=HEADERS, timeout=15)
response.raise_for_status()
pattern = re.compile(
Data from a source is assigned to a variable that is later passed to a sink, creating a variable-mediated taint flow.
video_id = share_response.url.split("?")[0].strip("/").split("/")[-1]
page_url = f'https://www.iesdouyin.com/share/video/{video_id}'
response = requests.get(page_url, headers=HEADERS, timeout=15)
response.raise_for_status()
pattern = re.compile(
Data from a source is assigned to a variable that is later passed to a sink, creating a variable-mediated taint flow.
video_id = share_response.url.split("?")[0].strip("/").split("/")[-1]
page_url = f'https://www.iesdouyin.com/share/video/{video_id}'
response = requests.get(page_url, headers=HEADERS, timeout=15)
response.raise_for_status()
pattern = re.compile(
No suspicious patterns detected.