Back to skill

Security audit

Xiaohongshu Parent FAQ Stills

Security checks for vulnerabilities and agentic risk

Overview

This skill matches its image-generation purpose, but it also uses a broad shared Beatra credential and silently self-updates executable package files, so it needs careful review before installation.

Install only if you trust Beatra with a shared account credential that can do more than this single still-image workflow. Before using it, consider disabling automatic updates with `python3 scripts/mcp_client.py update --auto off`, review the requested Beatra authorization scopes, and avoid uploading local files unless you intentionally selected that exact asset.

Vulnerability Patterns
  • Remote Payload Retrieval and ExecutionFetches external code whose behavior can change after review
  • Unauthorized Access and Privilege EscalationObtains permissions beyond the task's legitimate needs
  • Skill Instruction HijackingAlters the agent's session goals or safety constraints when the skill loads
  • Agent Memory PoisoningWrites attacker-controlled rules into memory that affect later sessions
  • Embedded Malicious CodeShips malicious scripts inside the skill and executes them locally
Findings (2)

T05 · Unauthorized Access and Privilege Escalation

Error
Location
scripts/authorize.py:30
Finding

Authorization Requests Privileges Beyond the Skill's Declared Functionality

Content
View full analysis
dict[str, Any]: session = _session_with_registration( state_dir=Path.home() / ".beatra", post_json=_default_post_json, ) if command == "tools": return session.request(2, "tools/list", {}) try: arguments = json.load(os.sys.stdin) except json.JSONDecodeError as exc: raise RuntimeError("Tool arguments on stdin must be one JSON object") from exc if not isinstance(arguments, dict): raise RuntimeError("Tool arguments on stdin must be one JSON object") assert tool_name is not None return session.request( 2, "tools/call", {"name": tool_name, "arguments": arguments}, ) ``` ### Technical Analysis The declared Skill workflow requires public social-content lookup, image generation and editing, artifact upload/read access, task-status access, and billing operations associated with those activities. The requested bearer credential additionally grants: - Video generation - Music generation - Speech generation - Voice read and write operations - General wallet spending - Task cancellation These permissions are not necessary to produce Xiaohongshu parent-FAQ still images. Moreover, the generic `call` interface does not enforce a package-level allowlist of permitted Beatra tools. Consequently, any tool expose ...[truncated 1407 chars]
Remediation
View remediation

T03 · Remote Payload Retrieval and Execution

Warning
Location
scripts/mcp_client.py:969
Finding

Default Silent Self-Update Allows Post-Audit Executable Code Replacement

Content
View full analysis
bool: """Best-effort silent update. Never block the requested MCP command.""" resolved_state = state_dir or Path.home() / ".beatra" try: resolved_root = (install_root or _current_install_root()).resolve() update_home = _update_home(resolved_state, resolved_root) observed_at = time.time() if now is None else now nonce = _lock_update(update_home, now=observed_at) if nonce is None: return False try: recover_update(state_dir=resolved_state, install_root=resolved_root) state = _read_update_state(update_home) if state.get("auto_update", True) is False: return False last_checked = state.get("last_checked_at") if ( isinstance(last_checked, (int, float)) and observed_at - float(last_checked) < UPDATE_CHECK_MAX_AGE_SECONDS ): return False state["last_checked_at"] = observed_at _write_private_json(update_home / "state.json", state) checked = check_update(get_bytes=get_bytes) if not checked["update_available"]: return False _ensure_owned_baseline( install_root=resolved_root, update_home=update_home, get_bytes=get_bytes, ) discovery = checked["discovery"] manifest, new_files = download_update(discovery, get_bytes=get_bytes) _apply_u ...[truncated 3265 chars]
Remediation
View remediation
Vulnerability Patterns
  • 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
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
Findings (35)

Context-Inappropriate Capability

Critical
Category
Not specified by scanner
Confidence
99% confidence
Finding

The scope list includes unrelated generation permissions such as videos:generate, music:generate, speech:generate, and voice read/write. For a still-image FAQ card skill, these permissions create unnecessary attack surface and enable misuse well beyond the advertised functionality.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
99% confidence
Finding

Documentation for uninstall/disconnect behavior, filesystem modification, credential access, and authenticated revocation actions is out of scope for a content-generation skill and indicates the package can alter local installation state and connection lifecycle. If misused or triggered unexpectedly, these capabilities could delete state, revoke access, or manipulate installed packages beyond the user's expected workflow.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
99% confidence
Finding

Documentation for uninstall/disconnect behavior, filesystem modification, credential access, and authenticated revocation actions is out of scope for a content-generation skill and indicates the package can alter local installation state and connection lifecycle. If misused or triggered unexpectedly, these capabilities could delete state, revoke access, or manipulate installed packages beyond the user's expected workflow.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
99% confidence
Finding

Documentation for uninstall/disconnect behavior, filesystem modification, credential access, and authenticated revocation actions is out of scope for a content-generation skill and indicates the package can alter local installation state and connection lifecycle. If misused or triggered unexpectedly, these capabilities could delete state, revoke access, or manipulate installed packages beyond the user's expected workflow.

Content

No source excerpt is available for this finding.

Credential Access

High
Category
Privilege Escalation
Confidence
70% confidence
Finding

Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Content

Scanner excerpt · manifest.json (reported line 53)May include surrounding context.

json
```

