Back to skill

Security audit

Wrong Item Talking Clips

Security checks for vulnerabilities and agentic risk

Overview

This looks like a real Beatra media skill, but it uses broad account-level Beatra authority, spending capability, shared credentials, and automatic self-updates beyond the narrow clip workflow.

Review before installing. Use this only if you are comfortable connecting a Beatra account with a shared device token, uploading selected local media to Beatra, allowing credit-spending media operations, and accepting package-owned automatic updates unless you turn them off with the documented update command. Confirm every paid stage yourself and avoid using sensitive images, voices, or student material unless you have the required rights and consent.

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/mcp_client.py:1657
Finding

Paid MCP operations are not protected by code-enforced transaction confirmation

Content
View full analysis

Vulnerability Details

File Location: scripts/mcp_client.py:1657–1674
Vulnerability Type: Missing authorization enforcement for paid operations
Risk Level: Medium

python
else:
    maybe_auto_update()
state_dir = Path.home() / ".beatra"
if args.command == "verify":
    _with_waiting_approval(verify, state_dir=state_dir)
elif args.command == "upload":
    result = _with_waiting_approval(
        lambda: upload(args.path, mime_type=args.mime_type),
        state_dir=state_dir,
    )
    print(json.dumps(result, ensure_ascii=False, separators=(",", ":")))
elif args.command in {"tools", "call"}:
    # Read once: a call retried after collecting an approval reuses them.
    arguments = _read_tool_arguments() if args.command == "call" else None
    result = _with_waiting_approval(
        lambda: _run_command(args.command, getattr(args, "tool_name", None), arguments),
        state_dir=state_dir,
    )

The unrestricted tool-name input is created at scripts/mcp_client.py:1575–1589:

python
call = subparsers.add_parser("call", help="Call one tool with a JSON object on stdin")
call.add_argument("tool_name")

Technical Analysis

The Skill documentation requires a separate six-field confirmation card and explicit user approval before each paid voice-cloning, speech-synthesis, or video-generation stage. However, the bundled executable client does not enforce that transaction-level approval.

The call command accepts an arbitrary MCP tool name and reads its arguments from standard input. The resulting tool name and arguments are passed to _run_command, which submits them through the authenticated MCP session. There is no paid-tool allowlist, confirmation token, dry-run gate, price binding, or verification that the user approved the exact operation and arguments.

This is security-relevant because the authorization scope in scripts/authorize.py:38–40 includes credit-spend ...[truncated 1946 chars]

Remediation
View remediation

Remediation Suggestions

  1. Require a short-lived, server-issued confirmation token for every paid operation.
  2. Bind that token cryptographically or server-side to the exact tool name, normalized arguments, current price, quantity, account, and opaque request ID.
  3. Reject paid calls when the token is missing, expired, already used, or does not match the submitted operation.
  4. Maintain an explicit local allowlist separating read-only, upload, and paid tools; fail closed for unknown tool names.
  5. Add a machine-enforced confirmation field rather than relying exclusively on prose instructions to the Agent.
  6. Preserve idempotency protections so retrying a confirmed request cannot create a second charge.
  7. Add tests proving that direct helper invocation cannot submit clone, speech, video, image, or music generation without valid transaction-specific approval.
Vulnerability Patterns
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • Rogue AgentSelf-Modification, Session Persistence
  • MCP Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
Findings (39)

Context-Inappropriate Capability

Critical
Category
Not specified by scanner
Confidence
99% confidence
Finding

The task and artifact read/write/cancel permissions go beyond the narrowly described workflow and may expose or alter unrelated user jobs and outputs if the shared credential is reused. In this codebase, the risk is amplified because the helper explicitly stores and reuses one shared Beatra credential across skills on the device.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
99% confidence
Finding

The skill presents itself as a narrow clip-generation workflow, but it also instructs the agent to read credential files, upload local files to remote services, perform registration/telemetry, detect host platform details, self-update, and invoke remote tools through a CLI. That discrepancy hides data exfiltration and system-modifying behaviors inside a benign-looking media workflow, which is especially risky because the skill asks to inspect local files and transmit them remotely.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
99% confidence
Finding

The skill presents itself as a narrow clip-generation workflow, but it also instructs the agent to read credential files, upload local files to remote services, perform registration/telemetry, detect host platform details, self-update, and invoke remote tools through a CLI. That discrepancy hides data exfiltration and system-modifying behaviors inside a benign-looking media workflow, which is especially risky because the skill asks to inspect local files and transmit them remotely.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
99% confidence
Finding

The skill presents itself as a narrow clip-generation workflow, but it also instructs the agent to read credential files, upload local files to remote services, perform registration/telemetry, detect host platform details, self-update, and invoke remote tools through a CLI. That discrepancy hides data exfiltration and system-modifying behaviors inside a benign-looking media workflow, which is especially risky because the skill asks to inspect local files and transmit them remotely.

Content

No source excerpt is available for this finding.

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

json
```

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.

text

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.

text

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.

text

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

text

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

python
```

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

python
```

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

python
```

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
97% confidence
Finding

The requested OAuth scope is far broader than the skill's stated purpose of creating talking clips from user-supplied scripts and stills. Overbroad authorization violates least privilege and, if the skill or its environment is compromised, grants access to unrelated high-value capabilities such as wallet spending, voice management, and broad task/artifact operations.

