Back to skill

Security audit

MiniMax H3 AI Video Creator

Security checks for vulnerabilities and agentic risk

Overview

This appears to be a legitimate Beatra AI video skill, but it needs Review because it stores a broad account token, can make billable remote calls through a generic client, and silently self-updates by default.

Install only if you are comfortable connecting a Beatra account, storing a broad bearer token in ~/.beatra, uploading selected media to Beatra, and allowing billable video-generation calls through the bundled client. Consider disabling automatic updates with python3 scripts/mcp_client.py update --auto off, watch for the required cost/admission card before any paid generation, and revoke the device from the Beatra Console if the credential may be exposed or you no longer use the skill.

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:2299
Finding

Billable MCP operations can bypass the documented user-confirmation gate

Content
View full analysis

Vulnerability Details

File Location: scripts/mcp_client.py:2299-2316, 2383, 2471-2476
Vulnerability Type: Missing authorization enforcement for billable tool calls
Risk Level: Medium

Relevant security requirement: SKILL.md:102-118

Complete Code Snippet

python
def _run_command(
    command: str,
    tool_name: str | None = None,
    arguments: dict[str, Any] | None = None,
) -> dict[str, Any]:
    session = _session_with_registration(
        state_dir=Path.home() / ".beatra",
        post_json=_default_post_json,
    )
    if command == "tools":
        return session.request(2, "tools/list", {})
    if arguments is None:
        arguments = _read_tool_arguments()
    assert tool_name is not None
    return session.request(
        2,
        "tools/call",
        {"name": tool_name, "arguments": arguments},
    )
python
call = subparsers.add_parser("call", help="Call one tool with a JSON object on stdin")
call.add_argument("tool_name")
python
elif args.command in {"tools", "call"}:
    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 documented gate states:

text
Planning or “make the video” is not approval. Do not create
`client_request_id` or submit until the user confirms they have topped up or
already have enough credits for this estimate.

Technical Analysis

The generic call command accepts an arbitrary MCP tool name from the command line and an arbitrary argument object from standard input. _run_command then forwards both directly through an authenticated MCP session.

The credential scope declared by the authorization helper includes video-generation and wallet:spend capabilities. The client does not distinguish read-only tools from billable tools and does not enforce the workflow’s required admissio ...[truncated 2097 chars]

Remediation
View remediation

Remediation Suggestions

  1. Add a strict tool allowlist and classify each supported tool as read-only, upload, non-billable, or billable.
  2. Reject billable tools/call requests unless they carry a locally verifiable, single-use approval record.
  3. Bind that record to the exact MCP tool name and a canonical hash of all arguments, including the prompt, ordered inputs, model, duration, resolution, aspect ratio, watermark choice, live estimate, and client_request_id.
  4. Create the approval record only after presenting the admission card and receiving explicit confirmation from the user.
  5. Expire the record promptly and mark it consumed atomically after one accepted submission.
  6. Require fresh approval whenever any request field changes.
  7. Preserve the documented idempotent retry behavior by permitting retries only for byte-equivalent arguments with the same frozen client_request_id.
  8. Keep read-only account, model-discovery, task-lookup, and planning operations outside the paid-operation gate, while validating them against an explicit allowlist.
  9. Add tests proving that direct CLI invocation of every billable tool fails without a matching approval record and succeeds only once with a valid record.
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
  • Rogue AgentSelf-Modification, Session Persistence
  • MCP Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
Findings (32)

Tp4

High
Category
MCP Tool Poisoning
Confidence
99% confidence
Finding

The skill's advertised role is content creation, but it also appears able to inspect shared installation state, read credentials, revoke tokens, uninstall packages, and delete local state files. Those account and system-management actions are security-sensitive and, if triggered unexpectedly or abused, could disrupt user access or remove data/configuration without clear user understanding.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
97% confidence
Finding

The skill's advertised role is content creation, but it also appears able to inspect shared installation state, read credentials, revoke tokens, uninstall packages, and delete local state files. Those account and system-management actions are security-sensitive and, if triggered unexpectedly or abused, could disrupt user access or remove data/configuration without clear user understanding.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
99% confidence
Finding

The skill's advertised role is content creation, but it also appears able to inspect shared installation state, read credentials, revoke tokens, uninstall packages, and delete local state files. Those account and system-management actions are security-sensitive and, if triggered unexpectedly or abused, could disrupt user access or remove data/configuration without clear user understanding.

Content

No source excerpt is available for this finding.

Credential Access

High
Category
Privilege Escalation
Confidence
93% confidence
Finding

The manifest points the skill at a local credential file (~/.beatra/credentials.json), confirming that the skill depends on access to bearer-style authentication material stored on disk. Even if this is part of the normal platform design, exposing direct credential-file usage increases the risk of credential misuse, unintended token exposure, or abuse by a compromised or overly permissive skill integration.

Content

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

