Back to skill

Security audit

creator-account-teardown

Security checks across malware telemetry and agentic risk

Overview

This skill appears to be a disclosed Beatra integration, but it joins a broad shared credential trust boundary and can silently update its own code.

Review this before installing if you are uncomfortable with a shared Beatra bearer token, wallet-spending authority, installation telemetry, or automatic silent self-updates. The skill documents how to disable auto-updates with `python3 scripts/mcp_client.py update --auto off`, and paid lookups or media generation should only run after explicit approval.

SkillSpector

By NVIDIA
Vulnerability Patterns
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • 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
Findings (23)

Lp3

Medium
Category
MCP Least Privilege
Confidence
92% confidence
Finding
The skill invokes shell commands, performs network access, reads and writes local files, and references environment-sensitive operations, yet it declares no permissions or equivalent capability boundaries. That creates a transparency and consent failure: hosts or users may treat it as low-risk content analysis while it can actually access local state, upload files, and execute external operations.

Tp4

High
Category
MCP Tool Poisoning
Confidence
97% confidence
Finding
The documented behavior materially exceeds the declared purpose: beyond account analysis, the skill can authenticate with a third party, store local credentials, call a generic remote tool interface, upload local files, self-update code, track local installation state, and uninstall/revoke credentials. This mismatch is dangerous because it hides high-risk capabilities behind a benign analytical description, increasing the chance of over-trust, silent data exfiltration, credential misuse, or supply-chain compromise through auto-updates.

Description-Behavior Mismatch

Low
Confidence
92% confidence
Finding
The document describes an automatic installation registration network call and local cache, but the skill metadata provided to users does not disclose that the package phones home on first use. Undisclosed telemetry is a security and privacy concern because it transmits package and host-related identifiers without clear user awareness or consent, even if the payload is described as non-secret and non-billable.

Context-Inappropriate Capability

Low
Confidence
85% confidence
Finding
The installation registration capability is not clearly necessary for an account-teardown/content-analysis skill, so it expands data collection beyond the expected function of the package. Even if limited to installation metadata, collecting environment-linked identifiers without a clear purpose increases supply-chain and privacy risk and can normalize hidden outbound traffic in a tool that processes social-media-related tasks.

Context-Inappropriate Capability

High
Confidence
98% confidence
Finding
The authorization flow requests a very broad OAuth scope set, including wallet spending plus image, video, music, speech, and voice permissions that are not necessary for a skill primarily described as creator-account teardown and analysis. Over-scoped tokens violate least privilege and materially increase blast radius: compromise or misuse of this credential could enable financial actions and cross-modal content generation well beyond the advertised function.

Description-Behavior Mismatch

Medium
Confidence
93% confidence
Finding
The client contains substantial self-update logic that downloads manifests and archives from remote infrastructure and rewrites the installed package on disk. Even with checksum and path validations, this creates a powerful code-modification channel unrelated to the advertised account-analysis purpose, increasing supply-chain risk and making compromise of the update origin highly impactful.

Description-Behavior Mismatch

Medium
Confidence
90% confidence
Finding
The client records local skill inventory and sends installation-registration telemetry that is not necessary for the stated creator-account teardown workflow. This expands data collection beyond user expectations and can expose package usage, install path, platform, and timing metadata to the vendor or to local observers if the state store is accessed.

Context-Inappropriate Capability

Low
Confidence
77% confidence
Finding
The code fingerprints the host environment using environment variables and local state to derive a platform identifier, then uses that value in subsequent requests. While not directly dangerous by itself, this capability is unrelated to account analysis and increases device and user profiling, especially when combined with telemetry and registration flows.

Description-Behavior Mismatch

High
Confidence
98% confidence
Finding
The script defines and uses an uninstall flow that can revoke a shared Beatra device credential and remove shared state from ~/.beatra, behavior that is unrelated to the advertised creator-account analysis capability. Even though the logic is framed defensively, it still grants this skill package access to cross-skill authentication state and account-affecting operations, increasing blast radius if the package is abused or modified.

Context-Inappropriate Capability

High
Confidence
99% confidence
Finding
This code reads ~/.beatra/credentials.json to obtain an access token and then uses that bearer token to call the revocation endpoint. Access to shared credentials is highly sensitive and unnecessary for a creator-account teardown skill, so compromise of this package would expose or misuse platform-wide authentication material.

Context-Inappropriate Capability

