Back to skill

Security audit

youtube-caption-studio

Security checks for vulnerabilities and agentic risk

Overview

The skill does the advertised caption-to-Chinese-script work, but it also asks for broad Beatra account authority and silently updates its own package by default.

Review this before installing if you only want a simple caption helper. It can work from a pasted transcript without paid lookup, but using the Beatra connection grants a broad shared device token and allows default automatic package updates; consider disabling automatic updates with `python3 scripts/mcp_client.py update --auto off` and revoke the device from the Beatra Console if you no longer trust or need it.

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 (20)

Lp3

Medium
Category
MCP Least Privilege
Confidence
95% confidence
Finding
The skill declares a narrow caption-processing purpose, yet its documented execution path includes shell, network, file read/write, environment access, and a bundled client that can invoke remote tools. This expands the trust boundary far beyond what a user would expect and creates a real risk of data access, credential handling, and remote side effects without explicit permission scoping.

Tp4

High
Category
MCP Tool Poisoning
Confidence
98% confidence
Finding
The documented behavior materially exceeds the stated purpose: OAuth authorization, persistent credential storage, arbitrary Beatra tool access, uploads, telemetry/registration, self-update, and uninstall/token management are all sensitive capabilities unrelated to simply turning transcripts into Chinese scripts. This mismatch can mislead users into granting access they would not otherwise approve and hides a much larger attack surface.

Description-Behavior Mismatch

Medium
Confidence
93% confidence
Finding
The skill documents silent automatic updates that download and replace local package files during normal use. Even with stated integrity checks, this is a supply-chain and execution-surface risk because a content-processing skill gains the power to change its own code without per-update user approval.

Context-Inappropriate Capability

Medium
Confidence
94% confidence
Finding
Automatic remote download and local file replacement are powerful capabilities not justified by the skill's caption-remake function. If the update channel, signing process, or package ownership boundaries are ever bypassed, the mechanism could deliver arbitrary code or alter future behavior persistently.

Description-Behavior Mismatch

Medium
Confidence
95% confidence
Finding
The document describes an automatic self-update mechanism that silently checks for and installs new code before normal commands, which is outside the stated purpose of a YouTube transcript/caption transformation skill. Even with integrity checks and fixed endpoints, introducing autonomous code replacement materially expands the trust boundary and attack surface, enabling unexpected system modification unrelated to the user’s requested task.

Context-Inappropriate Capability

Medium
Confidence
96% confidence
Finding
A silent network-based updater causes the skill client to contact remote infrastructure and potentially install new code without a separate user action, which is not justified by a caption/transcript processing workflow. This creates supply-chain and remote-change risk because future behavior can change independently of the reviewed version, and users may be unaware that file-system modifications are happening.

Description-Behavior Mismatch

High
Confidence
99% confidence
Finding
The OAuth scope set is far broader than the skill’s stated purpose of processing YouTube captions/transcripts. Requesting artifacts, image/video/music/speech generation, voice management, task control, and wallet-related access violates least privilege and materially increases blast radius if the credential is misused or the backend is compromised.

Context-Inappropriate Capability

Critical
Confidence
99% confidence
Finding
The requested capabilities include image/video/music/speech generation and voice read/write permissions, which are unrelated to a transcript rewriting/remake skill. This over-privileged token could be repurposed to perform unauthorized media generation or voice operations if stolen, misconfigured, or abused by the service.

Context-Inappropriate Capability

High
Confidence
99% confidence
Finding
The requested capabilities include image/video/music/speech generation and voice read/write permissions, which are unrelated to a transcript rewriting/remake skill. This over-privileged token could be repurposed to perform unauthorized media generation or voice operations if stolen, misconfigured, or abused by the service.

Description-Behavior Mismatch

High
Confidence
96% confidence
Finding
This file embeds a full self-update system that downloads manifests and archives, validates them, and overwrites the local installation. Even with integrity checks, self-modifying behavior is outside the stated YouTube caption/transcript purpose and materially increases the trust boundary: compromise of the vendor update channel, signing pipeline, or distribution account would let remote content change local code on the user's machine.

Context-Inappropriate Capability

Medium
Confidence
93% confidence
Finding
The code persistently records local skill inventory and sends installation registration telemetry unrelated to caption generation. This creates unnecessary collection and retention of local environment metadata, which expands privacy risk and can expose installed tools, paths, and usage patterns if the backend or local state is accessed by an attacker.

Context-Inappropriate Capability

Medium
Confidence
91% confidence
Finding
The client fingerprints its host by inspecting environment variables and host.json to identify the surrounding agent platform, despite that data not being needed for transcript or caption processing. In context, this broadens device and platform profiling and can support tracking, environment enumeration, or selective behavior based on runtime host characteristics.

Intent-Code Divergence

Low
Confidence
84% confidence
Finding
The code labels registration as best-effort telemetry but also writes a persistent local skill inventory on every use, which is more invasive than the docstring suggests. This mismatch undermines transparency and can conceal ongoing tracking behavior from users or reviewers, especially in a skill whose declared purpose is unrelated to system inventory.

Description-Behavior Mismatch

Medium
Confidence
95% confidence
Finding
The uninstall script manages shared Beatra device state and remote authorization, which is outside the narrowly stated YouTube caption/transcript functionality of the skill. Even if framed as package cleanup, it gives this skill lifecycle code authority over shared credentials and other installed skills, creating unnecessary trust and blast radius if the script is invoked by an agent automatically.

Context-Inappropriate Capability

Medium
Confidence
97% confidence
Finding
This code reads a shared OAuth access token from ~/.beatra/credentials.json and can send it to a remote revocation endpoint, a powerful capability unrelated to caption rewriting. In a skill context, this is dangerous because package-supplied code can affect platform-wide authentication state and potentially disrupt all skills using the same device authorization.

Missing User Warnings

Medium
Confidence
92% confidence
Finding
The markdown states that silent automatic updates are enabled by default and do not interrupt the user, but it does not present a strong upfront warning that local files may be replaced automatically. This undermines informed consent and makes risky system-changing behavior easy to miss, especially in a skill whose advertised purpose is only content transformation.

Missing User Warnings

Low
Confidence
87% confidence
Finding
The document describes an automatic first-use network registration call and a local cache write, but it does not explicitly warn users that these actions occur automatically. Even though the call is described as non-billable and non-secret, silent outbound communication and local persistence can create privacy, transparency, and consent issues, especially in restricted or compliance-sensitive environments.

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
90% confidence
Finding
The script explicitly identifies credentials.json as part of the state it may remove, indicating awareness of and control over shared credential material. For a skill unrelated to authentication, direct access to credential storage materially increases the risk of credential misuse, denial of service, or unintended impact on other installed skills.

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
98% confidence
Finding
The _device_token function reads and parses ~/.beatra/credentials.json to extract an access token, which is direct credential access. In the context of a YouTube caption/transcript skill, this is unjustified sensitive capability and creates a path for token abuse, interception by modified code, or unauthorized platform-wide actions.

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
95% confidence
Finding
Exposing self-update capability as a normal CLI feature confirms that the skill can modify its own installed code locally. In a caption/transcript tool, that capability is not functionally necessary and substantially increases the blast radius of any backend, manifest, or supply-chain compromise because the package can replace files on disk.

Static analysis

No suspicious patterns detected.