Back to skill

Security audit

wechat-article-visual-story

Security checks across malware telemetry and agentic risk

Overview

The skill is mostly coherent for writing WeChat articles with images, but it needs Review because it uses broad Beatra account authority, stored bearer credentials, telemetry, and silent self-updates beyond the narrow article-image task.

Install only if you are comfortable granting this package a shared Beatra device token with spending-capable, multi-media MCP authority and allowing default silent package updates. Before use, consider disabling auto-updates with scripts/mcp_client.py update --auto off, review the Beatra approval page carefully, and avoid uploading brand references or private article content unless that external transmission is acceptable.

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
91% confidence
Finding
The skill invokes a bundled Python client that can read and write local files, access the network, and execute shell commands, yet those capabilities are not explicitly declared to the user. Even if used for legitimate image generation and uploads, this hidden capability expansion reduces transparency and increases the blast radius if the client, update path, or referenced workflows are abused.

Tp4

High
Category
MCP Tool Poisoning
Confidence
97% confidence
Finding
The skill is presented as a content-and-image generator, but its documented behavior includes authentication flows, persistent credential storage, local file upload, telemetry/registration, auto-update, uninstall/revocation logic, and a generic MCP client for remote tool access. This mismatch is dangerous because users may authorize or run it expecting simple article generation while it performs broader system and account-affecting actions that materially increase security and privacy risk.

Description-Behavior Mismatch

High
Confidence
98% confidence
Finding
The authorization scope is materially broader than the skill’s stated purpose of writing WeChat articles and generating accompanying images. In addition to image generation, it requests video, music, speech, voice write, task management, artifact access, and notably wallet:spend, creating unnecessary capability exposure if the token is compromised or the backend misuses granted permissions.

Context-Inappropriate Capability

Medium
Confidence
85% confidence
Finding
The code fingerprints the host environment, captures a recognizable device hostname, and records a local inventory of installed skills and paths in the shared state directory. For an article-generation skill, this collection exceeds what is obviously necessary and creates privacy and operational metadata that could aid profiling or correlation across installs if accessed locally or transmitted elsewhere by related components.

Description-Behavior Mismatch

High
Confidence
97% confidence
Finding
The client contains extensive self-update, download, archive validation, installation-state, and file replacement logic that is unrelated to the advertised article-and-image generation purpose. Even with some integrity checks present, bundling autonomous code-update capability into a creative skill materially expands the attack surface and enables remote code replacement if the update channel, signing assumptions, or upstream service are ever compromised.

Description-Behavior Mismatch

Medium
Confidence
94% confidence
Finding
The skill records local inventory and performs installation registration telemetry, including package/version/platform and installation reference data, beyond what is needed to generate WeChat articles and images. In the context of a content-generation skill, this unexpected persistence and telemetry increases privacy risk and creates hidden behavior users would not reasonably expect.

Context-Inappropriate Capability

Medium
Confidence
91% confidence
Finding
The code fingerprints the host environment from environment variables and host.json to classify the agent platform, which is not justified by the stated purpose of writing articles and generating images. In this skill context, host fingerprinting is suspicious because it supports telemetry, targeting, or behavior differentiation unrelated to the user-facing function.

Description-Behavior Mismatch

Medium
Confidence
91% confidence
Finding
The uninstall script manages and may delete shared global Beatra state and can revoke a shared device authorization, which is a capability materially outside the advertised article-and-image generation purpose of this skill. Even if intended for cleanup, this creates cross-skill side effects: uninstalling this package can affect other installed skills and the user’s broader agent environment if inventory or state assumptions are wrong.

Context-Inappropriate Capability

Medium
Confidence
94% confidence
Finding
This code performs a remote credential revocation request using a bearer token, which is unrelated to generating WeChat articles or images and grants the skill account/device-management behavior. In the context of a content-generation skill, such hidden remote authority is dangerous because it can disable access unexpectedly and expands the blast radius from local package removal to server-side authentication state.

Missing User Warnings

Medium
Confidence
89% confidence
Finding
The document states that the client performs silent update checks by default and automatically installs higher versions without separate confirmation. Even though the text describes integrity checks and rollback protections, silently modifying installed files before ordinary commands reduces user awareness and consent, and can create supply-chain and change-management risk if an update is unexpected or operationally disruptive.

Missing User Warnings

Medium
Confidence
86% confidence
Finding
The document states that the client performs an automatic installation registration network call and transmits package, version, platform, and installation reference metadata, but it does not clearly warn users up front or obtain consent for that telemetry behavior. Even if the data is described as non-secret and non-billable, silent transmission of environment and installation metadata can create privacy, compliance, and trust risks, especially in enterprise or regulated environments.

Missing User Warnings

Medium
Confidence
93% confidence
Finding
The workflow explicitly transitions from a free drafting stage to paid remote image-generation calls, but the warning and approval language focuses on internal gating rather than an explicit user-facing notice about cost and external data transmission immediately before execution. In an agent setting, this can lead to users unintentionally authorizing billable API calls and sending article content or brand-reference images to a third-party service without sufficiently clear, informed consent.

Missing User Warnings

Low
Confidence
75% confidence
Finding
write_host_config persists environment-derived identifiers to host.json without any user-facing notice during authorization. While the stored data is limited, silent persistence of platform and device name is a transparency and privacy issue, especially because the skill’s visible function is content creation rather than host inventory management.

Missing User Warnings

Medium
Confidence
96% confidence
Finding
The skill can silently check for updates, download remote content, and replace local package files during normal execution without user-facing disclosure at runtime. In a creative-writing skill, undisclosed network-triggered self-modification is especially dangerous because it violates least surprise and can turn a benign tool into a remote code-delivery path if the update infrastructure is compromised.

Missing User Warnings

Low
Confidence
88% confidence
Finding
The installation registration path sends package, version, platform, and installation reference telemetry without user-facing disclosure at execution time. While not direct code execution, it creates an unexpected privacy and tracking surface that is unnecessary for the skill's declared content-creation purpose.

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
84% confidence
Finding
The script explicitly targets credentials.json as part of the shared ~/.beatra state it may delete, demonstrating access to authentication material and security-sensitive files outside the skill’s stated business purpose. In a writing-and-visuals skill, touching shared credential storage is an unnecessary privilege that increases the risk of credential loss, cross-skill disruption, or abuse if the package is modified.

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
95% confidence
Finding
The _device_token function reads an access token directly from credentials.json and uses it to perform server-side revocation, meaning the skill can access live bearer credentials. Direct token access is especially risky here because the skill’s declared purpose is content generation, so credential handling is unjustified and enables unauthorized account-impacting operations if the script is abused or repurposed.

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
The exposed self-update command advertises and enables self-modification of the installed package, which is unnecessary for an article-and-image generation skill and meaningfully increases risk. Any mechanism that replaces local code from a remote source becomes a high-value target and can enable full compromise of the skill's execution path if abused.

VirusTotal

VirusTotal findings are pending for this skill version.

View on VirusTotal

Static analysis

No suspicious patterns detected.