Back to skill

Security audit

douyin-cover-maker

Security checks across malware telemetry and agentic risk

Overview

This cover-making skill is not clearly malicious, but it asks for broad Beatra account permissions and silently updates its own files by default, so it belongs in Review before installation.

Review this skill carefully before installing. It is designed to create paid Douyin covers through Beatra, but one approval grants broad Beatra capabilities and stores a shared bearer token in ~/.beatra. Disable automatic updates with `python3 scripts/mcp_client.py update --auto off` if you do not want the package to replace its own files silently, and only use it where broad Beatra account access and installation telemetry are acceptable.

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
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
Findings (23)

Lp3

Medium
Category
MCP Least Privilege
Confidence
93% confidence
Finding
The skill declares no permissions while instructing use of a bundled Python client that performs network access, file reads/writes, shell execution, and likely environment access. This creates a transparency and consent problem: a user invoking an image-cover skill would not reasonably expect undisclosed local code execution and system interaction.

Tp4

High
Category
MCP Tool Poisoning
Confidence
96% confidence
Finding
The documented purpose is a narrow content-creation workflow, but the actual behavior includes authentication flows, persistent credential storage, local uploads, generic remote tool invocation, telemetry/registration, self-update, and uninstall/token revocation. That mismatch is dangerous because it materially expands trust boundaries and attack surface beyond what the user is told, increasing the chance of over-privileged execution and silent data exposure.

Context-Inappropriate Capability

Medium
Confidence
95% confidence
Finding
The skill includes automatic self-update and installation behavior during normal command execution, which is unrelated to the core task of generating a Douyin cover. Any mechanism that downloads and replaces local package files expands the supply-chain risk surface and can change code on disk without a task-specific security review at the time of use.

Description-Behavior Mismatch

Medium
Confidence
95% confidence
Finding
The documentation states that one approval grants access to image, video, music, speech, upload, model, and task tools, which is broader than the advertised Douyin cover-maker purpose. This violates least privilege and suggests the skill can access or invoke capabilities unrelated to cover generation, increasing the blast radius if the skill is abused or compromised.

Description-Behavior Mismatch

Medium
Confidence
90% confidence
Finding
The bundled MCP client is documented as a generic remote tool execution interface using tools/list and tools/call rather than a narrowly constrained cover-maker workflow. In the context of a single-purpose media skill, exposing a general RPC-style client increases the chance of unintended tool use, privilege expansion, or repurposing the skill as a generic remote agent.

Context-Inappropriate Capability

Medium
Confidence
96% confidence
Finding
Granting authorization for speech, music, upload, model, and generic task tools is not justified by the stated purpose of creating Douyin covers. Unnecessary capability grants expand access beyond user expectations and can enable secondary actions such as content upload or unrelated generation workflows if misused.

Description-Behavior Mismatch

High
Confidence
98% confidence
Finding
The authorization flow requests a very broad OAuth scope set, including artifacts, images, videos, music, speech, voices, wallet spending, and task control, which materially exceeds the stated purpose of a Douyin cover maker. Excessive privileges violate least-privilege design and create unnecessary blast radius if the skill, account, or token is abused or compromised.

Context-Inappropriate Capability

Critical
Confidence
93% confidence
Finding
The requested tasks:read and tasks:cancel permissions are not obviously required for a cover-maker skill and may allow the skill to inspect or interfere with other queued or running operations under the same account. While less severe than spending permissions, they still create unnecessary cross-workflow access and increase the consequences of token misuse.

Context-Inappropriate Capability

High
Confidence
93% confidence
Finding
The requested tasks:read and tasks:cancel permissions are not obviously required for a cover-maker skill and may allow the skill to inspect or interfere with other queued or running operations under the same account. While less severe than spending permissions, they still create unnecessary cross-workflow access and increase the consequences of token misuse.

Context-Inappropriate Capability

Medium
Confidence
93% confidence
Finding
The requested tasks:read and tasks:cancel permissions are not obviously required for a cover-maker skill and may allow the skill to inspect or interfere with other queued or running operations under the same account. While less severe than spending permissions, they still create unnecessary cross-workflow access and increase the consequences of token misuse.

Description-Behavior Mismatch

