Back to skill

Security audit

zhongcao-beauty-note-maker

Security checks across malware telemetry and agentic risk

Overview

The skill is mostly transparent, but it asks for broad Beatra account authority and silently self-updates local code, so it should be reviewed before installation.

Install only if you are comfortable granting this package a shared Beatra Device Token with broad service scopes, paid-wallet capability for approved lookups, first-use registration metadata, and default silent package updates. Disable auto-updates before use if you require change control, and avoid installing in restricted or enterprise environments without reviewing the Beatra account and credential policy.

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

Lp3

Medium
Category
MCP Least Privilege
Confidence
92% confidence
Finding
The skill advertises a content-generation workflow but the documentation reveals capabilities for environment access, file read/write, shell, and network activity without declared permissions. That mismatch weakens user and host trust boundaries and can enable unexpected local or remote side effects, especially when combined with registration, updates, and external service calls.

Tp4

High
Category
MCP Tool Poisoning
Confidence
97% confidence
Finding
The documented behavior substantially exceeds the stated purpose of making Xiaohongshu beauty notes: it includes OAuth device auth, local credential storage, arbitrary Beatra MCP tool invocation, file upload, auto-update, installation registration, telemetry, and uninstall/revocation logic. This is dangerous because users may authorize a seemingly narrow writing skill while unknowingly granting a much broader execution and data-handling surface.

Context-Inappropriate Capability

Medium
Confidence
95% confidence
Finding
Silent automatic self-updating changes local package files without separate confirmation, which expands the trusted codebase after installation. Even with integrity checks, this creates supply-chain and change-control risk because future behavior can materially differ from what the user originally reviewed and approved.

Context-Inappropriate Capability

Medium
Confidence
90% confidence
Finding
The skill documentation grants installation registration and authentication behavior beyond the narrow content-generation purpose. That introduces account linkage, local state persistence, and potentially telemetry or shared credential handling that users may not expect from a writing assistant.

Context-Inappropriate Capability

High
Confidence
98% confidence
Finding
The script requests a very broad OAuth scope set including images, videos, music, speech, wallet spending, task control, and artifact access, which far exceeds what a beauty-note generation skill appears to need. Overbroad scopes violate least privilege and materially increase blast radius if the token is misused, leaked, or the skill behavior expands beyond the stated purpose.

Context-Inappropriate Capability

Medium
Confidence
86% confidence
Finding
The script detects the host agent platform from environment variables and captures the local hostname for persistence in host.json and for submission during authorization. While not inherently exploitative, this collects device and environment-identifying metadata beyond the core need of generating social media beauty content, creating unnecessary privacy exposure and improving fingerprinting of the user environment.

Description-Behavior Mismatch

High
Confidence
95% confidence
Finding
The client implements a full self-update mechanism that downloads manifests and archives from remote infrastructure and then replaces local package files on disk. Even with integrity checks, this is materially outside the stated beauty-note-making purpose and creates a software supply-chain and local code-modification capability that can change behavior after installation without clear user expectation.

Description-Behavior Mismatch

Medium
Confidence
90% confidence
Finding
The skill records local inventory and sends installation registration telemetry, including package slug, version, platform, and external installation reference, despite this not being part of the advertised beauty-content functionality. Undisclosed telemetry expands data collection and may enable tracking of installations and user environments beyond what is necessary for the skill's core task.

Context-Inappropriate Capability

Medium
Confidence
91% confidence
Finding
The code fingerprints the host environment via environment variables and host.json to classify the platform (e.g., claude-code, codex). This is unrelated to generating beauty notes and increases privacy risk and backend-side profiling capability when attached to every business call and telemetry event.

Context-Inappropriate Capability

Medium
Confidence
95% confidence
Finding
This uninstall script handles shared device credentials and performs remote revocation against Beatra infrastructure, which is materially unrelated to a beauty-note-generation skill's stated purpose. Even if framed as uninstall logic, it gives the package access to authentication state and account-level connection lifecycle, expanding trust far beyond content generation and increasing the blast radius if the package is abused or modified.

Missing User Warnings

Medium
Confidence
94% confidence
Finding
Automatic updates that modify local files without prominent warning undermine informed consent and can bypass normal review of changed behavior. In the context of a skill that already has shell, file, and network capabilities, understated self-update messaging increases the risk of unnoticed expansion or abuse of those powers.

Missing User Warnings

Medium
Confidence
94% confidence
Finding
The document states that update checks are silent and enabled by default, and that higher versions are installed automatically without separate confirmation. Even with integrity controls, this behavior modifies local files without explicit contemporaneous user consent, which creates a supply-chain and user-trust risk if the update channel is ever compromised or if users are unaware that the tool can self-modify during ordinary commands.

Missing User Warnings

Medium
Confidence
88% confidence
Finding
The document states that the client automatically performs an installation registration call and writes a local cache file, but it does not clearly warn users about the telemetry behavior or the filesystem side effects before first use. Even though the data is described as non-secret and non-billable, silent outbound metadata transmission and local persistence can violate user expectations, privacy requirements, or enterprise policy in restricted environments.

Missing User Warnings

Medium
Confidence
96% confidence
Finding
The skill performs best-effort silent auto-updates that can download and apply new package contents before executing normal commands, without a user-facing warning at runtime. In the context of an AI skill, this creates a hidden behavior-changing channel and increases the risk of unexpected code changes or compromised upstream content being deployed locally.

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
88% confidence
Finding
The script stores a bearer access token in plaintext JSON on disk under ~/.beatra/credentials.json. Even with restrictive POSIX permissions, plaintext long-lived tokens materially increase credential theft risk from local compromise, backups, multi-user misconfiguration, malware, or platforms where permission assumptions differ.

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
94% confidence
Finding
The script explicitly targets shared state files including credentials.json under ~/.beatra, indicating this skill participates in reading and deleting shared authentication material. In the context of a beauty-content skill, access to platform credentials is over-privileged and dangerous because compromise of the package could expose or interfere with authentication used by 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
97% confidence
Finding
The _device_token function reads access_token from credentials.json and later uses it to call a remote revocation endpoint. Reading bearer tokens from disk inside an unrelated content-generation skill creates direct credential exposure risk and enables unauthorized revocation or misuse if the skill or its execution environment is tampered with.

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
97% confidence
Finding
Exposing a self-update command in the client gives the skill a built-in self-modification pathway that can rewrite its installed files. For a beauty-content skill, this capability is unnecessary and substantially increases supply-chain risk because the skill can change its codebase independently of the user's expected installation lifecycle.

VirusTotal

VirusTotal findings are pending for this skill version.

View on VirusTotal

Static analysis

No suspicious patterns detected.