Back to skill

Security audit

Songmaker

Security checks for vulnerabilities and agentic risk

Overview

This song-generation skill is coherent, but its shell examples unsafely insert user text into commands and could expose the user's API key or files if followed literally.

Review this skill before installing. It should only be used with non-sensitive prompts and lyrics, and the command examples should be rewritten to build JSON with jq or another serializer before use. Do not follow the current snippets literally with untrusted titles, lyrics, prompts, or style text.

Vulnerability Patterns
  • Insecure Skill Coding PracticesFinds exploitable flaws such as hardcoded secrets or command injection
  • Skill Instruction HijackingAlters the agent's session goals or safety constraints when the skill loads
  • Agent Memory PoisoningWrites attacker-controlled rules into memory that affect later sessions
  • Remote Payload Retrieval and ExecutionFetches external code whose behavior can change after review
  • Embedded Malicious CodeShips malicious scripts inside the skill and executes them locally
Findings (2)

T09 · Insecure Skill Coding Practices

Error
Location
SKILL.md:38
Finding

Unsafe Shell and JSON Interpolation of User-Controlled Values

Content
View full analysis
\", \"provider\": \"sensesong\"}") ``` Lines 94–104: ```bash SONG_RESP=$(curl -s -X POST "https://api.senseaudio.cn/v1/song/music/create" \ -H "Authorization: Bearer $SENSEAUDIO_API_KEY" \ -H "Content-Type: application/json" \ -d "{ \"model\": \"sensesong\", \"lyrics\": \"\", \"title\": \"\", \"vocal_gender\": \"<f|m>\", \"style\": \"<STYLE>\" }") SONG_TASK=$(echo $SONG_RESP | jq -r '.task_id') ``` ### Technical Analysis The documented commands place the user-controlled prompt, lyrics, title, and style directly inside double-quoted shell arguments. The Skill does not instruct the agent to pass these values through environment variables or serialize them using a JSON-aware mechanism. If an agent implements the examples through literal placeholder substitution, shell metacharacters contained in user input can terminate the intended quoting context. Command substitutions, quotation marks, backslashes, semicolons, or newlines could then alter the command evaluated by the shell. Even when command execution is not achieved, unescaped quotation marks and control characters can corrupt the JSON request. The problem affects both lyric generation and song generation. Lyrics returned by the remote service are also placed into the second command as `<LYRICS>`, so unsafe data does not necessarily have to originate directly from the user. ### Attack Path 1. An attacker submits a song prompt, title, lyrics, or style containing shell syntax designed to escape the JSON string and shell quoti ...[truncated 1299 chars]
Remediation
View remediation

T09 · Insecure Skill Coding Practices

Note
Location
SKILL.md:50
Finding

Unbounded API Polling Can Stall Agent Execution

Content
View full analysis
Remediation
View remediation
&2 sleep "$POLL_INTERVAL" continue fi STATUS=$(jq -r '.status // empty' <<<"$POLL") case "$STATUS" in SUCCESS|FAILED) break ;; PENDING|PROCESSING) ;; *) echo "Unexpected task status or response" >&2 exit 1 ;; esac sleep "$POLL_INTERVAL" done if [ "$STATUS" != "SUCCESS" ] && [ "$STATUS" != "FAILED" ]; then echo "Task polling deadline exceeded" >&2 exit 1 fi ``` Also: - Establish an overall workflow deadline in addition to per-request timeouts. - Distinguish transient failures from permanent HTTP errors. - Stop immediately on authentication and authorization failures. - Validate that the response is JSON and contains the expected schema. - Use capped exponential backoff, optionally with jitter, for transient failures. - Report timeout and terminal failure conditions clearly to the user. ]]>
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
Findings (9)

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The trigger list includes very broad phrases such as “作曲” and “写歌”, which can match many ordinary user requests and cause the skill to activate unexpectedly. Over-broad activation increases the chance that user content is routed to this external service without clear intent or informed consent, especially because the skill sends prompts and lyrics off-platform.

Content

No source excerpt is available for this finding.

External Transmission

Medium
Category
Data Exfiltration
Confidence
60% confidence
Finding

Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Content