They share the one full-scope Device Token stored in
`~/.beatra/credentials.json`. Installing or switching packages must not trigger
another authorization when that credential is already valid. Do not add,
enable, trust, or configure a host Beatra Connector. Never print or move the
token into command arguments, environment variables, logs, chat, or another

Credential Access

High
Category
Privilege Escalation
Confidence
70% confidence
Finding

Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Content

Scanner excerpt · references/installation-and-auth.md (reported line 14)May include surrounding context.

text

They share the one full-scope Device Token stored in
`~/.beatra/credentials.json`. Installing or switching packages must not trigger
another authorization when that credential is already valid. Do not add,
enable, trust, or configure a host Beatra Connector. Never print or move the
token into command arguments, environment variables, logs, chat, or another

Credential Access

High
Category
Privilege Escalation
Confidence
70% confidence
Finding

Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Content

Scanner excerpt · references/installation-and-auth.md (reported line 21)May include surrounding context.

text

They share the one full-scope Device Token stored in
`~/.beatra/credentials.json`. Installing or switching packages must not trigger
another authorization when that credential is already valid. Do not add,
enable, trust, or configure a host Beatra Connector. Never print or move the
token into command arguments, environment variables, logs, chat, or another

Credential Access

High
Category
Privilege Escalation
Confidence
70% confidence
Finding

Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Content

Scanner excerpt · references/installation-and-auth.md (reported line 49)May include surrounding context.

text

They share the one full-scope Device Token stored in
`~/.beatra/credentials.json`. Installing or switching packages must not trigger
another authorization when that credential is already valid. Do not add,
enable, trust, or configure a host Beatra Connector. Never print or move the
token into command arguments, environment variables, logs, chat, or another

Credential Access

High
Category
Privilege Escalation
Confidence
70% confidence
Finding

Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Content

Scanner excerpt · references/mcp-connection.md (reported line 10)May include surrounding context.

text

They share the one full-scope Device Token stored in
`~/.beatra/credentials.json`. Installing or switching packages must not trigger
another authorization when that credential is already valid. Do not add,
enable, trust, or configure a host Beatra Connector. Never print or move the
token into command arguments, environment variables, logs, chat, or another

Credential Access

High
Category
Privilege Escalation
Confidence
70% confidence
Finding

Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Content

Scanner excerpt · scripts/authorize.py (reported line 207)May include surrounding context.

python
```

They share the one full-scope Device Token stored in
`~/.beatra/credentials.json`. Installing or switching packages must not trigger
another authorization when that credential is already valid. Do not add,
enable, trust, or configure a host Beatra Connector. Never print or move the
token into command arguments, environment variables, logs, chat, or another

Credential Access

High
Category
Privilege Escalation
Confidence
70% confidence
Finding

Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Content

Scanner excerpt · scripts/authorize.py (reported line 514)May include surrounding context.

python
```

They share the one full-scope Device Token stored in
`~/.beatra/credentials.json`. Installing or switching packages must not trigger
another authorization when that credential is already valid. Do not add,
enable, trust, or configure a host Beatra Connector. Never print or move the
token into command arguments, environment variables, logs, chat, or another

Credential Access

High
Category
Privilege Escalation
Confidence
70% confidence
Finding

Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Content

Scanner excerpt · scripts/mcp_client.py (reported line 1025)May include surrounding context.