Medium
Confidence
95% confidence
Finding
The script parses ~/.beatra/skills.json and reasons about other installed skills and their install paths to decide whether shared credentials should remain. Enumerating other installed skills is outside the stated purpose of this package and leaks cross-package metadata that could aid profiling, targeting, or future abuse.

Description-Behavior Mismatch

High
Confidence
98% confidence
Finding
The _remove_local_state function deletes shared files including credentials.json, installation.json, host.json, skills.json, and registrations.json from ~/.beatra. Destructive modification of shared platform state is unrelated to the advertised skill purpose and creates significant risk of denial of service or account/session disruption if triggered incorrectly.

Natural-Language Policy Violations

Medium
Confidence
81% confidence
Finding
Forcing a specific language locale for voice selection without user opt-in can produce unintended data handling and user-output mismatches, especially for multilingual users or content not intended for that locale. While not a severe exploit by itself, it bypasses user choice and may cause privacy, compliance, or reputational issues if content is processed under the wrong language assumptions.

Missing User Warnings

Medium
Confidence
76% confidence
Finding
The manifest advertises direct reading of external profiles, recent posts, comments, and public metrics across multiple platforms without any disclosure of privacy boundaries, data handling, or consent expectations. In context, this encourages collection and analysis of third-party data at scale, which can lead to privacy violations, policy breaches, or unexpected processing of personal data even if the data is nominally public.

Natural-Language Policy Violations

Medium
Confidence
90% confidence
Finding
The template hard-codes a language/output choice by requiring 'six to twelve characters in Chinese, or a short phrase in English' without first checking the user's preferred language or target audience. In a multi-platform, multi-region content workflow, this can produce unsuitable or exclusionary output and override user intent, though it is primarily a product-safety and usability issue rather than a direct security exploit.

Missing User Warnings

Low
Confidence
88% confidence
Finding
The text mentions a registration network call but does not clearly warn users that platform and stable external installation reference data are transmitted. In this skill context, that omission matters because the skill's stated purpose is social account analysis, not host fingerprinting or registration telemetry, so users are less likely to expect environment metadata to leave the system.

Missing User Warnings

Medium
Confidence
88% confidence
Finding
The authorization request includes host platform and device hostname metadata, but the helper does not clearly warn the user at the moment those values are transmitted. This creates an avoidable privacy leak and can aid fingerprinting of the user’s environment, especially since the hostname may contain personal or organizational identifiers.

Missing User Warnings

Medium
Confidence
95% confidence
Finding
Automatic silent updates can change executable package files during normal command execution without a user-facing warning at the moment of change. In the context of a skill whose stated purpose is social-account analysis, hidden code replacement is especially risky because users would not reasonably expect background modification of local software, and any upstream compromise would transparently propagate.

Missing User Warnings

Medium
Confidence
88% confidence
Finding
The registration path transmits package, version, platform, and installation-reference telemetry on use without a clear user-facing warning in the workflow shown here. This creates undisclosed outbound metadata sharing that is unrelated to the skill's visible purpose and may violate least surprise and privacy expectations.

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
78% confidence
Finding
This code stores a bearer access token in plaintext JSON on disk under ~/.beatra/credentials.json. Although permissions are tightened on POSIX, plaintext long-lived bearer tokens remain high-value secrets; any local compromise, backup exposure, or weaker platform ACL scenario could allow token theft and reuse with the full granted scope set, which here includes broad media capabilities and wallet spending.

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
97% confidence
Finding
The declaration of credentials.json within the set of managed shared state files indicates this package is designed to handle and potentially delete credential-bearing material. In the context of a social-account analysis skill, any capability touching shared credentials is over-privileged and materially raises the consequences of misuse.

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
99% confidence
Finding
The _device_token function explicitly opens credentials.json and extracts access_token, giving the package direct visibility into sensitive bearer credentials. Because this skill's declared purpose is creator-account analysis rather than authentication management, this is an unnecessary credential access path with severe abuse potential.

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 skill exposes self-modification capability through its update command and related code paths, allowing the package to replace its own installed files. Self-modifying behavior is highly sensitive in an agent skill, particularly when it is not part of the declared business function, because it expands the blast radius of any compromise in the update channel or publisher infrastructure.

VirusTotal

VirusTotal findings are pending for this skill version.

View on VirusTotal

Static analysis

No suspicious patterns detected.