Scanner excerpt · SKILL.md (reported line 10)May include surrounding context.

md
env:
        - SENSEAUDIO_API_KEY
      bins:
        - curl
        - jq
    primaryEnv: SENSEAUDIO_API_KEY
    homepage: https://senseaudio.cn

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The skill workflow does not clearly warn that user prompts and lyrics are transmitted to SenseAudio’s external API. Users may provide private, copyrighted, or sensitive text believing it remains local, creating privacy and compliance risk when the skill forwards that content to a third party.

Content

No source excerpt is available for this finding.

External Transmission

Medium
Category
Data Exfiltration
Confidence
91% confidence
Finding

The lyrics-generation request transmits the raw user prompt to an external provider, which can expose private or regulated content. Because the skill is designed to accept free-form text, the absence of a privacy warning or consent step makes this more dangerous than a typical backend call.

Content

Scanner excerpt · SKILL.md (reported line 39)May include surrounding context.

Skip this step if the user provides their own lyrics.

bash
LYRICS_RESP=$(curl -s -X POST "https://api.senseaudio.cn/v1/song/lyrics/create" \
  -H "Authorization: Bearer $SENSEAUDIO_API_KEY" \
  -H "Content-Type: application/json" \
  -d "{\"prompt\": \"<USER_PROMPT>\", \"provider\": \"sensesong\"}")

External Transmission

Medium
Category
Data Exfiltration
Confidence
50% confidence
Finding

Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Content

Scanner excerpt · SKILL.md (reported line 51)May include surrounding context.

bash
while true; do
  POLL=$(curl -s "https://api.senseaudio.cn/v1/song/lyrics/pending/$TASK_ID" \
    -H "Authorization: Bearer $SENSEAUDIO_API_KEY")
  STATUS=$(echo $POLL | jq -r '.status')
  { [ "$STATUS" = "SUCCESS" ] || [ "$STATUS" = "FAILED" ]; } && break

External Transmission

Medium
Category
Data Exfiltration
Confidence
50% confidence
Finding

Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Content

Scanner excerpt · SKILL.md (reported line 113)May include surrounding context.

bash
while true; do
  POLL=$(curl -s "https://api.senseaudio.cn/v1/song/lyrics/pending/$TASK_ID" \
    -H "Authorization: Bearer $SENSEAUDIO_API_KEY")
  STATUS=$(echo $POLL | jq -r '.status')
  { [ "$STATUS" = "SUCCESS" ] || [ "$STATUS" = "FAILED" ]; } && break

External Transmission

Medium
Category
Data Exfiltration
Confidence
90% confidence
Finding

The explicit external endpoint confirms that complete song-generation inputs are being sent off-platform. In this skill context that behavior is functional, but it remains a true security/privacy concern because activation may be broad and users are not clearly warned that their text and creative content leave the system.

Content

Scanner excerpt · SKILL.md (reported line 95)May include surrounding context.

| 不要某种风格 | "negative_tags": "<描述>" |

bash
SONG_RESP=$(curl -s -X POST "https://api.senseaudio.cn/v1/song/music/create" \
  -H "Authorization: Bearer $SENSEAUDIO_API_KEY" \
  -H "Content-Type: application/json" \
  -d "{

External Transmission

Medium
Category
Data Exfiltration
Confidence
90% confidence
Finding

The explicit external endpoint confirms that complete song-generation inputs are being sent off-platform. In this skill context that behavior is functional, but it remains a true security/privacy concern because activation may be broad and users are not clearly warned that their text and creative content leave the system.

Content

Scanner excerpt · SKILL.md (reported line 95)May include surrounding context.

| 不要某种风格 | "negative_tags": "<描述>" |

bash
SONG_RESP=$(curl -s -X POST "https://api.senseaudio.cn/v1/song/music/create" \
  -H "Authorization: Bearer $SENSEAUDIO_API_KEY" \
  -H "Content-Type: application/json" \
  -d "{

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
79% confidence
Finding

The invocation examples are entirely in Chinese, and the skill presents behavior oriented around Chinese-language usage without stating that it is intentionally limited to a Chinese locale or offering user language flexibility. This can be a natural-language policy concern when a skill implicitly enforces one language without opt-in or justification.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.