json
},
  "mcp": {
    "authentication": "device-bearer",
    "credential_file": "~/.beatra/credentials.json",
    "name": "beatra",
    "transport": "streamable-http",
    "url": "https://mcp.beatra.ai/mcp"

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/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

Credential Access

High
Category
Privilege Escalation
Confidence
92% confidence
Finding

The script persists a long-lived Bearer access token in plaintext JSON under ~/.beatra/credentials.json, protected only by filesystem permissions. If the local account, home directory, backups, logs, or endpoint tooling are compromised, an attacker can reuse the token to access broad Beatra scopes including artifacts, media generation, task control, and wallet spending without re-authentication.

Content

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

python
scope = _required_string(polled, "scope")
    if set(scope.split()) != set(SCOPE.split()):
        raise RuntimeError("Beatra authorization returned an unsupported scope")
    credential_path = state_dir / "credentials.json"
    with _SIGNALS.deferred():
        _atomic_json(
            credential_path,

Self-Modification

High
Category
Rogue Agent
Confidence
96% confidence
Finding

The exposed self-update command allows the package to modify its own installed code, a powerful capability unrelated to the core advertised media-generation task. Even though the implementation has several safety checks, self-modification materially raises the impact of any upstream compromise and is dangerous in an agent skill because it changes future behavior on the endpoint.

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

The skill documentation describes capabilities that require shell, network, file read/write, and likely environment access, but it does not declare an explicit tool scope such as allowed-tools or permissions. That creates an overprivilege and transparency problem: a user or platform reviewer cannot easily constrain what the skill may invoke, increasing the blast radius if the bundled client or update path is abused.

Content

No source excerpt is available for this finding.

Session Persistence

Medium
Category
Rogue Agent
Confidence
60% confidence
Finding

Skill establishes unauthorized persistence across sessions via cron jobs, startup scripts, or state files. Session persistence allows an attacker to maintain access beyond the current interaction.

Content

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

json
"icon": "https://beatra.ai/textures/icons/minimax-h3-ai-video-0.1.0.png",
  "localized": {
    "en": {
      "description": "Create polished 2K AI videos with MiniMax H3. Turn a written idea into text-to-video, animate an image, shape a transition between opening and closing frames, or guide a scene with image, video, and audio references. Make AI advertising videos, ecommerce product videos, brand films, dynamic posters, game UI motion, film titles, and social media clips with cinematic movement and native stereo sound. Start with your Beatra account and keep creative progress and finished videos organized in one place.",
      "display_name": "MiniMax H3 AI Video Creator",
      "summary": "Turn ideas, images, opening and closing frames, or multimodal references into polished 2K AI videos for ads, ecommerce, brands, dynamic posters, games, film titles, and social content.",
      "tags": [

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
90% confidence
Finding

The manifest explicitly declares both a local credential file and a remote MCP endpoint, but the user-facing metadata does not warn that the skill will access local stored credentials and transmit authenticated requests over the network. This creates a real transparency and consent problem: users may invoke the skill believing it is only a local creative helper, while it actually relies on persisted account credentials and remote service access.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

The document states that the client silently checks for and automatically installs newer versions by default without separate confirmation. Even with integrity and origin checks described later, silent self-update changes executable/package files on the user's system without explicit approval at update time, increasing supply-chain and change-management risk if the update channel or signing process is ever compromised.

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

Description-Behavior Mismatch

Medium
Category
Not specified by scanner
Confidence
93% confidence
Finding

The documentation states that the skill performs an installation-registration call that reports package, platform, network route, install source, and runtime metadata, even though the advertised purpose is AI video generation. This is a privacy-relevant telemetry behavior unrelated to the core function, and the mismatch increases risk because users may not reasonably expect environment and network metadata to be transmitted by a creative media skill.

Content

No source excerpt is available for this finding.

Context-Inappropriate Capability

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The skill documentation explicitly describes collection and reporting of installation source, network route, OS/version, architecture, Python version, locale, and time-zone data. Even if no direct identifiers are sent, this metadata can support device fingerprinting, usage tracking, and environmental profiling, which is disproportionate to the stated video-generation purpose and therefore creates a genuine privacy and data-minimization issue.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

Medium
Category
Not specified by scanner
Confidence
97% confidence
Finding

The client can download, verify, and apply package updates by rewriting its own installed files, which exceeds the declared video-generation purpose and materially expands the trust boundary. Even with integrity checks, any compromise of the vendor update channel, signing/discovery pipeline, or package ownership model would let remote content modify local code on the user's machine.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

maybe_auto_update() performs silent background updates that can replace installed package files without interactive notice or confirmation. In a skill whose stated purpose is video creation, silently mutating local executable code is especially risky because users and host agents may not expect code changes during ordinary tool invocation.

Content

No source excerpt is available for this finding.

Context-Inappropriate Capability

Medium
Category
Not specified by scanner
Confidence
88% confidence
Finding

The code infers host platform from environment variables and uses local state to fingerprint the agent environment, which is unrelated to the advertised video-creation function. In context, this adds hidden environment profiling and supports cross-tool/device inventorying, increasing privacy risk and enabling unnecessary attribution of user activity.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.