Back to skill

Security audit

AI Voice Cloning Studio

Security checks for vulnerabilities and agentic risk

Overview

This voice-cloning skill mostly matches its stated purpose, but it asks for broad account authority and can silently replace its own package files, so it should be reviewed before installation.

Install only if you are comfortable giving Beatra a shared device token with broad media-generation authority, uploading authorized voice samples to Beatra, and allowing default silent package self-updates. Disable automatic updates with the documented command if you want review before replacement, and use this only for voices you own or have explicit permission to clone.

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

Warning
Location
scripts/uninstall.py:137
Finding

Destructive uninstall path lacks an enforced confirmation gate

Content
View full analysis

Vulnerability Details

File Location: scripts/uninstall.py, lines 137–147, 230–255, and 290
Vulnerability Type: Destructive credential revocation and state deletion without mandatory confirmation
Risk Level: Medium

Vulnerable Code

python
def _remove_local_state(state_dir: Path) -> None:
    for name in _STATE_FILES:
        try:
            (state_dir / name).unlink(missing_ok=True)
        except OSError:
            pass
    try:
        state_dir.rmdir()
    except OSError:
        pass
python
if dry_run:
    result.update({"decision": "disconnected", "revoked": False, "reason": "dry_run"})
    return result
token = _device_token(state_dir)
revoked = False
revoke_state = "no_credential"
if token is not None:
    try:
        status = post_revoke(token, _revoke_url(state_dir))
        if status == 200:
            revoked = True
            revoke_state = "revoked"
        elif status == 401:
            revoke_state = "not_recognized"
        else:
            result.update(
                {
                    "decision": "revoke_retry",
                    "revoked": False,
                    "reason": f"http_{status}",
                }
            )
            return result
    except RuntimeError:
        revoke_state = "unreachable"
token = None
_remove_local_state(state_dir)
python
result = uninstall(dry_run=args.dry_run)

Technical Analysis

The uninstall command defaults to dry_run=False. Therefore, directly invoking:

text
python3 scripts/uninstall.py

can enter a destructive path without an interactive prompt, an explicit confirmation flag, or a confirmation token tied to the current operation.

When the local inventory indicates that no other Beatra Skill remains, the script reads the shared device token, submits it to the Beatra revocation endpoint, and deletes the enumerated fi ...[truncated 1989 chars]

Remediation
View remediation

Remediation Suggestions

  1. Make dry-run behavior the default and require an explicit destructive flag, such as:

    text
    python3 scripts/uninstall.py --confirm-disconnect
    
  2. Require interactive confirmation when a terminal is available. The prompt should identify:

    • The resolved package path.
    • Whether this is considered the final Beatra Skill.
    • That the shared device token will be revoked.
    • The exact local state directory that will be modified.
  3. For non-interactive Agent use, require a short-lived confirmation value generated by a prior dry run and bound to:

    • The resolved package path.
    • The inventory digest.
    • The intended state directory.
    • An expiration timestamp.
  4. Revalidate the inventory immediately before revocation and deletion so that changes between preview and execution fail safely.

  5. Preserve the current conservative behavior for missing, unreadable, or inconsistent inventory and continue avoiding recursive deletion of unknown state.

Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • Memory PoisoningPersistent Context Injection, Context Window Stuffing, Memory Manipulation
  • Rogue AgentSelf-Modification, Session Persistence
Findings (37)

Context-Inappropriate Capability

Critical
Category
Not specified by scanner
Confidence
98% confidence
Finding

The helper requests tasks:read and tasks:cancel despite the skill description focusing on voice creation and narration workflows, not task administration. These permissions could expose unrelated operational metadata or allow interference with other queued work tied to the same account.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
99% confidence
Finding

The skill’s apparent scope is media generation, yet it also exposes uninstall/disconnect behavior that can access and delete local credential or state files and invoke remote revocation endpoints. Functionality that alters local installation state or credentials is security-sensitive and should not be hidden inside a content-production skill because it can surprise users and damage availability or account access.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
99% confidence
Finding

