Back to skill

Security audit

tiktok-shop-product-video-maker

Security checks across malware telemetry and agentic risk

Overview

The skill is mainly a TikTok product-video planning helper, but it also carries broad Beatra account authority, local credential handling, arbitrary remote tool calls, file upload, telemetry, and silent self-updates that are not well scoped to planning.

Review this carefully before installing. Use it only if you are comfortable granting a Beatra device token with broad account capabilities, allowing a local ~/.beatra credential store, and accepting default silent updates. Consider disabling automatic updates with the documented command and avoid using the generic call/upload commands unless you intentionally want remote Beatra tool access.

SkillSpector

By NVIDIA
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 (19)

Lp3

Medium
Category
MCP Least Privilege
Confidence
92% confidence
Finding
The skill declares itself as a simple content-planning package, but the documentation reveals capabilities consistent with code execution, filesystem access, networking, and local state changes. That combination is dangerous because users and host systems may grant trust based on the benign description while the bundled client can read/write local files, contact remote services, and modify the installation.

Tp4

High
Category
MCP Tool Poisoning
Confidence
98% confidence
Finding
This is a significant description-behavior mismatch: a marketing-copy skill also performs authentication, credential storage, remote tool invocation, file upload, telemetry/registration, uninstall-side state deletion, and self-update installation. Such hidden operational behavior expands the attack surface substantially and can mislead reviewers into approving a package that can reach external systems and alter local state far beyond its advertised purpose.

Description-Behavior Mismatch

High
Confidence
97% confidence
Finding
The documentation explicitly frames the package as planning-only and non-generative, yet it also instructs use of a bundled MCP client that self-registers and manages external connectivity. This inconsistency is dangerous because it conceals active behavior behind a passive-seeming skill, increasing the chance that users or platforms permit execution without understanding it will make networked changes and establish persisted integration state.

Context-Inappropriate Capability

High
Confidence
98% confidence
Finding
Automatic download and installation of new releases is unrelated to generating TikTok product-video plans and creates a software supply-chain risk. Even with claimed verification, silent code replacement without separate confirmation allows the package's behavior to change after approval, bypassing user expectations and complicating review, rollback, and incident response.

Context-Inappropriate Capability

Medium
Confidence
90% confidence
Finding
Automatic installation registration with an external service is not necessary for a local content-planning workflow and introduces privacy and trust concerns. It can create persistent remote linkage, metadata leakage, or future access pathways that users did not expect from a script-writing skill.

Intent-Code Divergence

Medium
Confidence
89% confidence
Finding
Claiming the package is 'non-billable planning' and creates no generation task can reassure users that it is passive, but the later sections describe network registration and automatic update installation. That mismatch is risky because it understates the operational impact and may cause users to overlook credential, connectivity, and software-modification behaviors that deserve separate consent.

Description-Behavior Mismatch

High
Confidence
98% confidence
Finding
The authorization flow requests a very broad OAuth scope set, including image/video/music/speech generation, voice access, artifact and task operations, and wallet spending, while the skill description only justifies creating product-video plans. This violates least privilege and materially increases blast radius: if the token is misused or the skill is compromised, it could spend funds and access unrelated capabilities far beyond the advertised function.

Context-Inappropriate Capability

Medium
Confidence
87% confidence
Finding
The code fingerprints the host environment by inferring agent platform from environment variables and captures the device hostname, then persists that metadata locally and submits platform and device_name during authorization. For a skill whose stated purpose is product-video planning, this collection is not obviously necessary and creates unnecessary host-identifying telemetry that could expose user environment details or aid profiling.

Description-Behavior Mismatch

High
Confidence
93% confidence
Finding
The script exposes a general-purpose MCP client that can list tools, call arbitrary remote tools from stdin-provided JSON, upload local files, and silently auto-update itself. That capability is materially broader than the advertised TikTok product-video planning function, creating a large trust boundary where a creative skill can become a generic remote-control conduit for whatever the backend offers.