Content

No source excerpt is available for this finding.

Context-Inappropriate Capability

High
Category
Not specified by scanner
Confidence
91% confidence
Finding

The task and artifact read/write/cancel permissions go beyond the narrowly described workflow and may expose or alter unrelated user jobs and outputs if the shared credential is reused. In this codebase, the risk is amplified because the helper explicitly stores and reuses one shared Beatra credential across skills on the device.

Content

No source excerpt is available for this finding.

Context-Inappropriate Capability

High
Category
Not specified by scanner
Confidence
96% confidence
Finding

The task and artifact read/write/cancel permissions go beyond the narrowly described workflow and may expose or alter unrelated user jobs and outputs if the shared credential is reused. In this codebase, the risk is amplified because the helper explicitly stores and reuses one shared Beatra credential across skills on the device.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

High
Category
Not specified by scanner
Confidence
97% confidence
Finding

The client includes broad package lifecycle behavior—remote discovery, download, verification, extraction, rollback, locking, and installation management—that is unrelated to the advertised media-creation purpose. Even though there are integrity checks, this materially enlarges the trust boundary and gives the skill code the ability to alter its own installed bytes, which is dangerous in a user-facing creative skill.

Content

No source excerpt is available for this finding.

Context-Inappropriate Capability

High
Category
Not specified by scanner
Confidence
98% confidence
Finding

The remote self-update path allows the skill to download and replace installed package files, making the package self-modifying after deployment. For a narrowly scoped media skill, this capability is disproportionate and dangerous because compromise of the update channel, build pipeline, or release authority would directly yield code execution in future runs.

Content

No source excerpt is available for this finding.

Self-Modification

High
Category
Rogue Agent
Confidence
98% confidence
Finding

Exposing a self-update command confirms the package can modify its own installed code on demand. Self-modification is especially risky in an agent skill because it changes the executable trust surface after installation and can convert a benign media tool into a delivery mechanism for new behavior.

Content

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

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

Description-Behavior Mismatch

High
Category
Not specified by scanner
Confidence
98% confidence
Finding

The skill ships an uninstall flow that manages and may revoke a shared device credential and delete shared state in ~/.beatra, behavior that is unrelated to the advertised talking-clip/media-generation purpose. Even though the code tries to be conservative, it still has authority over cross-skill authentication state, so installing this skill grants it the ability to disrupt other skills and affect the user's broader account connection.

Content

No source excerpt is available for this finding.

Context-Inappropriate Capability

High
Category
Not specified by scanner
Confidence
96% confidence
Finding

The script defines and later removes multiple files under ~/.beatra, including shared installation and registration state, not just data owned by this one skill. Because that directory is described as shared by all installed skills, deleting these files can break unrelated skills and remove authentication/registration artifacts beyond the scope of this package.

Content

No source excerpt is available for this finding.

Credential Access

High
Category
Privilege Escalation
Confidence
91% confidence
Finding

Referencing credentials.json as part of removable shared state indicates the skill is designed to handle authentication material outside its declared function. Access to credential-bearing files increases risk because the skill can influence or destroy authentication state for the entire shared Beatra environment.

Content

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

python
#: these and then removes the directory only if it is empty — the script
#: never recursively deletes a directory it does not fully understand.
_STATE_FILES = (
    "credentials.json",
    "installation.json",
    "host.json",
    "skills.json",

Context-Inappropriate Capability

High
Category
Not specified by scanner
Confidence
98% confidence
Finding

This code performs a network revocation request using a bearer token read from local credentials, which gives the skill power to invalidate the device authorization. For a skill whose stated purpose is generating talking clips from images and scripts, account/device revocation is unnecessary privileged behavior and could be abused to deny service or forcibly disconnect the user.

Content

No source excerpt is available for this finding.

Credential Access

High
Category
Privilege Escalation
Confidence
95% confidence
Finding

The _device_token function reads an access token from credentials.json so the skill can use it in revocation operations. Reading bearer tokens inside a media-generation skill is excessive privilege and creates a direct path to account/session manipulation if the skill is modified, abused, or invoked unexpectedly.

Content

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

python
def _device_token(state_dir: Path) -> str | None:
    path = state_dir / "credentials.json"
    try:
        value = json.loads(path.read_text(encoding="utf-8"))
    except (OSError, ValueError):

Undeclared Tool Scope

Medium
Category
MCP Least Privilege
Confidence
92% confidence
Finding

The skill declares no explicit tool or permission scope even though its instructions clearly require shell execution, local file access, network access, and interaction with credentials and artifacts. Without a restrictive allowlist, a host agent may grant broader capabilities than users expect, increasing the risk of overreach or accidental misuse of sensitive local and remote resources.

Content

No source excerpt is available for this finding.

Context-Inappropriate Capability

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The skill documents an automatic self-update mechanism that can download, install, replace files, and roll back code independently of the user’s media-generation task. Even if signed and verified, self-updating code is a system-modifying behavior with substantial supply-chain risk and is unrelated enough to the stated task that users may not realize they are authorizing code changes on the host.

Content

No source excerpt is available for this finding.