Back to skill

Security audit

used-car-walkaround

Security checks for vulnerabilities and agentic risk

Overview

This skill’s used-car media workflow is understandable, but it also brings broad Beatra account access, silent self-updates, and shared credential management that deserve review before installation.

Review this before installing if you are not comfortable granting a broad Beatra device authorization, storing a shared local Beatra token, allowing automatic package updates by default, and letting the bundled uninstall helper manage shared Beatra state. The media workflow itself requires approval before billable generation, but the platform helper has wider account and lifecycle authority than the used-car task alone needs.

Vulnerability Patterns
  • Insecure Skill Coding PracticesFinds exploitable flaws such as hardcoded secrets or command injection
  • 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
  • Remote Payload Retrieval and ExecutionFetches external code whose behavior can change after review
  • Embedded Malicious CodeShips malicious scripts inside the skill and executes them locally
Findings (1)

T09 · Insecure Skill Coding Practices

Warning
Location
scripts/uninstall.py:252
Finding

Destructive uninstall proceeds without code-enforced confirmation

Content
View full analysis

Vulnerability Details

File Location: scripts/uninstall.py, lines 252–259 and 288–295
Vulnerability Type: Destructive operation without mandatory confirmation
Risk Level: Medium

Technical Analysis

The uninstall helper defaults to performing destructive actions because dry_run is False. When the local inventory indicates that this is the final installed Beatra skill, the script attempts to revoke the shared device credential and then removes shared local state:

python
if dry_run:
    result.update({"decision": "disconnected", "revoked": False, "reason": "dry_run"})
    return result
token = _device_token(state_dir)
revoked = False
revoke_state = "no_credential"

After the revocation attempt, the helper removes the local state without requiring an explicit confirmation flag:

python
token = None
_remove_local_state(state_dir)
result.update({"decision": "disconnected", "revoked": revoked, "reason": revoke_state})
return result

The command-line entrypoint preserves this destructive default. --dry-run is optional, and invoking the script without it immediately calls the uninstall routine in destructive mode:

python
args = parser.parse_args()
result = uninstall(dry_run=args.dry_run)
print(json.dumps(result, ensure_ascii=False, indent=2))
if args.dry_run:
    print("Dry run: nothing was changed. Run without --dry-run to uninstall.")
    return 0

The inventory checks reduce the affected scope by retaining the shared connection when another installed skill is detected. However, these checks do not enforce user approval for credential revocation and local-state deletion. Documentation-level expectations are not a technical confirmation boundary because an Agent or another caller can invoke the script directly.

Attack Path

  1. An Agent workflow, injected instruction, or mistaken automation invokes: python3 scripts/uninstall.py
  2. The caller does not supply --dry-run; destructive mode is therefore selected by ...[truncated 1608 chars]
Remediation
View remediation

Remediation Suggestions

  1. Make non-destructive inspection the default:

    • Change dry_run to default to True.
    • Require a dedicated flag such as --confirm-disconnect before revocation or deletion.
  2. Bind confirmation to the computed action:

    • First calculate and display the package path, inventory decision, affected state directory, and whether credential revocation will occur.
    • Require a second invocation or confirmation token tied to that exact decision.
  3. Reject ambiguous invocation:

    • Exit without modifying state unless the explicit confirmation flag is present.
    • Do not treat the absence of --dry-run as consent.
  4. Preserve existing safeguards:

    • Continue retaining the connection when inventory is missing, unreadable, or uncertain.
    • Continue refusing to recursively delete unknown files or the package directory.
  5. For Agent-driven execution, require the host workflow to obtain explicit user approval immediately before running the confirmed destructive command.

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

Tp4

High
Category
MCP Tool Poisoning
Confidence
99% confidence
Finding

The referenced documentation indicates uninstall/removal actions, inspection of installed skill inventory, access to shared state under ~/.beatra, token revocation, and management of shared device connection state. Those are administrative and cross-skill operations unrelated to generating a car listing asset, and if exposed through the same skill trust surface they could affect other skills, credentials, or user state beyond this task.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
99% confidence
Finding

The referenced documentation indicates uninstall/removal actions, inspection of installed skill inventory, access to shared state under ~/.beatra, token revocation, and management of shared device connection state. Those are administrative and cross-skill operations unrelated to generating a car listing asset, and if exposed through the same skill trust surface they could affect other skills, credentials, or user state beyond this task.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
99% confidence
Finding

The referenced documentation indicates uninstall/removal actions, inspection of installed skill inventory, access to shared state under ~/.beatra, token revocation, and management of shared device connection state. Those are administrative and cross-skill operations unrelated to generating a car listing asset, and if exposed through the same skill trust surface they could affect other skills, credentials, or user state beyond this task.

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
The host follows this computer's network route, described below.

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.

md
The host follows this computer's network route, described below.

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.

md
The host follows this computer's network route, described below.

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 53)May include surrounding context.

md
The host follows this computer's network route, described below.

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 12)May include surrounding context.

md
The host follows this computer's network route, described below.

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 430)May include surrounding context.

