Back to skill

Security audit

AI Character Design Sheet & Consistency Studio

Security checks across malware telemetry and agentic risk

Overview

The skill performs the advertised character-image workflow, but it also requests broad shared Beatra authority and silently self-updates package code by default.

Review before installing. This is not evidence of theft or destruction, but installation means trusting a shared Beatra device token with broad media and spending scopes, a generic remote MCP client, and automatic package updates. Disable automatic updates if you require per-update approval, and install only if you are comfortable with Beatra managing shared credentials and lifecycle state under ~/.beatra.

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

Lp3

Medium
Category
MCP Least Privilege
Confidence
94% confidence
Finding
The skill declares no permissions while explicitly instructing use of a bundled Python client that performs shell execution, file access, network calls, credential storage, and package modification. This creates a transparency and least-privilege problem: users and hosts cannot accurately assess the real capability surface before running it.

Tp4

High
Category
MCP Tool Poisoning
Confidence
97% confidence
Finding
The advertised purpose is character-image generation, but the skill also handles OAuth login, credential storage, remote tool invocation, uploads, telemetry/registration, uninstall cleanup, and self-updating code. That mismatch is dangerous because it can cause users to consent to a creative workflow without realizing they are authorizing broad local and network operations with persistent credentials.

Context-Inappropriate Capability

Medium
Confidence
92% confidence
Finding
The skill includes automatic self-update logic that downloads and replaces package-owned files, which is unrelated to the core task of generating character imagery. Any mechanism that can modify executable package contents expands the supply-chain and post-install compromise risk, especially when embedded in a skill primarily presented as a content-creation tool.

Description-Behavior Mismatch

Medium
Confidence
95% confidence
Finding
The document describes a bundled client with an automatic self-update capability that is unrelated to the advertised purpose of a character-visual generation skill. Even though the text mentions verification and rollback controls, embedding a software updater in this context expands the trust boundary and introduces unnecessary code-execution and supply-chain risk on the user's machine.

Context-Inappropriate Capability

High
Confidence
98% confidence
Finding
Silent automatic installation of updates is a dangerous capability for a skill whose stated function is image and character-pack creation. Because it changes local files without separate confirmation, a compromised update source, packaging mistake, or abuse of the update channel could lead to unauthorized code or content being installed on the user's system.

Description-Behavior Mismatch

High
Confidence
99% confidence
Finding
The authorization helper requests a very broad OAuth scope set, including artifacts, images, videos, music, speech, voices, task control, and wallet spending, while the skill is described as a character-consistency and visual-pack tool. This violates least privilege and materially increases blast radius if the credential is abused, leaked, or the skill later makes unexpected calls.

Context-Inappropriate Capability

Critical
Confidence
98% confidence
Finding
The requested scopes include `videos:generate`, `music:generate`, `speech:generate`, `voices:read`, and `voices:write`, which are unrelated to the skill's stated visual-character design scope. Unnecessary media capabilities expand the credential's abuse surface and could enable unauthorized generation or modification of unrelated assets.

Context-Inappropriate Capability

High
Confidence
98% confidence
Finding
The requested scopes include `videos:generate`, `music:generate`, `speech:generate`, `voices:read`, and `voices:write`, which are unrelated to the skill's stated visual-character design scope. Unnecessary media capabilities expand the credential's abuse surface and could enable unauthorized generation or modification of unrelated assets.

Description-Behavior Mismatch

High
Confidence
91% confidence
Finding
This file implements a full self-update mechanism that downloads manifests and archives, validates them, and replaces files in the local installation. Even with checksum and path validation, this materially exceeds the declared character-design purpose and creates a software-supply-chain modification channel inside a creative skill, increasing risk if the update origin, signing pipeline, or hosting account is ever compromised.

Description-Behavior Mismatch

Medium
Confidence
87% confidence
Finding
The code records local skill inventory and sends installation registration telemetry, including platform and installation reference data, while presenting itself as a character-design utility. This mismatch increases privacy and trust concerns because persistent device-local tracking and outbound telemetry are not obviously necessary for the advertised functionality.

Context-Inappropriate Capability

Medium
Confidence
84% confidence
Finding
The host platform detection logic fingerprints the runtime using environment variables and local state to label the agent environment. For a character-visual-pack skill, this is broader than needed and can facilitate unnecessary environment profiling, especially when combined with telemetry and remote calls.

Context-Inappropriate Capability

High
Confidence
94% confidence
Finding
The CLI exposes a generic passthrough that can list tools and invoke an arbitrary remote tool name using JSON read from stdin. That capability is far broader than the manifest's narrow character-design purpose, effectively turning the skill into a general remote MCP client and enabling unexpected actions depending on what tools the backend makes available.

Description-Behavior Mismatch

Medium
Confidence
93% confidence
Finding
The script is part of the skill package yet performs account/device-connection management against a shared Beatra authorization service, which is unrelated to the advertised character-image generation functionality. Even though it is framed as uninstall logic, bundling credential-revocation behavior into an unrelated creative skill expands trust and gives the package access to shared auth state that can affect other installed skills or the user's device authorization.

Context-Inappropriate Capability

Medium
Confidence
95% confidence
Finding
This code can send the shared device token to a remote revocation endpoint and delete shared local state under ~/.beatra, which is a sensitive capability not justified by the skill's stated purpose. A packaged skill with authority over shared credentials creates a dangerous coupling: if invoked unexpectedly, modified, or abused, it can disconnect other skills, disrupt service, and manipulate authentication state outside its own scope.

Missing User Warnings

Medium
Confidence
95% confidence
Finding
The skill states that newer releases install automatically without separate confirmation. Silent code installation is dangerous because it changes the trust boundary after approval: code the user did not review can gain execution with file, network, and credential access under the guise of a benign creative skill.

Missing User Warnings

Medium
Confidence
93% confidence
Finding
Enabling automatic file-replacing updates by default without a prominent warning reduces user awareness and informed consent for local installation changes. In the context of a creative skill, this behavior is unexpected and increases the likelihood that users will grant broad system trust to functionality they did not intend to install.

Missing User Warnings

Medium
Confidence
89% confidence
Finding
maybe_auto_update() performs a best-effort silent update before normal commands and intentionally suppresses exceptions, so local code can change without an immediate user-facing warning. In a creative skill, this weakens transparency and user control and magnifies any compromise of the upstream update infrastructure.

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
The script explicitly enumerates shared state files including credentials.json, indicating awareness of and intent to manipulate authentication material and related install metadata. In the context of an unrelated image-generation skill, touching shared credential storage is dangerous because compromise or misuse of this package could affect platform-wide authentication and availability, not just this skill.

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
97% confidence
Finding
The _device_token function reads an access token directly from ~/.beatra/credentials.json so it can be used in an Authorization header to revoke the device. Direct access to bearer tokens from a skill package is sensitive credential access; if the script or package is tampered with, the token could be exfiltrated or used to revoke/shared-manage the user's connection without clear separation of duties.

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
90% confidence
Finding
The exposed update command enables self-modification of the installed package, which is a high-risk capability for a skill whose stated purpose is character-design assistance. Even though the updater includes several safeguards, the presence of runtime self-replacement expands the attack surface and creates supply-chain and persistence concerns if the update path is compromised.

VirusTotal

VirusTotal findings are pending for this skill version.

View on VirusTotal

Static analysis

No suspicious patterns detected.