The skill’s apparent scope is media generation, yet it also exposes uninstall/disconnect behavior that can access and delete local credential or state files and invoke remote revocation endpoints. Functionality that alters local installation state or credentials is security-sensitive and should not be hidden inside a content-production skill because it can surprise users and damage availability or account access.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
99% confidence
Finding

The skill’s apparent scope is media generation, yet it also exposes uninstall/disconnect behavior that can access and delete local credential or state files and invoke remote revocation endpoints. Functionality that alters local installation state or credentials is security-sensitive and should not be hidden inside a content-production skill because it can surprise users and damage availability or account access.

Content

No source excerpt is available for this finding.

Memory Manipulation

High
Category
Memory Poisoning
Confidence
80% confidence
Finding

Skill manipulates agent memory, state, or stored context. Memory corruption can alter personality, override safety rules, or cause unpredictable behavior.

Content

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

md
plain consent statement already supplied. For a new clone, the user must state
that this is their own voice or that the speaker authorized this cloning use.
“Clone my voice” together with the user's current sample is sufficient; do not
turn that clear statement into repeated legal questions.

Access to a file, a public recording, a publication, a suggestive filename or
the speaker's public-figure status is not consent. For a third-party voice,

Credential Access

High
Category
Privilege Escalation
Confidence
70% confidence
Finding

Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Content

Scanner excerpt · manifest.json (reported line 67)May include surrounding context.

json
The host follows this computer's network route, described below.

They share the one full-scope Device Token stored in
`~/.beatra/credentials.json`. Installing or switching packages must not trigger
another authorization when that credential is already valid. Do not add,
enable, trust, or configure a host Beatra Connector. Never print or move the
token into command arguments, environment variables, logs, chat, or another

Credential Access

High
Category
Privilege Escalation
Confidence
70% confidence
Finding

Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Content

Scanner excerpt · references/installation-and-auth.md (reported line 14)May include surrounding context.

md
The host follows this computer's network route, described below.

They share the one full-scope Device Token stored in
`~/.beatra/credentials.json`. Installing or switching packages must not trigger
another authorization when that credential is already valid. Do not add,
enable, trust, or configure a host Beatra Connector. Never print or move the
token into command arguments, environment variables, logs, chat, or another

Credential Access

High
Category
Privilege Escalation
Confidence
70% confidence
Finding

Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Content

Scanner excerpt · references/installation-and-auth.md (reported line 21)May include surrounding context.

md
The host follows this computer's network route, described below.

They share the one full-scope Device Token stored in
`~/.beatra/credentials.json`. Installing or switching packages must not trigger
another authorization when that credential is already valid. Do not add,
enable, trust, or configure a host Beatra Connector. Never print or move the
token into command arguments, environment variables, logs, chat, or another

Credential Access

High
Category
Privilege Escalation
Confidence
70% confidence
Finding

Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Content

Scanner excerpt · references/installation-and-auth.md (reported line 53)May include surrounding context.

md
The host follows this computer's network route, described below.

They share the one full-scope Device Token stored in
`~/.beatra/credentials.json`. Installing or switching packages must not trigger
another authorization when that credential is already valid. Do not add,
enable, trust, or configure a host Beatra Connector. Never print or move the
token into command arguments, environment variables, logs, chat, or another

Credential Access

High
Category
Privilege Escalation
Confidence
70% confidence
Finding

Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Content

Scanner excerpt · references/mcp-connection.md (reported line 12)May include surrounding context.

md
The host follows this computer's network route, described below.

They share the one full-scope Device Token stored in
`~/.beatra/credentials.json`. Installing or switching packages must not trigger
another authorization when that credential is already valid. Do not add,
enable, trust, or configure a host Beatra Connector. Never print or move the
token into command arguments, environment variables, logs, chat, or another

Credential Access

High
Category
Privilege Escalation
Confidence
70% confidence
Finding

Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Content