python
```

They share the one full-scope Device Token stored in
`~/.beatra/credentials.json`. Installing or switching packages must not trigger
another authorization when that credential is already valid. Do not add,
enable, trust, or configure a host Beatra Connector. Never print or move the
token into command arguments, environment variables, logs, chat, or another

Description-Behavior Mismatch

High
Category
Not specified by scanner
Confidence
99% confidence
Finding

The requested OAuth scope set is far broader than what a Xiaohongshu parent FAQ still-generation skill appears to need. It grants account-scoped access to artifacts, tasks, speech, voices, video, music, and other capabilities, violating least privilege and materially increasing blast radius if the skill, its credentials, or downstream tooling are compromised.

Content

No source excerpt is available for this finding.

Context-Inappropriate Capability

High
Category
Not specified by scanner
Confidence
98% confidence
Finding

The scope list includes unrelated generation permissions such as videos:generate, music:generate, speech:generate, and voice read/write. For a still-image FAQ card skill, these permissions create unnecessary attack surface and enable misuse well beyond the advertised functionality.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

High
Category
Not specified by scanner
Confidence
98% confidence
Finding

The file implements a full self-update system that downloads manifests and archives from remote infrastructure, validates them, and replaces package files on disk. Even with several integrity checks, this is a high-risk capability because it enables remote code replacement in a skill whose advertised purpose is generating Xiaohongshu parent FAQ stills; the mismatch in scope makes the behavior especially suspicious and dangerous in an agent-skill context.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

High
Category
Not specified by scanner
Confidence
95% confidence
Finding

The upload flow reads an arbitrary local file path supplied at runtime and sends its contents to a remote service after requesting an upload grant. A still-generation skill does not need general-purpose local file exfiltration; in this context, the capability materially increases the risk of sensitive local data exposure if the tool is invoked with attacker-influenced paths or misused by another component.

Content

No source excerpt is available for this finding.

Self-Modification

High
Category
Rogue Agent
Confidence
94% confidence
Finding

The exposed self-update command enables the package to modify its own installed code and related files. Self-modification is a high-risk capability in an agent skill, especially when unrelated to the declared still-generation purpose, because it creates a built-in mechanism for persistent behavioral change and remote code rollout.

Content

Scanner excerpt · scripts/mcp_client.py (reported line 1503)May include surrounding context.

python
)
    update = subparsers.add_parser(
        "update",
        help="Check, install, or configure Beatra package self-updates",
    )
    update.add_argument(
        "--check",

Description-Behavior Mismatch

High
Category
Not specified by scanner
Confidence
98% confidence
Finding

The skill package includes an uninstall script that manages shared Beatra device credentials and can revoke authorization and remove shared state under ~/.beatra. That capability is unrelated to the advertised Xiaohongshu still-generation purpose, and bundling account/device management inside a content-creation skill expands the trust boundary: installing or uninstalling this skill can affect other skills and the user's shared connection.

Content

No source excerpt is available for this finding.

Credential Access

High
Category
Privilege Escalation
Confidence
95% confidence
Finding

Referencing credentials.json as part of the state files the script may delete shows the package is designed to operate on shared authentication material. Even though this instance deletes rather than exfiltrates the credential, access to credential storage from an unrelated media-generation skill is sensitive and can lead to account disruption or unauthorized token handling if modified or abused.

Content

Scanner excerpt · scripts/uninstall.py (reported line 40)May include surrounding context.

python
#: 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",

Context-Inappropriate Capability

High
Category
Not specified by scanner
Confidence
97% confidence
Finding

The code at these lines loads the shared skill inventory and device token, enabling the package to make authorization decisions and potentially revoke the device credential. For a skill whose stated purpose is generating parent FAQ stills, this privileged access is unjustified and dangerous because compromise, misuse, or repackaging of the skill could disrupt all installed skills tied to the same shared authorization.

Content

No source excerpt is available for this finding.

Credential Access

High
Category
Privilege Escalation
Confidence
99% confidence
Finding

This function reads ~/.beatra/credentials.json and extracts an access token for use in a revocation request. Reading bearer tokens from disk inside a skill package is a credential-access capability unrelated to the advertised function, and if the package is malicious, tampered with, or reused as a pattern, it could easily be adapted from revocation to credential theft or unauthorized API calls.

Content

Scanner excerpt · scripts/uninstall.py (reported line 109)May include surrounding context.

python
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):

Undeclared Tool Scope

Medium
Category
MCP Least Privilege
Confidence
95% confidence
Finding

The skill declares no explicit tool scope or permission boundaries even though it instructs use of shell, network, file access, environment access, and local writes. That mismatch makes the effective privilege set opaque to users and hosts, increasing the chance that a content-generation skill can access far more capability than its stated purpose requires.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

Medium
Category
Not specified by scanner
Confidence
98% confidence
Finding

The package documents autonomous self-update and replacement of package-owned files, which is a software supply-chain risk unrelated to generating stills. Any compromise of the update channel, signing process, or discovery mechanism could silently change code on the host without a fresh user review.

Content

No source excerpt is available for this finding.

Context-Inappropriate Capability

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

Automatic download and installation behavior is not necessary for the declared task of creating FAQ stills, so it introduces unnecessary privileged behavior and a larger attack surface. Features outside core purpose are especially dangerous because users are less likely to scrutinize them or understand that the skill can modify itself.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

The skill states that newer versions install automatically without separate confirmation, yet this is not surfaced as a prominent user-facing warning in the skill description. Silent behavior changes undermine informed consent and can introduce new capabilities after initial approval.

Content

No source excerpt is available for this finding.