Back to skill

Security audit

Doubao Tts

Security checks for vulnerabilities and agentic risk

Overview

The skill appears to do what it claims, but it sends text and voice samples to an external speech service and supports voice cloning without clear consent and privacy safeguards.

Review before installing. Use this only for voices you own or have explicit permission to clone, avoid submitting confidential or regulated text/audio, and keep DOUBAO credentials scoped and protected. Expect data to be processed by the external Volcano Engine/ByteDance speech service and check that service's retention, billing, and acceptable-use terms before use.

Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • MCP Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
Findings (13)

Lp3

Medium
Category
MCP Least Privilege
Confidence
95% confidence
Finding
The skill declares only allowed tools, but the documentation clearly indicates use of environment variables for credentials and outbound network access to Volcano Engine APIs. This mismatch can cause users or policy systems to underestimate the skill’s access to secrets and external services, increasing the chance of unintended credential exposure or unauthorized data transfer.

Missing User Warnings

Medium
Confidence
93% confidence
Finding
This skill supports voice cloning from uploaded audio samples but does not present a clear consent, authorization, or privacy warning before describing that workflow. Voice cloning is highly sensitive because a user may upload someone else’s voice or personal biometric data without permission, enabling impersonation, fraud, or privacy violations.

Missing User Warnings

Medium
Confidence
96% confidence
Finding
The skill description does not clearly warn that input text, uploaded audio, and generated audio metadata are sent to an external third-party API service. Users may unintentionally submit sensitive content or regulated data under the false impression processing is local, creating confidentiality and compliance risks.

Missing User Warnings

Medium
Confidence
90% confidence
Finding
The file documents voice cloning parameters and workflows but provides no warning about consent, impersonation risk, biometric sensitivity, or retention/handling of uploaded voice samples. In a skill explicitly designed for TTS and voice cloning, this omission can normalize unsafe use and enable unauthorized cloning of a person’s voice for fraud, impersonation, or privacy violations.

Missing User Warnings

Medium
Confidence
88% confidence
Finding
The script uploads a user-provided audio sample to a third-party voice-cloning API, but it does not provide any explicit consent, privacy, or authorization warning before transmitting biometric voice data. In the context of voice cloning, this is sensitive because audio samples may contain personally identifiable and biometric information, and misuse could enable impersonation or privacy violations.

External Transmission

Medium
Category
Data Exfiltration
Content
body["extra_params"] = extra_params

    print(f"\nSubmitting voice cloning training (language: {LANGUAGE_MAP.get(args.language, args.language)})...")
    resp = requests.post(BASE_URL + CLONE_PATH, headers=headers, json=body, timeout=60)

    if resp.status_code != 200:
        try:
Confidence
91% confidence
Finding
This request sends base64-encoded voice sample data and associated metadata to an external API endpoint. While external transmission is the intended function of the skill, it is security-relevant because sensitive biometric audio leaves the local environment and is processed by a remote provider.

Env Variable Harvesting

High
Category
Data Exfiltration
Content
# Authentication (CLI arguments take priority, then environment variables/.env)
    auth = parser.add_argument_group("Authentication (choose one: new or legacy console; can also be configured via .env or environment variables)")
    auth.add_argument("--api-key", default=os.environ.get("DOUBAO_API_KEY"),
                      help="New console API Key (recommended; can also set DOUBAO_API_KEY)")
    auth.add_argument("--app-key", default=os.environ.get("DOUBAO_APP_KEY"),
                      help="Legacy console App Key (can also set DOUBAO_APP_KEY)")
Confidence
70% confidence
Finding
Code accesses environment variables that may contain secrets (API keys, tokens). This is a common pattern for credential theft.

Env Variable Harvesting

High
Category
Data Exfiltration
Content
auth = parser.add_argument_group("Authentication (choose one: new or legacy console; can also be configured via .env or environment variables)")
    auth.add_argument("--api-key", default=os.environ.get("DOUBAO_API_KEY"),
                      help="New console API Key (recommended; can also set DOUBAO_API_KEY)")
    auth.add_argument("--app-key", default=os.environ.get("DOUBAO_APP_KEY"),
                      help="Legacy console App Key (can also set DOUBAO_APP_KEY)")
    auth.add_argument("--access-key", default=os.environ.get("DOUBAO_ACCESS_KEY"),
                      help="Legacy console Access Key (can also set DOUBAO_ACCESS_KEY)")
Confidence
70% confidence
Finding
Code accesses environment variables that may contain secrets (API keys, tokens). This is a common pattern for credential theft.

Env Variable Harvesting

High
Category
Data Exfiltration
Content
help="New console API Key (recommended; can also set DOUBAO_API_KEY)")
    auth.add_argument("--app-key", default=os.environ.get("DOUBAO_APP_KEY"),
                      help="Legacy console App Key (can also set DOUBAO_APP_KEY)")
    auth.add_argument("--access-key", default=os.environ.get("DOUBAO_ACCESS_KEY"),
                      help="Legacy console Access Key (can also set DOUBAO_ACCESS_KEY)")

    # Voice ID
Confidence
70% confidence
Finding
Code accesses environment variables that may contain secrets (API keys, tokens). This is a common pattern for credential theft.

Env Variable Harvesting

High
Category
Data Exfiltration
Content
# Authentication (CLI arguments take priority, then environment variables/.env)
    auth = parser.add_argument_group("Authentication (can also be configured via .env or environment variables)")
    auth.add_argument("--api-key", default=os.environ.get("DOUBAO_API_KEY"),
                      help="New console API Key (can also set DOUBAO_API_KEY)")
    auth.add_argument("--app-id", default=os.environ.get("DOUBAO_APP_ID"),
                      help="Legacy console App ID (can also set DOUBAO_APP_ID)")
Confidence
70% confidence
Finding
Code accesses environment variables that may contain secrets (API keys, tokens). This is a common pattern for credential theft.

Env Variable Harvesting

High
Category
Data Exfiltration
Content
help="New console API Key (can also set DOUBAO_API_KEY)")
    auth.add_argument("--app-id", default=os.environ.get("DOUBAO_APP_ID"),
                      help="Legacy console App ID (can also set DOUBAO_APP_ID)")
    auth.add_argument("--access-key", default=os.environ.get("DOUBAO_ACCESS_KEY"),
                      help="Legacy console Access Key (can also set DOUBAO_ACCESS_KEY)")

    # Synthesis parameters
Confidence
70% confidence
Finding
Code accesses environment variables that may contain secrets (API keys, tokens). This is a common pattern for credential theft.

Credential Access

High
Category
Privilege Escalation
Content
script_dir = os.path.dirname(os.path.abspath(__file__))
    candidates = [
        os.path.join(script_dir, ".env"),
        os.path.join(script_dir, "..", ".env"),
    ]
    for path in candidates:
        path = os.path.normpath(path)
Confidence
60% confidence
Finding
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Credential Access

High
Category
Privilege Escalation
Content
script_dir = os.path.dirname(os.path.abspath(__file__))
    candidates = [
        os.path.join(script_dir, ".env"),
        os.path.join(script_dir, "..", ".env"),
    ]
    for path in candidates:
        path = os.path.normpath(path)
Confidence
60% confidence
Finding
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Static analysis

No suspicious patterns detected.