Scanner excerpt · scripts/authorize.py (reported line 430)May include surrounding context.

python
The host follows this computer's network route, described below.

They share the one full-scope Device Token stored in
`~/.beatra/credentials.json`. Installing or switching packages must not trigger
another authorization when that credential is already valid. Do not add,
enable, trust, or configure a host Beatra Connector. Never print or move the
token into command arguments, environment variables, logs, chat, or another

Credential Access

High
Category
Privilege Escalation
Confidence
70% confidence
Finding

Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Content

Scanner excerpt · scripts/authorize.py (reported line 1009)May include surrounding context.

python
The host follows this computer's network route, described below.

They share the one full-scope Device Token stored in
`~/.beatra/credentials.json`. Installing or switching packages must not trigger
another authorization when that credential is already valid. Do not add,
enable, trust, or configure a host Beatra Connector. Never print or move the
token into command arguments, environment variables, logs, chat, or another

Credential Access

High
Category
Privilege Escalation
Confidence
70% confidence
Finding

Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Content

Scanner excerpt · scripts/mcp_client.py (reported line 1612)May include surrounding context.

python
The host follows this computer's network route, described below.

They share the one full-scope Device Token stored in
`~/.beatra/credentials.json`. Installing or switching packages must not trigger
another authorization when that credential is already valid. Do not add,
enable, trust, or configure a host Beatra Connector. Never print or move the
token into command arguments, environment variables, logs, chat, or another

Credential Access

High
Category
Privilege Escalation
Confidence
70% confidence
Finding

Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Content

Scanner excerpt · scripts/uninstall.py (reported line 39)May include surrounding context.

python
The host follows this computer's network route, described below.

They share the one full-scope Device Token stored in
`~/.beatra/credentials.json`. Installing or switching packages must not trigger
another authorization when that credential is already valid. Do not add,
enable, trust, or configure a host Beatra Connector. Never print or move the
token into command arguments, environment variables, logs, chat, or another

Credential Access

High
Category
Privilege Escalation
Confidence
70% confidence
Finding

Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Content

Scanner excerpt · scripts/uninstall.py (reported line 121)May include surrounding context.

python
The host follows this computer's network route, described below.

They share the one full-scope Device Token stored in
`~/.beatra/credentials.json`. Installing or switching packages must not trigger
another authorization when that credential is already valid. Do not add,
enable, trust, or configure a host Beatra Connector. Never print or move the
token into command arguments, environment variables, logs, chat, or another

Description-Behavior Mismatch

High
Category
Not specified by scanner
Confidence
99% confidence
Finding

The helper requests a very broad OAuth scope set that goes far beyond the skill's stated purpose of voice cloning and preview narration. Excess permissions increase blast radius if the token is misused or stolen, enabling unrelated actions across artifacts, images, videos, music, speech, voices, and task APIs.

Content

No source excerpt is available for this finding.

Context-Inappropriate Capability

High
Category
Not specified by scanner
Confidence
97% confidence
Finding

The helper requests tasks:read and tasks:cancel despite the skill description focusing on voice creation and narration workflows, not task administration. These permissions could expose unrelated operational metadata or allow interference with other queued work tied to the same account.

Content

No source excerpt is available for this finding.

Self-Modification

High
Category
Rogue Agent
Confidence
97% confidence
Finding

The exposed self-update capability permits the package to rewrite its own installation files. In a skill that should primarily handle voice-cloning tasks, self-modification materially increases risk because the running tool can change future behavior outside the host platform's normal review or deployment controls.

Content

Scanner excerpt · scripts/mcp_client.py (reported line 2396)May include surrounding context.

