T09 · Insecure Skill Coding Practices
- Location
SKILL.md:157- Finding
Server-Side Request Forgery Through Unvalidated API and Audio URLs
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
The skill is a coherent music-generation helper, but its automated path asks users to rely on unofficial services with account session credentials and includes under-scoped network downloads and file writes.
Use the manual Suno/Udio web workflow unless you have reviewed and isolated the third-party wrapper. Do not give a primary account session to an untrusted wrapper, and only run the automated snippet in a sandbox with restricted network access and a dedicated output directory where overwriting track files is acceptable.
SKILL.md:157Server-Side Request Forgery Through Unvalidated API and Audio URLs
SKILL.md:172User-Controlled Output Directory Permits File Overwrite and Symlink Attacks
SKILL.md:174Unbounded and Unvalidated Remote Download Enables Resource Exhaustion
SKILL.md:131Unpinned Community API Wrappers Are Recommended for Use With Account Session Credentials
The skill advises use of account session credentials stored in a local .env for unofficial wrappers. Session credentials are highly sensitive and often grant full account access; encouraging their use with third-party wrappers materially increases the chance of credential compromise or unauthorized account activity.
These require your account session credentials. Store credentials in a local .env file — never hardcode them in scripts. Refer to each project's README for setup instructions.
The skill is described as a prompt-composition assistant, but it also includes code and guidance to call a local API wrapper and download remote audio files. This expands the trust boundary from harmless text generation into network actions and file writes, which users may not expect from the description alone.
The listed triggers include generic phrases such as "create a song" and activation on any user who "describes a mood, scene, or use case," which is broad enough to overlap with normal conversational requests not necessarily intended to invoke this specific skill. The section does not provide exclusion conditions or tighter scope constraints to distinguish when the skill should not activate.
The instructions state that each variant must include "A complete English prompt ready for Suno or Udio," which imposes a language requirement in natural-language guidance. Because the skill elsewhere collects lyric language preferences, forcing English prompt output without opt-in or documented justification is a language policy concern.
The skill directs users to community-maintained wrappers that require account session credentials, even though the core function is composing prompts. This encourages use of unofficial infrastructure with sensitive credentials, increasing risk of account takeover, credential theft, or unsafe handling of authenticated sessions.
The code sends user-provided prompts to an external/local API service and then retrieves audio from URLs returned by that service. This creates data exfiltration and supply-chain risk: prompts leave the local context, and unvalidated returned URLs can cause unexpected outbound requests and untrusted content downloads.
if not api_url:
raise EnvironmentError("SUNO_API_URL is not set in environment variables.")
response = requests.post(f"{api_url}/api/generate", json={
"prompt": prompt,
"make_instrumental": True,
"wait_audio": True
No suspicious patterns detected.