Back to skill

Security audit

ecommerce-detail-module-studio

Security checks across malware telemetry and agentic risk

Overview

The skill can perform its ecommerce image workflow, but it asks for broad Beatra account powers and silently registers/updates itself, so it should go to Review before installation.

Install only if you are comfortable granting Beatra a broad shared device authorization, uploading product assets to Beatra, allowing package registration telemetry, and accepting silent package updates by default. Consider disabling automatic updates with the documented update command and reviewing the Beatra account authorization before using it for sensitive product or business content.

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

Lp3

Medium
Category
MCP Least Privilege
Confidence
91% confidence
Finding
The skill declares no permissions while instructing the host to use shell execution, local file access, network communication, uploads, and package modification via its bundled client. That mismatch prevents informed consent and weakens sandboxing or policy enforcement, making the skill more dangerous because it can access local resources and external services beyond what its product-description implies.

Tp4

High
Category
MCP Tool Poisoning
Confidence
96% confidence
Finding
The skill is presented as an ecommerce image-module workflow, but it also performs authentication, local credential storage, remote tool invocation, file uploads, telemetry/registration, uninstall cleanup, and self-update behavior. This broad hidden operational scope increases attack surface and can surprise users into granting sensitive access or running package-management behavior unrelated to the stated business purpose.

Description-Behavior Mismatch

Medium
Confidence
95% confidence
Finding
The file documents automatic external installation registration that sends package and environment metadata to a remote service, which is unrelated to the skill's stated ecommerce content-generation purpose. Even if described as non-billable and best-effort, this is still telemetry-like behavior that expands data flow and trust boundaries without clear functional justification, making it risky in an agent skill context.

Context-Inappropriate Capability

Medium
Confidence
96% confidence
Finding
The documented capability performs outbound registration and records a stable external installation reference despite the module being presented as a creative ecommerce asset generator. That mismatch increases concern because hidden or weakly justified network registration can be repurposed for tracking, inventorying installations, or collecting environment information beyond what users reasonably expect from the skill.

Description-Behavior Mismatch

High
Confidence
99% confidence
Finding
The OAuth scope string requests a very broad set of capabilities, including artifacts, images, videos, music, speech, voices, wallet spending, and task operations, while the declared skill is for generating ecommerce detail modules from product facts and photos. This violates least privilege and would give the skill access far beyond what is needed, increasing the blast radius if the skill, its backend, or stored credentials are abused.

Context-Inappropriate Capability

Critical
Confidence
95% confidence
Finding
The requested scopes include tasks:read and tasks:cancel, which are not obviously required for a skill focused on visual ecommerce content generation. Unnecessary task-management access could expose operational metadata or let the skill interfere with other account activity by enumerating or canceling tasks outside its own workflow.

Context-Inappropriate Capability

High
Confidence
95% confidence
Finding
The requested scopes include tasks:read and tasks:cancel, which are not obviously required for a skill focused on visual ecommerce content generation. Unnecessary task-management access could expose operational metadata or let the skill interfere with other account activity by enumerating or canceling tasks outside its own workflow.

Context-Inappropriate Capability

Medium
Confidence
95% confidence
Finding
The requested scopes include tasks:read and tasks:cancel, which are not obviously required for a skill focused on visual ecommerce content generation. Unnecessary task-management access could expose operational metadata or let the skill interfere with other account activity by enumerating or canceling tasks outside its own workflow.

Description-Behavior Mismatch

High
Confidence
96% confidence
Finding
The module's stated purpose is generating ecommerce detail modules, but the code implements broad package-management, credential handling, installation registration, telemetry, and remote self-update capabilities. That excess capability materially expands the trust boundary: a compromise of the vendor update or control plane could modify local installation files and perform unrelated networked actions from within a creative skill.

Context-Inappropriate Capability

Medium
Confidence
90% confidence
Finding
The code fingerprints the host environment using environment variables and local host metadata, then injects source_platform attribution into tool calls. For an ecommerce-content skill, collecting and transmitting agent-environment identity is unrelated to core function and increases privacy and tracking risk, especially when done automatically on each business call.

Context-Inappropriate Capability