High
Confidence
95% confidence
Finding
The file implements a full self-update system that downloads manifests and archives from remote infrastructure and replaces installed package files on disk. Even with checksum and path validations, this gives a cover-generation skill a broad code-modification capability unrelated to its stated purpose, substantially increasing supply-chain and remote-code-change risk if the vendor infrastructure, release process, or signing path is compromised.

Description-Behavior Mismatch

Medium
Confidence
92% confidence
Finding
The code records a persistent local skills inventory and performs installation registration telemetry, including package version, platform, and installation reference, none of which is needed to generate Douyin covers. This expands local tracking and outbound metadata collection beyond the declared skill purpose, creating unnecessary privacy and surveillance surface.

Context-Inappropriate Capability

Medium
Confidence
90% confidence
Finding
The skill fingerprints the host agent environment by inspecting environment variables and host files, then reports that platform identity in requests and registration telemetry. For a cover-making skill, this capability is unrelated to the business function and increases privacy risk while enabling environment profiling that could support targeted behavior or conditional payloads.

Description-Behavior Mismatch

Medium
Confidence
93% confidence
Finding
The uninstall script handles shared device authorization and can trigger remote revocation of a Beatra credential, which is unrelated to the advertised purpose of generating Douyin covers. Even if intended for cleanup, this gives the skill authority over authentication state and shared local files, expanding the trust boundary beyond what users would reasonably expect from this skill.

Context-Inappropriate Capability

Medium
Confidence
95% confidence
Finding
This code makes a network request to revoke authorization and reads local credential/state material from ~/.beatra, capabilities that are not justified by the manifest's image-generation use case. In a skill context, access to bearer tokens and account-level state is sensitive because compromise, repurposing, or abuse of the script could disconnect the device or interfere with other installed skills.

Missing User Warnings

Medium
Confidence
91% confidence
Finding
The skill states that newer versions may be installed automatically without separate confirmation, but this system-changing behavior is not prominently disclosed in the primary skill description. Silent modification of local software undermines informed consent and makes it easier for users to trigger code changes they did not knowingly authorize.

Missing User Warnings

Medium
Confidence
94% confidence
Finding
The document states that the client silently checks for updates and installs newer releases automatically by default, without separate confirmation. Even with integrity checks and rollback protections, automatic code replacement changes the local installation without an explicit user decision at update time, increasing supply-chain and unexpected-behavior risk if the update channel is ever compromised or if users are unaware of this behavior.

Missing User Warnings

Medium
Confidence
84% confidence
Finding
The document describes an automatic network registration on first use that sends package slug, version, platform, and a stable external installation reference, but it does not mention clear user notice or consent before transmission. Even if the data is described as non-secret and non-billable, it is still install-level telemetry and can enable tracking or inventorying of user environments without an explicit warning.

Missing User Warnings

Medium
Confidence
94% confidence
Finding
maybe_auto_update() performs silent best-effort updates before normal commands, modifying installed code without a user-facing prompt at the time of execution. In a skill whose purpose is media cover generation, hidden code replacement undermines user expectations and makes future behavior mutable in ways that are hard to audit or consent to.

Missing User Warnings

Medium
Confidence
91% confidence
Finding
register_installation() sends package slug, version, platform, and external installation reference to a remote endpoint as telemetry during normal operation, and this file does not present a user-facing disclosure or consent step. For a creative skill, covert metadata transmission is not justified by core functionality and creates avoidable privacy risk.

Credential Access

High
Category
Privilege Escalation
Content
#: 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",
Confidence
89% confidence
Finding
The script is explicitly designed to manipulate files including credentials.json inside a shared state directory. Although it appears to use the credential for revocation rather than exfiltration, any skill-level code that touches shared credentials increases risk because it normalizes secret access in a package whose stated purpose does not require it.

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
94% confidence
Finding
The _device_token function reads an access token from credentials.json and passes it to revocation logic, meaning the skill has direct bearer-token access. Even without obvious exfiltration, this is dangerous because any modification, dependency abuse, or packaging compromise could turn that token access into account disruption or credential theft, and the skill context provides no legitimate need for such access.

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
96% confidence
Finding
The command surface explicitly exposes self-update behavior that can replace the installed package's own files. Self-modification is especially dangerous here because it is unrelated to cover creation and gives a remotely connected skill the ability to change future code execution behavior, magnifying the consequences of release-pipeline compromise or mistaken updates.

VirusTotal

VirusTotal findings are pending for this skill version.

View on VirusTotal

Static analysis

No suspicious patterns detected.