Back to skill

Security audit

Voice Clone

Security checks for vulnerabilities and agentic risk

Overview

This voice synthesis skill is mostly purpose-aligned, but it has a real command-injection flaw and under-discloses cloud voice-service data handling.

Review before installing. Avoid using this skill with sensitive text or unauthorized voice material, and do not pass untrusted output paths. The publisher should replace the shell-based xdg-open call with a non-shell subprocess call or make playback opt-in, add privacy/consent guidance for cloud providers, and pin dependencies.

Vulnerability Patterns
  • Insecure DependenciesIntroduces malicious components through unsafe dependency sources
  • 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
Findings (2)

T09 · Insecure Skill Coding Practices

Error
Location
voice-clone.py:229
Finding

Shell Command Injection Through the User-Controlled Output Path

Content
View full analysis
/dev/null 2>&1 &") except: pass ``` The output path originates from the unrestricted command-line option: ```python parser.add_argument( "-o", "--output", type=str, help="输出文件路径" ) ``` ### Technical Analysis The `--output` argument is controlled by the caller and is passed to the selected synthesis function as the output filename. These functions return that value as `output_file`. After synthesis succeeds, the application interpolates `output_file` directly into a command string passed to `os.system()`. `os.system()` invokes a shell. Wrapping the value in single quotes is not sufficient because a filename containing a single quote can terminate the quoted argument and introduce shell metacharacters. The code does not escape or validate the value before shell interpretation. The surrounding `try/except` does not prevent exploitation. `os.system()` generally reports command failure through its numeric return value rather than raising an exception, and any injected command has a ...[truncated 1696 chars]
Remediation
View remediation

T08 · Insecure Dependencies

Warning
Location
SKILL.md:64
Finding

Unpinned Third-Party Dependency Installation

Content
View full analysis
Remediation
View remediation
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • Behavioral ASTexec() Call, eval() Call, Dynamic Import
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
Findings (8)

os.system() or os exec-family call

High
Category
Dangerous Code Execution
Confidence
97% confidence
Finding

The code invokes a shell with os.system() and interpolates a user-influenced output_file path into the command. Although the path is wrapped in single quotes, shell metacharacters such as embedded single quotes can break out of quoting and enable command injection, leading to arbitrary command execution when a crafted output path is supplied.

Content

Scanner excerpt · voice-clone.py (reported line 247)May include surrounding context.

python
# 尝试播放 (如果可用)
        try:
            os.system(f"xdg-open '{output_file}' >/dev/null 2>&1 &")
        except:
            pass

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
96% confidence
Finding

This skill advertises voice cloning and use of external TTS providers but provides no privacy, consent, retention, or third-party data-handling warnings. Because users may submit sensitive text and reference audio containing biometric voice data, omission of these warnings can lead to unauthorized processing, privacy violations, and compliance issues when data is sent to OpenAI, ElevenLabs, or other providers.

Content

No source excerpt is available for this finding.

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
93% confidence
Finding

The trigger phrases are broad, generic, and overlap with common conversational requests such as '读给我听' and '朗读', which can cause accidental activation in normal dialogue. In a skill that can invoke external TTS services and process user-provided audio paths, unintended triggering increases the chance of unexpected data processing, API usage, and handling of sensitive text or voice content.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
93% confidence
Finding

The OpenAI TTS path sends user-provided text to a remote third-party service without an explicit privacy notice or confirmation. If users provide sensitive text, the skill may unintentionally disclose private, regulated, or proprietary information to an external provider.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

The ElevenLabs integration transmits user text to an external service without prominently informing the user. In a voice-cloning/TTS context, users may paste sensitive content, making silent third-party disclosure a meaningful privacy and compliance risk.

Content

No source excerpt is available for this finding.

Context-Inappropriate Capability

Medium
Category
Not specified by scanner
Confidence
88% confidence
Finding

The skill automatically launches an external application to open the generated audio file. Even aside from the command injection issue above, auto-opening files can trigger unexpected execution paths via desktop handlers, expose local metadata, or create unsafe side effects in automation contexts where the user did not explicitly consent to launching another program.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
88% confidence
Finding

The natural-language description, help text, and runtime messages are written in Chinese, with no option to choose another interface language. That can violate a language/locale policy when a skill imposes a specific language on all users without opt-in or documented regional justification.

Content

No source excerpt is available for this finding.

Intent-Code Divergence

Low
Category
Not specified by scanner
Confidence
97% confidence
Finding

The help text shows voice-clone -t "Hello" -v en-jenny --engine openai, implying an Edge-style voice identifier works with the OpenAI engine. In the actual code, OpenAI voices are restricted to alloy, echo, fable, onyx, or shimmer, and unsupported values like en-jenny are silently replaced with alloy.

Content

No source excerpt is available for this finding.