python
The host follows this computer's network route, described below.

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 1009)May include surrounding context.

python
The host follows this computer's network route, described below.

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 1612)May include surrounding context.

python
The host follows this computer's network route, described below.

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/uninstall.py (reported line 39)May include surrounding context.

python
The host follows this computer's network route, described below.

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/uninstall.py (reported line 121)May include surrounding context.

python
The host follows this computer's network route, described below.

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

Context-Inappropriate Capability

High
Category
Not specified by scanner
Confidence
98% confidence
Finding

The authorization flow requests a very broad OAuth scope set, including wallet spending, task control, voice management, music generation, and artifact access, far beyond a used-car walkaround skill's stated purpose of generating listing stills, scripts, and videos. Overbroad authorization violates least privilege and materially increases blast radius if the credential is misused, stolen, or the backend is compromised.

Content

No source excerpt is available for this finding.

Self-Modification

High
Category
Rogue Agent
Confidence
97% confidence
Finding

The skill exposes self-update capability that can modify its own installed files, which is unusually powerful for a domain-specific media skill. In an agent ecosystem, self-modification undermines code immutability assumptions, expands supply-chain blast radius, and can be abused if the update channel or vendor infrastructure is compromised.

Content

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

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

Undeclared Tool Scope

Medium
Category
MCP Least Privilege
Confidence
93% confidence
Finding

The skill declares no explicit tool scope even though its instructions clearly require shell execution, network access, local file access, and interaction with environment-backed authentication state. Without an allowlist, a host may expose broader capabilities than necessary, increasing the blast radius if the skill or its bundled client behaves unexpectedly or is compromised.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The skill scope expands from media generation into package download, replacement, rollback, and recovery operations. That broadening of authority violates least privilege and gives a content-production skill code-management powers that could be abused to persist changes or introduce unreviewed functionality.

Content

No source excerpt is available for this finding.

Context-Inappropriate Capability

Medium
Category
Not specified by scanner
Confidence
96% confidence
Finding

The skill documentation introduces a self-updating mechanism that is not necessary for producing used-car stills or videos. Embedding updater behavior inside an operational skill increases supply-chain exposure and creates a path for code changes outside the normal review and approval flow.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
98% confidence
Finding

Automatic updates that install without separate confirmation are dangerous because they allow the executable behavior of the skill to change after initial review and user approval. Even with signature checks, silent updates increase the risk of supply-chain compromise, unexpected permission use, and post-review drift in a skill that already has shell, file, and network capabilities.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
90% confidence
Finding

The changelog states that in mainland China the helper now connects through Beatra's mainland network, which imposes a locale-specific behavior. Under the policy, locale constraints should offer user choice or be clearly documented and justified; this line describes forced regional behavior and only offers an alternative sign-in method in limited circumstances.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
96% confidence
Finding

The document states that the client silently checks for and automatically installs newer releases before ordinary commands, without separate confirmation. Even with integrity and origin checks described later, silent code replacement changes the runtime environment without an explicit user decision at update time, creating supply-chain and operational risk if the update channel, signing pipeline, or package publication process is ever compromised.

Content

No source excerpt is available for this finding.

Autonomous Decision Making

Medium
Category
Excessive Agency
Confidence
80% confidence
Finding

Skill enables autonomous high-impact decisions without human-in-the-loop verification. Critical operations (destructive commands, financial transactions, data deletion) should require explicit user confirmation.

Content

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

md
- say prominently that a signed-out browser lands on Beatra sign-in first:
  the user signs in or creates their account there, and the approval page
  continues automatically after sign-in;
- say once that the connection continues automatically after Allow — never
  ask the user to confirm in chat that they approved.
- on the mainland China network, follow the sign-in and console-link guidance
  in [MCP connection](mcp-connection.md#network-route).

Autonomous Decision Making

Medium
Category
Excessive Agency
Confidence
80% confidence
Finding

Skill enables autonomous high-impact decisions without human-in-the-loop verification. Critical operations (destructive commands, financial transactions, data deletion) should require explicit user confirmation.

Content

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

md
Use one of `website`, `github`, `skillhub`, `skillatlas`, `modelscope`,
`workbuddy`, `clawhub`, or `other`. If the conversation does not show it,
skip this and do not ask the user. If the command is not recognized, skip it.

## Use the bundled MCP client

Description-Behavior Mismatch

Medium
Category
Not specified by scanner
Confidence
90% confidence
Finding

The file implements persistent device authorization and shared credential management for broad Beatra access, which is materially more sensitive than the skill's advertised media-generation functionality. In this skill context, bundling account authorization logic with expansive permissions increases user surprise and trust risk, and it amplifies the impact of any misuse of the shared credential.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
97% confidence
Finding

The file fixes the package locale to "en", which is a natural-language locale restriction. There is no nearby indication of user opt-in, locale selection, or justification that this skill is intentionally region- or language-specific, so this appears to violate the language/locale policy requirement.

Content

No source excerpt is available for this finding.