Back to skill

Security audit

Iflytek Voiceclone Tts

Security checks for vulnerabilities and agentic risk

Overview

This skill appears to perform the advertised iFlytek voice-cloning workflow, but it handles voice data, text, and API credentials with unsafe network protections.

Install only if you trust the publisher and are comfortable sending voice recordings, synthesis text, and iFlytek API credentials through this implementation. Use only recordings from speakers who have explicitly consented, avoid confidential text, run on trusted networks, and prefer a fixed version that uses HTTPS for training and keeps normal TLS certificate validation enabled for synthesis.

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
scripts/voiceclone.py:49
Finding

Sensitive voice-training data and authentication material transmitted over plaintext HTTP

Content
View full analysis
str: """Get auth token from iFlytek auth service.""" ts = int(time.time() * 1000) body = { "base": { "appid": self.app_id, "version": "v1", "timestamp": str(ts), }, "model": "remote", } body_json = json.dumps(body) key_sign = hashlib.md5((self.api_key + str(ts)).encode("utf-8")).hexdigest() sign = hashlib.md5((key_sign + body_json).encode("utf-8")).hexdigest() req = urllib.request.Request( AUTH_TOKEN_URL, data=body_json.encode("utf-8"), headers={ "Authorization": sign, "Content-Type": "application/json", }, ) with urllib.request.urlopen(req, timeout=30) as resp: result = json.loads(resp.read().decode("utf-8")) ``` Subsequent training operations transmit the access token and application identifier over plaintext HTTP: ```python def _headers(self, sign: str) -> dict: return { "X-Sign": sign, "X-Token": self.token, "X-AppId": self.app_id, "X-Time": str(self._ts), "Content-Type": "application/json", } def _post(self, path: str, body: dict) -> dict: """POST JSON to training API.""" self._ensure_token() sign = self._sign_body(body) headers = self._headers(sign) data = json.dumps(body).encode("utf-8") req = urllib.request.Request( ...[truncated 3919 chars]
Remediation
View remediation

T09 · Insecure Skill Coding Practices

Error
Location
scripts/voiceclone.py:80
Finding

WebSocket TLS certificate and hostname verification explicitly disabled

Content
View full analysis
str: """Build HMAC-SHA256 signed WebSocket authentication URL.""" parsed = urllib.parse.urlparse(request_url) host = parsed.hostname path = parsed.path date = format_date_time(mktime(datetime.now().timetuple())) signature_origin = f"host: {host}\ndate: {date}\nGET {path} HTTP/1.1" signature_sha = hmac.new( api_secret.encode("utf-8"), signature_origin.encode("utf-8"), digestmod=hashlib.sha256, ).digest() signature_b64 = base64.b64encode(signature_sha).decode("utf-8") authorization_origin = ( "api_key=" + '"' + api_key + '", algorithm="hmac-sha256", ' 'headers="host date request-line", signature="' + signature_b64 + '"' ) authorization = base64.b64encode(authorization_origin.encode("utf-8")).decode("utf-8") params = {"host": host, "date": date, "authorization": authorization} return request_url + "?" + urllib. ...[truncated 3890 chars]
Remediation
View remediation
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • MCP Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
Findings (10)

Missing User Warnings

High
Category
Not specified by scanner
Confidence
98% confidence
Finding

This skill facilitates voice cloning and uploading audio samples to a third-party provider but provides no warning about consent, impersonation, biometric privacy, or external data handling. In this context, omission is dangerous because users may be led to submit someone else's voice or sensitive recordings without informed consent, creating significant privacy, fraud, and compliance risk.

Content

No source excerpt is available for this finding.

Intent-Code Divergence

High
Category
Not specified by scanner
Confidence
99% confidence
Finding

The WebSocket client explicitly disables TLS certificate verification and hostname checking before connecting to the remote TTS endpoint. This allows a man-in-the-middle attacker to intercept or modify synthesized text/audio traffic and potentially capture signed authentication material or service responses, which is especially sensitive given this skill transmits user text and voice-cloning data to remote services.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

The README documents uploading local audio or public audio URLs for voice-cloning training but does not clearly warn users that this transfers biometric voice data to an external third-party service. In a voice-cloning context, that omission is security-relevant because users may unknowingly expose sensitive personal data or submit recordings without understanding privacy, consent, or retention implications.

Content

No source excerpt is available for this finding.

Undeclared Tool Scope

Medium
Category
MCP Least Privilege
Confidence
95% confidence
Finding

The skill clearly relies on sensitive capabilities—environment variables for credentials, local file input for audio/text, and network access to third-party APIs—yet it does not declare any explicit tool scope or permission boundaries. That increases the chance an agent may invoke the skill with broader-than-expected access, making credential exposure, unintended file access, or unsanctioned outbound requests harder to govern or audit.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
89% confidence
Finding

The manifest metadata embeds user-facing invocation examples only in Chinese (帮我克隆这个声音, 用他的声音说这段话, 声音复刻) with no indication that language selection is optional or intentionally limited to a Chinese-only audience. This can violate language/locale policy because the skill appears to impose a specific language without explicit user opt-in or justification.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
91% confidence
Finding

The code reads a local audio file and sends its contents to the vendor's remote voice-training API, which is a privacy-sensitive network transmission. While the script's purpose involves training a voice model, there is no explicit user-facing disclosure at the upload point that local voice data will be transmitted off-system.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
88% confidence
Finding

The synthesis flow accepts text from a file, command-line argument, or stdin and then sends that content over a WebSocket connection to the external TTS service. The script logs that synthesis is happening, but it does not clearly disclose that potentially sensitive text content is being transmitted to a third-party remote service.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
75% confidence
Finding

The README content is primarily in Chinese, including core operational instructions, while not stating that the skill is intentionally region- or language-specific. Under the policy, forcing a specific language without opt-in can be a natural-language policy concern.

Content

No source excerpt is available for this finding.

Missing User Warnings

Low
Category
Not specified by scanner
Confidence
86% confidence
Finding

The synthesis documentation describes saving generated speech to an output file but does not explicitly warn that audio is written to disk by default or via the output flag. This can lead to unintentional local persistence of potentially sensitive synthesized content, especially on shared systems or in automated environments.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
75% confidence
Finding

Natural-language strings in the module description and examples are centered on Chinese text, which can imply a default language expectation. Because there is no accompanying user-facing language choice for the synthesis input examples or descriptive text, this may conflict with a policy requiring language or locale neutrality unless the user opts in.

Content

No source excerpt is available for this finding.

Static analysis

Detected: suspicious.exposed_secret_literal, suspicious.insecure_tls_verification

File appears to expose a hardcoded API secret or token.

Critical
Code
suspicious.exposed_secret_literal
Location
scripts/voiceclone.py:434

HTTPS certificate verification is disabled.

Warn
Code
suspicious.insecure_tls_verification
Location
scripts/voiceclone.py:82