T09 · Insecure Skill Coding Practices
- Location
scripts/anime_studio.py:10- Finding
API Credentials and User Content Transmitted over Plaintext HTTP
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
The skill is a coherent anime-drama creation tool, but its bundled script sends user content and account keys to a hard-coded plaintext HTTP API without adequate disclosure or transport protection.
Review this skill before installing. Avoid sending confidential scripts, unpublished client material, or real personal data through it unless the publisher provides a documented HTTPS endpoint, privacy terms, and a clear consent flow. Any ANIME_API_USER_KEY used with the current script could be exposed on the network because the default endpoint is plaintext HTTP.
scripts/anime_studio.py:10API Credentials and User Content Transmitted over Plaintext HTTP
Without declared permissions the skill's intent is opaque and cannot be validated.
The manifest description and the entire user-facing workflow are written as mandatory Chinese-language instructions, with no indication that other languages are supported or that the user can opt into this locale. Under the policy, forcing a specific language without user choice is a natural-language policy violation unless the restriction is clearly documented and justified.
User-facing strings, help text, and output throughout the file are written exclusively in Chinese, and the skill does not provide any opt-in, alternative locale, or explanation that it is intentionally region-specific. This can violate language/locale policy when a skill forces a specific language without user choice.
The skill transmits data to an external API endpoint, and the default base URL is plain HTTP to a hard-coded IP address rather than HTTPS. This exposes user prompts, account identifiers, and API keys in transit to interception or modification by network attackers, making the external transmission materially dangerous in this context.
if method == "GET":
resp = requests.get(url, headers=h, params=data or {}, timeout=30)
else:
resp = requests.post(url, headers=h, json=data or {}, timeout=60)
if resp.status_code >= 400:
try:
err = resp.json()
The create command sends user-supplied story ideas and related content to a third-party backend service, but the user-facing flow only shows a generic progress message and does not clearly disclose that potentially sensitive creative material will be transmitted off-box. This creates a privacy and confidentiality risk, especially because story ideas may contain unpublished IP, client material, or personal data.
The registration flow transmits the provided username to an external API without a clear warning that account data is being sent to a remote service. While the data element here is limited, it is still an external data-sharing event and should be disclosed to users.