T09 · Insecure Skill Coding Practices
- Location
scripts/gen.py:64- Finding
API Credential Disclosure Through an Unrestricted Configurable Endpoint
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
This image-generation skill is mostly coherent, but it needs review because it can send the user's API key to a configurable endpoint and download unvalidated URLs returned by that endpoint.
Review this skill before installing. Use only trusted Volcano Engine ARK endpoints, do not let prompts or untrusted configuration set SEEDREAM_API_ENDPOINT or --endpoint, and use a narrowly scoped API key with quota limits. Avoid sensitive prompt content unless you are comfortable sending it to the configured remote image service and storing it locally in manifest.json.
scripts/gen.py:64API Credential Disclosure Through an Unrestricted Configurable Endpoint
scripts/gen.py:81Unvalidated API-Controlled Image Download Enables SSRF and Resource Exhaustion
The skill advertises capabilities that imply access to environment variables, network calls, and local file writes, but it does not declare any explicit tool scope or permissions. This creates an authorization transparency gap: users and the host may not be able to clearly constrain or review what the skill can access, increasing the risk of over-privileged execution and unintended data exposure.
The trigger list includes broad vendor/model terms like 'Doubao', 'Seedream', 'Volcano ARK', and generic requests to use the Maliang path, which can match ordinary image-generation conversations rather than an explicit invocation of this specific skill. Over-broad routing can cause the skill to activate unexpectedly, sending user prompts to an external API and writing local artifacts without sufficiently clear user intent.
The skill states that outputs are saved locally and that a manifest contains the prompt, model, and timestamp, but it does not clearly warn users that their prompts and related metadata are persistently stored on disk. Because prompts may contain sensitive personal, business, or creative information, this omission can lead to privacy leakage, unintended retention, and later disclosure through local access or backups.
The manifest description begins in Chinese and then switches to English, which may impose a language expectation on users without any opt-in or documented locale scope. Under the language/locale policy check, this is a natural-language issue because the file does not explain whether the skill is intended only for Chinese-speaking users or offer alternative localization behavior.
This code sends the user-provided prompt to an external HTTP endpoint via request_images, which is a privacy-relevant network operation. Although the CLI description names the remote service, there is no explicit runtime warning, confirmation, or comment disclosing that the prompt text will be transmitted off-box.