Medium
Confidence
93% confidence
Finding
The client maintains a local skill inventory and performs automatic installation registration telemetry, neither of which is necessary to generate product imagery/modules. This creates undisclosed tracking of installed skills and usage context, broadening data collection and potentially exposing operational metadata to the remote service.

Description-Behavior Mismatch

High
Confidence
98% confidence
Finding
This uninstall script is explicitly designed to revoke a shared Beatra device credential and remove shared state under ~/.beatra, which affects all installed skills rather than just this ecommerce-related package. In the context of a narrowly scoped content-generation skill, bundling logic that can disconnect other skills creates an unnecessary cross-skill control surface and can cause denial of service or account disruption if invoked unexpectedly or incorrectly.

Context-Inappropriate Capability

High
Confidence
97% confidence
Finding
This code reads the shared device access token from credentials.json and uses it to call the authorization revocation endpoint, giving the skill package direct control over a credential outside its functional scope. Even if intended for cleanup, a skill handling shared auth material increases blast radius because compromise, misuse, or unexpected execution can disconnect unrelated capabilities on the device.

Context-Inappropriate Capability

High
Confidence
98% confidence
Finding
The _STATE_FILES list targets global Beatra state files including credentials, inventory, registrations, and host metadata in ~/.beatra, and _remove_local_state deletes them. For a skill whose business purpose is ecommerce module generation, deleting platform-wide state is overly privileged and can break other installed skills or erase shared configuration.

Missing User Warnings

Medium
Confidence
94% confidence
Finding
The skill states that its bundled client silently checks for and automatically installs newer releases without separate confirmation. Even with signature and integrity verification, silent self-updating code changes the executed package after installation, reducing change control and creating a supply-chain risk window if the update channel, signing process, or publisher account is ever compromised.

Missing User Warnings

Medium
Confidence
89% confidence
Finding
The document states that the client silently checks for and automatically installs newer releases by default before ordinary commands, without separate confirmation. Even with integrity and origin checks described later, default silent file replacement increases supply-chain and operational risk because users may be unaware that executable/package content is being modified during routine use.

Missing User Warnings

Medium
Confidence
93% confidence
Finding
The documentation states that the client will automatically make an external registration call and write to ~/.beatra/registrations.json, but it does not present this as a user warning or consent point. Silent outbound transmission plus local filesystem modification violates least surprise and can expose metadata about usage, host environment, and installation state, especially in enterprise or restricted environments.

Missing User Warnings

Medium
Confidence
95% confidence
Finding
maybe_auto_update() silently checks for and applies updates during normal command execution, modifying installation files without contemporaneous user approval. Even though there are integrity checks, this is still dangerous in a skill context because it enables remote code changes to occur implicitly and expands the blast radius of any upstream compromise.

Missing User Warnings

Medium
Confidence
91% confidence
Finding
Installation telemetry is sent as a best-effort side effect of session setup and tool use, without a clear user-facing notice at execution time. Silent metadata transmission from a creative skill undermines transparency and can reveal package presence, platform, and installation references to the service operator.

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
77% confidence
Finding
This code stores a live bearer access token in a plaintext JSON file under the user's home directory. Although POSIX permissions are tightened, plaintext token storage still creates a valuable local secret that can be stolen by other local processes running as the user, malware, backups, or accidental exfiltration, and the broad scopes requested make compromise more severe.

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
93% confidence
Finding
Referencing credentials.json as part of the uninstall-managed state indicates this skill package is aware of and participates in lifecycle operations over shared credentials. In this context, credential access is dangerous because the skill does not need auth-secret handling to generate ecommerce content, and any such access expands the attack surface around sensitive tokens.

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 and parses credentials.json to obtain an access token for later revocation calls, which is direct credential handling by a low-scope skill component. Because the skill’s stated purpose is unrelated to authentication, this creates unnecessary exposure of bearer tokens and raises the risk of credential misuse, leakage, or unauthorized revocation of shared 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
95% confidence
Finding
The skill exposes self-update functionality that can replace package files on disk, which is materially unrelated to generating ecommerce detail modules and creates a self-modifying code path. In this context, self-modification is dangerous because it allows future behavior to change based on remote content, increasing supply-chain and persistence risk.

VirusTotal

VirusTotal findings are pending for this skill version.

View on VirusTotal

Static analysis

No suspicious patterns detected.