Back to skill

Security audit

WeChat Moments Poster Maker

Security checks for vulnerabilities and agentic risk

Overview

This poster-making skill is disclosed and not overtly malicious, but it asks for broad account, spending, update, telemetry, and shared credential powers that go beyond a narrow image workflow.

Install only if you are comfortable granting Beatra broad shared account access, possible credit-spending authority, local credential storage, first-use registration, and default silent package updates. Disable auto-updates if you require change control, and review/revoke the Beatra device authorization from the Beatra console if you stop using the package.

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

Lp3

Medium
Category
MCP Least Privilege
Confidence
92% confidence
Finding
The skill declares no permissions while instructing use of a bundled Python client that can read and write local files, access environment data, invoke shell commands, and make network requests. This under-declaration reduces informed consent and prevents proper sandboxing or policy review, increasing the chance that users or hosting agents will grant broader execution than the manifest suggests.

Tp4

High
Category
MCP Tool Poisoning
Confidence
96% confidence
Finding
The documented behavior substantially exceeds the user-facing purpose of poster creation by adding credential storage, browser-based authorization, telemetry/registration, arbitrary remote tool invocation through an MCP client, local file upload, uninstall-side state deletion, and software update management. That mismatch is dangerous because users may supply sensitive local files or approve execution under the assumption of a narrow graphics workflow, while the skill actually establishes a broader trusted runtime with persistent access and external communications.

Context-Inappropriate Capability

Medium
Confidence
95% confidence
Finding
The skill includes automatic self-update behavior unrelated to its core task, with silent checks and installation during normal command execution. Any auto-update path that downloads and replaces executable code expands the trust boundary and creates supply-chain risk; if the update channel, signer, package ownership checks, or client logic are compromised, arbitrary code could be introduced under the guise of a poster-making action.

Description-Behavior Mismatch

Medium
Confidence
90% confidence
Finding
The manifest promises poster creation, but the documentation extends the skill into software lifecycle management, including update handling and installation behavior. This discrepancy weakens user trust and review accuracy, because a reviewer approving a content-creation skill may unintentionally approve code execution paths that modify local software and persistent state.

Description-Behavior Mismatch

High
Confidence
99% confidence
Finding
The OAuth scope string requests many capabilities far beyond the skill’s stated purpose of creating WeChat Moments posters, including artifacts, video, music, speech, voices, task control, and wallet spending. This violates least privilege and means any compromise or misuse of the granted token could enable unrelated actions on the user’s account.

Context-Inappropriate Capability

Critical
Confidence
99% confidence
Finding
The authorization scope includes music, speech, and voice read/write capabilities that do not align with a poster-maker skill. Overbroad media permissions increase the blast radius of the credential and could allow access to or generation of unrelated content if the token is abused.

Context-Inappropriate Capability

High
Confidence
99% confidence
Finding
The authorization scope includes music, speech, and voice read/write capabilities that do not align with a poster-maker skill. Overbroad media permissions increase the blast radius of the credential and could allow access to or generation of unrelated content if the token is abused.

Description-Behavior Mismatch

Medium
Confidence
90% confidence
Finding
The client implements broad non-core behaviors—self-update, installation registration, and local inventory management—that are unrelated to the stated poster-generation function. This enlarges the attack surface and trust scope of the skill, especially because it can modify local package files and emit telemetry from a creative tool users would not reasonably expect to manage software lifecycle or device state.

Context-Inappropriate Capability

Medium
Confidence
93% confidence
Finding
The code fingerprints the host environment by inspecting environment variables and persisted host metadata to classify the agent platform, then uses that value in outbound requests and local state. For a poster-making skill, this collection is unrelated to the declared purpose and creates unnecessary telemetry about the user's execution environment that could support tracking, profiling, or policy evasion if the backend is compromised or over-collects data.

Context-Inappropriate Capability

Medium
Confidence
94% confidence
Finding
The skill records local inventory and sends installation registration telemetry each time it is used, despite those actions being unrelated to poster creation. This creates persistent device-local tracking and remote usage reporting that expands privacy risk and can reveal installed skills, paths, and platform details without a clear business need for the declared functionality.