python
)
    update = subparsers.add_parser(
        "update",
        help="Check, install, or configure Beatra package self-updates",
    )
    update.add_argument(
        "--check",

Undeclared Tool Scope

Medium
Category
MCP Least Privilege
Confidence
94% confidence
Finding

The skill declares no explicit tool scope while directing use of a bundled Python client that can perform shell, filesystem, network, and environment-sensitive operations. This creates excessive ambient authority and makes it difficult for users or the host to constrain what the skill may do, increasing the blast radius if the client or workflow is abused.

Content

No source excerpt is available for this finding.

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
88% confidence
Finding

The manifest description lists many natural-language phrases such as "Clone my voice" and "create an AI voice clone" as part of the skill description, but it does not clearly bound when this skill should activate instead of adjacent workflows beyond later body text. In a manifest/description context, this breadth can overlap with ordinary user requests and create ambiguity about trigger scope.

Content

No source excerpt is available for this finding.

Context-Inappropriate Capability

Medium
Category
Not specified by scanner
Confidence
98% confidence
Finding

The skill advertises silent automatic updates that install newer versions without separate confirmation. Any mechanism that can download and replace package-owned files introduces a supply-chain and integrity risk, especially when it operates automatically during normal use rather than through an explicit update workflow.

Content

No source excerpt is available for this finding.

Session Persistence

Medium
Category
Rogue Agent
Confidence
72% confidence
Finding

The description explicitly emphasizes creating a reusable voice identity from a sample, which implies persistence and later reuse of highly sensitive biometric-derived assets. In a voice-cloning skill, persistent storage without clear disclosure, retention limits, and user controls increases risk of impersonation, unauthorized reuse, and long-term privacy harm.

Content

Scanner excerpt · manifest.json (reported line 9)May include surrounding context.

json
"icon": "https://beatra.ai/textures/icons/speech-tight.png",
  "localized": {
    "en": {
      "description": "Create a reusable personal or brand voice from a clean audio sample with this AI voice cloning studio and voice cloning software. Clone my voice, build a custom AI voice, or create an AI voice clone from a short single-speaker sample; give the custom voice a memorable name and reuse it for narration, courses, product stories, customer updates, series, and brand content. Compare sample quality, review the current estimate, and hear the reusable voice in a short test reading before expanding it into longer spoken projects.",
      "display_name": "AI Voice Cloning Studio",
      "summary": "Create a reusable personal or brand voice from a clean audio sample, give it a memorable name, and hear it in a short test reading.",
      "tags": [

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The manifest promotes uploading voice samples and creating reusable cloned voices without any disclosure about consent, impersonation, biometric privacy, or ownership risks. In a voice-cloning context, that omission is materially dangerous because users may submit third-party or sensitive voice data without understanding legal and privacy consequences.

Content

No source excerpt is available for this finding.

Autonomous Decision Making

Medium
Category
Excessive Agency
Confidence
80% confidence
Finding

Skill enables autonomous high-impact decisions without human-in-the-loop verification. Critical operations (destructive commands, financial transactions, data deletion) should require explicit user confirmation.

Content

Scanner excerpt · references/installation-and-auth.md (reported line 106)May include surrounding context.

md
- say prominently that a signed-out browser lands on Beatra sign-in first:
  the user signs in or creates their account there, and the approval page
  continues automatically after sign-in;
- say once that the connection continues automatically after Allow — never
  ask the user to confirm in chat that they approved.
- on the mainland China network, follow the sign-in and console-link guidance
  in [MCP connection](mcp-connection.md#network-route).

Autonomous Decision Making

Medium
Category
Excessive Agency
Confidence
80% confidence
Finding

Skill enables autonomous high-impact decisions without human-in-the-loop verification. Critical operations (destructive commands, financial transactions, data deletion) should require explicit user confirmation.

Content

Scanner excerpt · references/installation-and-auth.md (reported line 132)May include surrounding context.

md
Use one of `website`, `github`, `skillhub`, `skillatlas`, `modelscope`,
`workbuddy`, `clawhub`, or `other`. If the conversation does not show it,
skip this and do not ask the user. If the command is not recognized, skip it.

## Use the bundled MCP client

Static analysis

No suspicious patterns detected.