T09 · Insecure Skill Coding Practices
- Location
x-aria-download.sh:75- Finding
Hardcoded Aria2 RPC Credential and Private-Network Endpoint Override User Configuration
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
The skill mostly does what it claims, but its downloader can control an Aria2 service using hardcoded private-network settings and a hardcoded RPC secret.
Review this skill carefully before installing. Parser-only use is relatively straightforward, but do not run the Aria2 downloader unless you have audited and changed the RPC endpoint, secret, download directory, temporary-file handling, and URL validation. Rotate the exposed Aria2 token if it has ever been used.
x-aria-download.sh:75Hardcoded Aria2 RPC Credential and Private-Network Endpoint Override User Configuration
x-aria-download.sh:18Predictable Shared Temporary File Enables Symlink Overwrite and Race Conditions
x-aria-download.sh:54Unvalidated Third-Party Media URLs Are Delegated to a Network-Capable Aria2 Service
The documented behavior goes beyond media parsing and includes triggering Aria2 downloads, potentially writing files to disk and interacting with RPC services, while the skill description claims it only fetches direct links. This mismatch is dangerous because users and policy systems may authorize a low-risk parser while actually enabling network actions and file downloads with broader security implications.
Remote code is downloaded and executed. This bypasses code review and could introduce malicious code.
## 依赖
- curl
- python3
## 配合 Aria2 使用
Remote code is downloaded and executed. This bypasses code review and could introduce malicious code.
fi
# Call vxtwitter API, then parse with Python to handle special characters
curl -s "https://api.vxtwitter.com/Twitter/status/${TWEET_ID}" | python3 -c "
import sys, json, re
try:
The skill description says it parses X/Twitter posts and returns direct media links, but the script goes further and automatically submits those URLs to an aria2 JSON-RPC server for downloading. This is dangerous because it performs undisclosed side effects on local infrastructure, can trigger unexpected downloads/storage consumption, and may interact with an internal service the user did not intend to expose to the skill.
The skill advertises shell-based usage and companion scripts but does not declare any tool scope or allowed tools, which weakens policy enforcement and user understanding of what the skill can execute. In an agent environment, undeclared shell capability increases the chance of unexpected command execution or unsafe composition with other tools.
The skill depends on an external API endpoint, which means user-provided tweet identifiers and request metadata leave the local trust boundary. External transmission is risky when undocumented or unnecessary because it exposes user activity to a third party and adds supply-chain and availability dependencies.
## 底层实现
使用 vxtwitter API: `https://api.vxtwitter.com/Twitter/status/{tweetId}`
## 依赖
The skill sends tweet URLs and associated metadata to a third-party API but does not warn users that their inputs are transmitted externally. This creates privacy and compliance risk, especially if tweet links, account names, or surrounding metadata are sensitive in the user's environment.
The script emits error text in Chinese such as '无法提取推文 ID', and later includes additional Chinese-only messages and labels. This imposes a language choice on users without opt-in or explanation, which matches the language/locale policy violation criteria.
Several error and title strings in the embedded Python code are hard-coded in Chinese, including 'API 请求失败', '该推文没有媒体内容', and '的推文'. Because the file does not offer a language selection or explain a region-specific requirement, this is a natural-language policy concern.
The shell section advertises configurable RPC URL, secret, and download directory via environment variables, but the embedded Python ignores them and instead hard-codes an internal endpoint (10.0.0.1), a fixed secret, and a fixed path. This is dangerous because it can silently direct requests to an unintended internal service using embedded credentials, defeating operator expectations and potentially exposing or abusing internal download infrastructure.
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
exit 1
fi
curl -s "https://api.vxtwitter.com/Twitter/status/${TWEET_ID}" -o /tmp/tweet.json
if [ ! -s /tmp/tweet.json ]; then
echo "Error: API request failed"
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
exit 1
fi
curl -s "https://api.vxtwitter.com/Twitter/status/${TWEET_ID}" -o /tmp/tweet.json
if [ ! -s /tmp/tweet.json ]; then
echo "Error: API request failed"
The script sends the supplied tweet-derived identifier to a third-party service using curl, but does not warn the user that data will be transmitted off-host. Although networking is part of the workflow, the file contains no explicit disclosure about contacting an external API provider.
Submitting download jobs to an aria2 JSON-RPC endpoint without explicit disclosure is a meaningful security issue because it causes hidden side effects on another service, not just local parsing. In this skill context, the risk is elevated because the manifest suggests passive parsing, while the implementation actively controls a downloader and writes files to storage.
The manifest description and primary usage text are presented in Chinese, with no indication that other languages are supported or that the locale restriction is intentional. This creates a natural-language policy concern because the skill effectively imposes a language choice without user opt-in.
This shell script sends data derived from the user-provided URL to api.vxtwitter.com via curl. While network access is central to the parser's function, the file itself does not include any user-facing notice that a third-party service will be contacted or that tweet-related data will be transmitted.
The code performs a file write to /tmp/tweet.json after fetching tweet metadata, but there is no prior comment, prompt, or user-facing notice that local filesystem data will be created. For this file, the write is not disclosed until after it has already happened.
The script's status and error messages are presented in Chinese only, such as the parsing and download progress text, with no opt-in or documented locale requirement. This can violate a language/locale policy when a skill imposes a specific language on users without choice.