Context-Inappropriate Capability

High
Confidence
97% confidence
Finding
The CLI exposes generic tool discovery and arbitrary remote tool invocation ('tools' and 'call') rather than only poster-related actions. In the context of a narrowly described design skill, this is dangerous because it grants a broad remote execution surface through whatever MCP tools the server exposes, enabling misuse well beyond the advertised capability set if the backend or credentials are abused.

Description-Behavior Mismatch

High
Confidence
93% confidence
Finding
The uninstall script manages a shared device connection and can revoke authorization for all installed skills, which is a privileged capability unrelated to the skill's stated poster-generation purpose. Even though the code tries to be conservative, it still handles shared credentials and global state, so compromise, misuse, or packaging abuse could disrupt other skills and exceed the principle of least privilege.

Context-Inappropriate Capability

High
Confidence
96% confidence
Finding
The script performs a network POST to revoke device authorization, giving a poster-making skill outbound account-management capability that is not justified by its function. This creates an unnecessary attack surface and enables denial of service against the shared Beatra connection if the script is invoked inappropriately or bundled deceptively.

Context-Inappropriate Capability

Medium
Confidence
94% confidence
Finding
The code reads from and deletes shared files in ~/.beatra, including credentials and installation state, which are unrelated to poster creation and may affect other installed skills. Although deletion is guarded by inventory checks, the capability itself is overprivileged for this skill and could cause loss of local state or service interruption if triggered unexpectedly.

Missing User Warnings

Medium
Confidence
97% confidence
Finding
Automatic client updates occur without separate confirmation, meaning the software can change its executable behavior after initial approval. Even with claims about fixed official paths and verification, silent replacement of package-owned files creates a high-value supply-chain target and removes a meaningful consent checkpoint before new code runs in a context that has file, network, and credential access.

Missing User Warnings

Medium
Confidence
86% confidence
Finding
The document states that the client performs silent automatic updates and installs newer releases without separate confirmation. Even though the text describes strong integrity checks and rollback protections, replacing installed files by default without explicit per-update user approval can still create unexpected code-change and trust-boundary risk, especially in environments with change-control or sensitive workflows.

Missing User Warnings

Medium
Confidence
93% confidence
Finding
The documentation states that the bundled client automatically performs a network registration call on first use and writes a local cache file, but it does not clearly warn users up front or describe consent/opt-out expectations. Silent telemetry-like behavior can undermine user trust, create privacy/compliance issues, and be especially risky in enterprise or regulated environments where outbound calls and local state changes must be disclosed.

Missing User Warnings

Medium
Confidence
84% confidence
Finding
The device authorization request submits platform and potentially recognizable hostname metadata to the remote service before the user is explicitly warned that this information will be sent. While this may support device management, it creates a privacy issue because host environment details are transmitted without clear, prior disclosure or opt-in.

Missing User Warnings

Medium
Confidence
92% confidence
Finding
The code performs silent automatic self-updates that can replace installed package files during normal command execution, without a user-facing prompt at the point of change. Even with integrity checks, this behavior is risky in a creative skill because users may not expect code mutation during routine use, and any compromise of the update channel or publisher trust chain would turn the skill into a code-delivery mechanism.

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
89% confidence
Finding
Referencing credentials.json as part of the state this skill-related script manages indicates access to shared authentication material. In the context of a marketing-image skill, touching shared credentials is unjustified and increases the risk of credential misuse, revocation abuse, or accidental disruption of other 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
95% confidence
Finding
The _device_token function explicitly reads an access token from credentials.json so it can be used in a revocation request. Direct token access is a sensitive privilege that is unnecessary for a poster-making skill and makes the skill package capable of manipulating shared authorization outside its declared purpose.

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 package includes a self-update command and supporting logic that can modify its own installed files. Self-modification is especially sensitive in a skill advertised for poster generation because it extends trust from content generation to local code deployment; if the update authority or signing/discovery path is compromised, the skill becomes a vehicle for arbitrary code replacement.

Static analysis

No suspicious patterns detected.