Back to skill

Security audit

AI Ecommerce Listing Image Set

Security checks across malware telemetry and agentic risk

Overview

The skill has a coherent Beatra image-generation workflow, but it also requests broad unrelated account permissions and silently self-updates installed code by default.

Review this skill before installing. Only use it if you are comfortable granting Beatra broad media/account permissions, uploading product photos to Beatra, storing a shared token in ~/.beatra, and allowing default silent package updates; disable auto-updates if you need explicit control over code changes.

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

Lp3

Medium
Category
MCP Least Privilege
Confidence
96% confidence
Finding
The skill declares no permissions, yet its documentation directs use of shell execution, network access, local file reads/writes, environment use, and package-managed updates. That mismatch prevents informed consent and weakens sandboxing or policy enforcement, which is dangerous because the skill also handles credentials, uploads local assets, and can modify package-owned files.

Tp4

High
Category
MCP Tool Poisoning
Confidence
98% confidence
Finding
The stated purpose is ecommerce image generation, but the skill also performs OAuth login, persistent credential storage, arbitrary MCP tool interaction, local file upload, installation registration/telemetry, uninstall/token revocation flows, and self-update behavior. This broad hidden operational scope increases attack surface and trust requirements well beyond what a user would expect from an image-listing skill, enabling credential abuse, excess data transmission, or unintended code/package changes.

Context-Inappropriate Capability

Medium
Confidence
95% confidence
Finding
The documentation describes a bundled client that can silently download, verify, and replace package files as part of automatic updates, even though that behavior is unrelated to the business task of generating listing images. Self-update logic materially expands the supply-chain and local modification risk: if the update channel, verification process, or trust roots are compromised, the package can change code on the host without a deliberate reinstall step.

Description-Behavior Mismatch

High
Confidence
95% confidence
Finding
This documentation describes an automatic self-update mechanism that is unrelated to the stated purpose of an ecommerce listing image skill. In this context, bundling silent updater behavior expands the trust boundary and creates a supply-chain and unauthorized code-change risk, especially because the skill can change installed files outside the user's immediate task flow.

Context-Inappropriate Capability

High
Confidence
98% confidence
Finding
Silent package update and file replacement behavior is not justified by an ecommerce image-generation use case and gives the package the ability to alter local code without contemporaneous user approval. Even if integrity checks are described, this still creates a powerful persistence and supply-chain channel that could be abused if the update source, package, or client is ever compromised.

Description-Behavior Mismatch

High
Confidence
99% confidence
Finding
The OAuth scope string requests many capabilities far beyond the stated purpose of generating ecommerce listing images, including video, music, speech, voice management, task control, artifact access, and wallet spending. Excessive permissions violate least privilege and substantially increase blast radius if the credential is abused, stolen, or the skill behaves unexpectedly.

Context-Inappropriate Capability

Critical
Confidence
99% confidence
Finding
The skill requests unrelated capabilities such as videos:generate, music:generate, speech:generate, voices:read, and voices:write, which do not align with the skill metadata focused on product listing images. These unnecessary permissions expand attack surface and create opportunities for abuse of user account resources and data outside the expected feature set.

Context-Inappropriate Capability

High
Confidence
99% confidence
Finding
The skill requests unrelated capabilities such as videos:generate, music:generate, speech:generate, voices:read, and voices:write, which do not align with the skill metadata focused on product listing images. These unnecessary permissions expand attack surface and create opportunities for abuse of user account resources and data outside the expected feature set.

Description-Behavior Mismatch

High
Confidence
95% confidence
Finding
The client includes a full self-update mechanism that downloads manifests and archives from remote infrastructure and replaces local package files, which is unrelated to the stated ecommerce image-set purpose. Even with checksum and path validation, this materially expands the trust boundary: a compromised update service, CDN, signing/discovery pipeline, or package owner could push new code that executes in the user's environment.

Description-Behavior Mismatch

Medium
Confidence
92% confidence
Finding
The skill records installation telemetry and maintains a local skill inventory, including install path, platform, timestamps, and registration state, despite the package being described as an image-generation tool. This creates unnecessary privacy and surveillance surface and could expose operational metadata about the user's environment or installed tooling to local readers or the remote service.

Context-Inappropriate Capability

Medium
Confidence
90% confidence
Finding
The code fingerprints the host environment by inspecting environment variables and host.json to classify the agent platform. For an ecommerce listing image skill, this data collection is not functionally necessary and increases privacy risk while helping remote services profile the execution environment.

Context-Inappropriate Capability

Medium
Confidence
93% confidence
Finding
The skill automatically maintains a local inventory file of installed skills and paths on every use, which is unrelated to generating listing images. This persists extra system metadata and can aid profiling, uninstall control, or later coordination between packages beyond the user's expectations.

Description-Behavior Mismatch

High
Confidence
95% confidence
Finding
This uninstall script manages a shared device connection, inventory, and credential revocation for ~/.beatra, which is unrelated to the advertised ecommerce image-generation purpose of the skill. Even if framed as cleanup logic, it gives this package authority over shared authentication state used by other skills, creating a risky cross-skill control surface and an opportunity for denial of service or unexpected credential invalidation.

Context-Inappropriate Capability

High
Confidence
98% confidence
Finding
The code performs OAuth device revocation and deletes shared local files including credentials and skill inventory, capabilities far beyond what an ecommerce image skill should need. Because these files are shared across skills, a mistake, abuse, or packaging mismatch could disconnect other installed skills or remove authentication material unexpectedly.

Missing User Warnings

Medium
Confidence
94% confidence
Finding
Automatic package updates occur without separate user confirmation, meaning the executable behavior of the skill can change after initial approval. Even with stated verification, silent code changes reduce auditability and can bypass user expectations, especially in a skill that already has network, file, and credential-related capabilities.

Missing User Warnings

Medium
Confidence
92% confidence
Finding
Enabling automatic installation by default without a strong upfront warning reduces informed consent and can cause unexpected local file modification. In a skill whose advertised purpose is generating listing images, this mismatch makes the behavior more suspicious and increases the likelihood that users will not understand the operational risk.

Missing User Warnings

Medium
Confidence
87% confidence
Finding
The documentation states that the bundled client automatically performs an external registration call and writes a local cache file on first use, but it does not present this as an explicit user-consent or user-notice requirement. Even if the transmitted fields are described as non-secret, automatic network transmission and persistent local writes can create privacy, compliance, and transparency issues, especially in enterprise or restricted environments where users may not expect outbound telemetry from a creative-image skill.

Missing User Warnings

Medium
Confidence
94% confidence
Finding
maybe_auto_update() performs silent best-effort updates before normal commands, modifying installed package files without a user-facing prompt at the moment of execution. Silent code replacement in a skill context is risky because users invoking an image tool would not reasonably expect unrelated executable code changes to occur opportunistically.

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
92% confidence
Finding
The script explicitly targets credentials.json as part of the state it can remove, indicating direct handling of authentication material. In the context of a marketplace image skill, access to credential files is unjustified and dangerous because it expands the package's privileges to sensitive shared auth artifacts.

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
This function reads access_token from credentials.json and uses it for server-side revocation, demonstrating active credential access rather than incidental file presence. For a skill whose purpose is product image generation, reading bearer tokens is unnecessary and significantly increases the blast radius if the package is misused, modified, or compromised.

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 self-update command enables the package to replace its own installed code, a powerful capability unrelated to the core image-generation task. In a skill ecosystem, self-modification significantly raises supply-chain risk because future behavior can change outside the user's normal review expectations.

VirusTotal

VirusTotal findings are pending for this skill version.

View on VirusTotal

Static analysis

No suspicious patterns detected.