Back to skill

Security audit

Polyphone TTS

Security checks for vulnerabilities and agentic risk

Overview

The skill’s TTS purpose is legitimate, but its shell example handles user text unsafely enough to warrant review before installation.

Install only if you trust the SenseAudio service and will ensure agents construct the API request with a JSON tool or temporary JSON file rather than interpolating user text directly into the shown shell command. Treat the broad trigger as a usability concern and keep API-key use limited to intended TTS requests.

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 (1)

T09 · Insecure Skill Coding Practices

Error
Location
SKILL.md:91
Finding

Command Injection Through Unsafe JSON Construction in Shell

Content
View full analysis
", "stream": false, "voice_setting": { "voice_id": "" }, "audio_setting": { "format": "mp3" }, "dictionary": }' -o response.json ``` ### Technical Analysis The command places the entire JSON request body inside a single-quoted shell argument while instructing the Agent to replace ``, ``, and `` with dynamically supplied values. The text and dictionary content can originate from user-provided TTS text. If these placeholders are replaced by direct textual substitution, a single quote in an untrusted value terminates the shell's quoted `-d` argument. Subsequent shell metacharacters can then be interpreted as commands rather than request data. Even without command execution, unescaped double quotes, backslashes, control characters, or newlines can corrupt the JSON structure or alter request fields. The API key is passed through an authorization header and is not hardcoded. However, successful command injection would execute with the privileges and environment of the Agent running the Skill, potentially exposing that credential and other accessible data. ### Attack Path 1. An attacker provides TTS text, a voice ID, or dictionary content containing a single quote followed by shell syntax. 2. The Skill workflow constructs the command by substituting that content directly into the single-quoted JSON literal. 3. The attacker-controlled single quote closes the `-d` shell argument prematurely. 4. The shell parses the remaining attacker-controlled ...[truncated 1321 chars]
Remediation
View remediation
"$request_file" curl --fail-with-body --silent --show-error \ -X POST "https://api.senseaudio.cn/v1/t2a_v2" \ -H "Authorization: Bearer $SENSEAUDIO_API_KEY" \ -H "Content-Type: application/json" \ --data-binary "@$request_file" \ -o "$response_file" jq -e '.base_resp.status_code == 0 and (.data.audio | type == "string")' \ "$response_file" >/dev/null ``` This approach keeps untrusted values as JSON data and prevents the shell from interpreting their contents as executable syntax. ]]>
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 (3)

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The manifest description ends with "or any request to correct TTS pronunciation," which is much broader than the specific Chinese polyphone use case described elsewhere. This could overlap with many generic TTS-fixing requests and cause the skill to activate outside its intended scope.

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 91)May include surrounding context.

The user must provide a cloned voice ID. If they don't have one, remind them that dictionary requires a cloned voice and suggest using the senseaudio-voice-cloner skill first.

bash
curl -s -X POST https://api.senseaudio.cn/v1/t2a_v2 \
  -H "Authorization: Bearer $SENSEAUDIO_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{

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 91)May include surrounding context.

The user must provide a cloned voice ID. If they don't have one, remind them that dictionary requires a cloned voice and suggest using the senseaudio-voice-cloner skill first.

bash
curl -s -X POST https://api.senseaudio.cn/v1/t2a_v2 \
  -H "Authorization: Bearer $SENSEAUDIO_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{

Static analysis

No suspicious patterns detected.