Back to skill

Security audit

rednote-cover-maker

Security checks for vulnerabilities and agentic risk

Overview

This cover-making skill is not clearly malicious, but it uses a broad shared Beatra account token and silently updates its own installed files, so users should review it before installing.

Review the Beatra authorization carefully before installing. This skill uploads selected images to Beatra, stores a shared Beatra token under ~/.beatra, can spend Beatra credits for approved generation calls, registers installation metadata, and silently updates its own package by default. Consider disabling auto-updates with `python3 scripts/mcp_client.py update --auto off` and revoke the device from the Beatra Console if you no longer want the shared token active.

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 an image-cover generator, but its instructions require capabilities far beyond that scope: shell execution, network access, file read/write, environment access, and remote tool orchestration. Undeclared high-risk capabilities reduce user visibility and create a larger attack surface, especially because the skill can invoke a bundled client that handles authentication, uploads, and local state.

Tp4

High
Category
MCP Tool Poisoning
Confidence
97% confidence
Finding
The stated purpose is simple image generation, but the skill also performs OAuth authorization, credential storage, local file upload, telemetry/registration, uninstall/revocation flows, and update/install logic. This mismatch is dangerous because users and reviewers may consent to a creative tool without realizing it can modify local installation state, store secrets, and communicate broadly with external services.

Description-Behavior Mismatch

Medium
Confidence
95% confidence
Finding
The skill includes automatic self-update behavior that downloads and replaces installed package files, yet this capability is not part of the core image-generation purpose described to the user. Even with integrity checks, self-modifying installation behavior increases supply-chain and persistence risk because the skill can change its own code after initial review.

Context-Inappropriate Capability

High
Confidence
96% confidence
Finding
Automatic package download and replacement is not necessary for generating REDnote covers, so it represents excess capability unrelated to the business function. Unnecessary code-fetching and self-replacement materially increase risk of supply-chain compromise, post-install behavior drift, and evasion of the original security review context.

Description-Behavior Mismatch

High
Confidence
99% confidence
Finding
The requested OAuth scope set is dramatically overbroad for a REDnote cover/image-generation skill: beyond image generation it asks for videos, music, speech, voice management, artifact/task control, and wallet spending. If granted, compromise or misuse of this skill or its stored token could enable actions far outside the advertised purpose, violating least privilege and increasing blast radius.

Context-Inappropriate Capability

Medium
Confidence
92% confidence
Finding
The script fingerprints the host environment by detecting agent platform, hostname/device name, and install path, then persists this inventory locally. For a cover-maker skill, this data collection is not clearly necessary for core functionality and creates unnecessary privacy and environment-mapping risk if the local state is exposed or later reused by other components.

Description-Behavior Mismatch

High
Confidence
95% confidence
Finding
The client contains extensive package discovery, download, validation, rollback, and replacement logic that is unrelated to generating REDnote covers. Even with some integrity checks, embedding a self-updater in a creative skill materially expands the attack surface and allows remote modification of local installation files, which is especially risky because updates may run automatically before normal commands.

Description-Behavior Mismatch

Medium
Confidence
93% confidence
Finding
The skill records local inventory in ~/.beatra/skills.json and sends installation registration telemetry to a remote service, behavior not necessary for image-cover generation and not obvious from the skill purpose. Undisclosed local inventorying and outbound telemetry increase privacy risk and create unnecessary data collection about the user's environment and installed skill usage.

Context-Inappropriate Capability

Medium
Confidence
91% confidence
Finding
The code fingerprints the host environment using environment variables and host.json to classify the platform (for example, claude-code or codex). For a cover-maker skill, this is unnecessary and increases privacy sensitivity because it identifies the agent/runtime context and can support tracking, segmentation, or targeted behavior.

Description-Behavior Mismatch

Medium
Confidence
95% confidence
Finding
The uninstall script explicitly manages a shared Beatra device credential and makes revocation decisions for all installed skills, which is outside the advertised scope of an image-cover generation skill. Even if framed as cleanup logic, bundling cross-skill credential lifecycle control into a content-creation skill creates unnecessary authority and increases the blast radius if the skill is abused or the uninstall flow is triggered unexpectedly.

Context-Inappropriate Capability

Medium
Confidence
97% confidence
Finding
This code can contact the Beatra authorization service with a bearer token to revoke a shared device authorization and then remove local state under ~/.beatra, affecting other skills on the device. For a cover-image generator, that capability is not justified by functional needs and could be abused to cause denial of service or disrupt unrelated installed skills.

Missing User Warnings

Medium
Confidence
94% confidence
Finding
The skill states that it silently checks for and automatically installs newer packages during normal command execution without separate confirmation. Silent update behavior is risky because users may unknowingly run changed code with new permissions or logic, undermining informed consent and making review-time assurances stale.

Missing User Warnings

Medium
Confidence
84% confidence
Finding
The document describes a default-silent auto-update mechanism that installs and replaces package files without separate confirmation. Even with integrity checks and rollback protections, silently performing system-modifying actions can violate user expectations, reduce informed consent, and increase the blast radius if the update trust chain or discovery endpoint is ever compromised.

Missing User Warnings

Low
Confidence
87% confidence
Finding
The document states that the client automatically performs a network registration on first use and sends package slug, version, platform, and a stable external installation reference, but it does not mention clear user notice or consent. Even if the data is described as non-secret and non-billable, silent telemetry-like collection can expose install metadata and enable correlation of activity across environments, which is a privacy and transparency concern.

Missing User Warnings

Low
Confidence
81% confidence
Finding
The helper silently writes host metadata to host.json without any user-facing notice, even though that metadata may include platform identification and device name. While this is not direct code execution or credential theft, undisclosed persistence of environment metadata is a privacy and transparency issue, especially in a skill whose stated purpose is image generation.

Missing User Warnings

Medium
Confidence
94% confidence
Finding
maybe_auto_update() performs silent best-effort updates during ordinary command execution, modifying installation files without user-facing confirmation at execution time. Silent code replacement creates supply-chain and trust risks because users invoking a cover-making skill would not reasonably expect the tool to rewrite itself before handling their request.

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
88% confidence
Finding
Referencing credentials.json as part of the state files handled by the skill indicates this package is designed to manage sensitive authentication material belonging to a shared device connection. In the context of a media-generation skill, access to shared credentials is excessive privilege and expands the risk of credential misuse or accidental destructive actions.

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
96% confidence
Finding
The _device_token function reads an access token from ~/.beatra/credentials.json so the skill can authenticate a revocation request. This is direct credential access unrelated to the skill’s advertised purpose, and if repurposed or modified it could enable unauthorized API actions beyond uninstall, especially because the token is for a shared device authorization.

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 exposed update command enables the skill to modify its own installed code, a powerful capability unrelated to making REDnote covers. Self-modifying behavior is inherently risky in agent ecosystems because compromise of the update channel, server-side controls, or operator trust can turn a content-generation skill into a remote code delivery mechanism.

Static analysis

No suspicious patterns detected.