Context-Inappropriate Capability

Medium
Confidence
87% confidence
Finding
The code fingerprints the host environment using environment variables and a persisted host.json, then attaches that platform information to outbound tool calls and registration telemetry. For a product-video planning skill, this collection is not functionally necessary and increases privacy and tracking risk by revealing execution context to the remote service.

Context-Inappropriate Capability

Medium
Confidence
91% confidence
Finding
The skill maintains a local skills inventory and performs installation registration telemetry unrelated to generating video plans. This creates persistence and outbound metadata flow beyond the stated purpose, which is especially concerning because it runs best-effort on normal use rather than during a clearly disclosed setup step.

Description-Behavior Mismatch

Medium
Confidence
91% confidence
Finding
The uninstall script manages a shared Beatra device credential and decides when to revoke it, which is functionality outside the advertised TikTok product-video planning purpose. Even if intended for lifecycle management, this gives the skill package authority over shared authentication state, so installing or uninstalling this skill can affect other skills and trigger network-side credential changes.

Context-Inappropriate Capability

Medium
Confidence
94% confidence
Finding
This code performs an authenticated POST to a device revocation endpoint using a bearer token read from local state. In the context of a video-making skill, embedded authorization-revocation capability is over-privileged and dangerous because compromise or misuse of the skill package could disconnect the user's shared Beatra device authorization.

Missing User Warnings

Medium
Confidence
95% confidence
Finding
The skill states that newer releases install automatically without separate confirmation, but this is not surfaced as a prominent warning in the skill description. Silent self-update is dangerous because it permits post-installation behavior drift and code execution changes outside the user's immediate awareness, undermining trust and static review assumptions.

Missing User Warnings

Medium
Confidence
92% confidence
Finding
The document states that the client performs silent network checks and automatically installs newer releases by default before ordinary commands, without explicit upfront consent for background network activity and file replacement. Even though the text describes integrity checks and rollback protections, default silent self-update behavior can violate user expectations, create change-management risk, and introduce security exposure if the trusted update channel is ever compromised.

Missing User Warnings

Medium
Confidence
92% confidence
Finding
The client performs silent automatic self-updates that modify files under the local installation root during normal execution. Even though the code includes integrity checks, the behavior is risky for a creative skill because it allows substantial code changes to arrive and be staged without an immediate user-facing warning or review, expanding the blast radius of any server-side compromise or publisher account abuse.

Credential Access

High
Category
Privilege Escalation
Content
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"
            _atomic_json(
                credential_path,
                {
Confidence
78% confidence
Finding
This code persists a bearer access token in plaintext JSON on disk under ~/.beatra/credentials.json. Although it attempts restrictive file permissions, a stolen local account session, backup leak, malware, or weak Windows profile protections could expose a token that carries the overly broad scopes requested by the skill, including wallet spending and unrelated generation capabilities.

Credential Access

High
Category
Privilege Escalation
Content
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):
Confidence
90% confidence
Finding
The function reads ~/.beatra/credentials.json and extracts an access token for subsequent authenticated revocation. Reading live bearer tokens from shared local state inside a skill package is sensitive credential access; if this skill were modified or abused, the same path could be used to misuse or exfiltrate shared credentials.

Self-Modification

High
Category
Rogue Agent
Content
)
    update = subparsers.add_parser(
        "update",
        help="Check, install, or configure Beatra package self-updates",
    )
    update.add_argument(
        "--check",
Confidence
94% confidence
Finding
The presence of built-in self-update/self-modification means the skill can replace its own local code after installation. In the context of a narrowly described product-video maker, this is unnecessarily powerful and dangerous because future behavior can materially change without the user re-reviewing the package, making any upstream compromise or abuse much more impactful.

VirusTotal

VirusTotal findings are pending for this skill version.

View on VirusTotal

Static analysis

No suspicious patterns detected.