T09 · Insecure Skill Coding Practices
- Location
scripts/generate.py:127- Finding
Unvalidated Retrieval of an API-Provided Media URL
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
This is a coherent Jimeng/Volcengine media-generation skill, but prompts are sent to Volcengine and the configured Jimeng API key is read for authentication.
Install only if you are comfortable sending prompts and generated-media requests to Volcengine using your Jimeng credentials. Store the AccessKeyId and SecretAccessKey only in the intended OpenClaw token manager, avoid sensitive prompts or proprietary images unless Volcengine handling is acceptable, and prefer explicit output paths in private directories.
scripts/generate.py:127Unvalidated Retrieval of an API-Provided Media URL
scripts/generate.py:137Predictable Output Files Allow Symlink-Based File Overwrite
The documentation overstates functionality and omits important behavior, including external credential usage and capabilities that appear unsupported by the implementation summary. Description-behavior mismatches are dangerous because users may trust the declared purpose while the skill accesses local secrets or behaves differently than expected, undermining informed consent and security review.
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
SERVICE = "cv"
def get_credentials():
"""从 secrets.json 获取凭证"""
secrets_file = os.path.expanduser("~/.openclaw/workspace/secrets.json")
try:
with open(secrets_file, encoding="utf-8") as f:
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
SERVICE = "cv"
def get_credentials():
"""从 secrets.json 获取凭证"""
secrets_file = os.path.expanduser("~/.openclaw/workspace/secrets.json")
try:
with open(secrets_file, encoding="utf-8") as f:
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
SERVICE = "cv"
def get_credentials():
"""从 secrets.json 获取凭证"""
secrets_file = os.path.expanduser("~/.openclaw/workspace/secrets.json")
try:
with open(secrets_file, encoding="utf-8") as f:
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
SERVICE = "cv"
def get_credentials():
"""从 secrets.json 获取凭证"""
secrets_file = os.path.expanduser("~/.openclaw/workspace/secrets.json")
try:
with open(secrets_file, encoding="utf-8") as f:
The skill invokes Python scripts that call an external API, so it has network capability, but the manifest does not declare any tool scope such as permissions or allowed-tools. This weakens reviewability and least-privilege controls, making it easier for a user or platform to misunderstand what the skill can transmit externally.
The skill states it uses the Volcengine API for image/video generation but does not clearly warn that user prompts and possibly input/generated media are transmitted to an external service. This is a privacy and compliance issue because users may unknowingly send sensitive business data, personal data, or proprietary images off-platform.
The official example explicitly instructs that the generated step-by-step tutorial text "要中文". This is a natural-language locale constraint presented as a directive, and the file does not offer any user choice or explain a justified region-specific requirement.
Natural-language strings such as the module docstring and CLI help text force a specific language/locale for all users. The file does not offer an alternative language, locale selection, or indicate that the restriction is region-specific and intentional.
The script sends the user-provided --prompt value to the external Volcengine API as part of the request body. While the network call is visible in code, there is no explicit user-facing warning that prompt content leaves the local system, and the module docstring only describes output behavior.
The script's title, argument descriptions, and operational messages are presented in Chinese, which imposes a specific language on users without opt-in or documented locale scope. This matches the language/locale policy concern for natural-language content embedded in code.
This Python file contains natural-language strings for the title and argument help in Chinese only, such as the module docstring and argparse descriptions. The policy disallows forcing a specific language without user opt-in, and this file provides no alternative locale selection or documented justification.
The skill instructs users to use stored API credentials but does not warn about secret handling, storage sensitivity, or the risk of exposing AccessKeyId and SecretAccessKey through logs, shell history, or misconfigured files. While this is documentation-level rather than direct code execution risk, it increases the chance of credential leakage and misuse.
The function loads AccessKeyId and SecretAccessKey from a user-local secrets file, which is access to sensitive credentials. Although there is an internal docstring, there is no user-facing prompt, warning, or other disclosure in this file explaining that credentials will be read for API use.
The call_api function serializes body_dict and sends it to https://visual.volcengineapi.com over the network. This is a data-transmitting operation, but the file does not include a user-facing warning, confirmation, or other visible disclosure about external transmission of request content.
The code accesses ~/.openclaw/workspace/secrets.json and extracts AccessKeyId and SecretAccessKey, but the surrounding documentation and comments do not warn users that local credentials will be read. This qualifies as sensitive credential access lacking user disclosure under the rule.
This code file performs a network API call using the user's prompt content, which may contain sensitive or private text. Although it prints the prompt and indicates image generation, it does not explicitly warn the user that their input is being transmitted to an external service.
The natural-language strings describing the skill and its arguments are written only in Chinese, including the module docstring and CLI help text. Under the policy, locale or language constraints should not be forced without user opt-in unless clearly documented as region-specific.
No suspicious patterns detected.