T05 · Unauthorized Access and Privilege Escalation
- Location
scripts/authorize.py:34- Finding
Overprivileged Device Token and Unrestricted MCP Tool Dispatch
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
The skill’s image-preflight purpose is real and documented, but it asks for broad shared account authority and silently self-updates executable code by default.
Review this carefully before installing. It can store and reuse a shared Beatra device token, spend credits through Beatra tools, read/list/cancel tasks, upload selected files, register installation metadata, and silently replace its own package files unless automatic updates are disabled with `python3 scripts/mcp_client.py update --auto off`. Install only if you trust Beatra’s account, update, and MCP-tool authorization model for more than this single image workflow.
scripts/authorize.py:34Overprivileged Device Token and Unrestricted MCP Tool Dispatch
scripts/mcp_client.py:937Silent Automatic Replacement of Executable Package Code Without Independent Release Signatures
tasks:read and tasks:cancel are not obviously needed for an image preflight helper and may allow the skill to inspect or interfere with other user operations. In a shared account context, this can expose metadata or disrupt unrelated workloads.
The skill's claimed business purpose does not match referenced uninstall, revocation, and local state deletion behavior. Combining account/session cleanup and package-removal operations with a routine image workflow creates opportunities for destructive actions against local configuration and shared credentials under the guise of normal ecommerce assistance.
The skill's claimed business purpose does not match referenced uninstall, revocation, and local state deletion behavior. Combining account/session cleanup and package-removal operations with a routine image workflow creates opportunities for destructive actions against local configuration and shared credentials under the guise of normal ecommerce assistance.
The skill's claimed business purpose does not match referenced uninstall, revocation, and local state deletion behavior. Combining account/session cleanup and package-removal operations with a routine image workflow creates opportunities for destructive actions against local configuration and shared credentials under the guise of normal ecommerce assistance.
Referenced artifact was not completely inspected
Use the bundled `scripts/mcp_client.py` to upload local media and call the
Referenced artifact was not completely inspected
Use the bundled `scripts/mcp_client.py` to upload local media and call the
Referenced artifact was not completely inspected
Use the bundled `scripts/mcp_client.py` to upload local media and call the
Referenced artifact was not completely inspected
Use the bundled `scripts/mcp_client.py` to upload local media and call the
Silent automatic download and installation of new releases is a strong supply-chain and local integrity risk, especially for a skill whose expected function is just marketplace image preflight/editing. If the update channel, package signing, or distribution path is compromised, arbitrary new behavior could be introduced without a fresh review or user approval.
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
```
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
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
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
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
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
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
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
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
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
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
```
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
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
```
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
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
```
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
The skill requests a very broad OAuth scope set, including artifacts, multiple media-generation domains, task management, and wallet spending, far beyond what an image preflight reviewer would need. Excessive privileges violate least privilege and materially increase blast radius if the skill, its dependencies, or stored token are abused.
tasks:read and tasks:cancel are not obviously needed for an image preflight helper and may allow the skill to inspect or interfere with other user operations. In a shared account context, this can expose metadata or disrupt unrelated workloads.
The file implements substantial behavior unrelated to the advertised marketplace image preflight skill, including package self-update, installation registration, inventory recording, credential handling, and remote tool mediation. In a skill context, this expands the trust boundary far beyond the stated purpose and creates an unnecessary remote code/update channel plus telemetry surface that could be abused if the vendor infrastructure, manifests, or package pipeline are compromised.
The client records a local skill inventory and performs installation registration telemetry to a remote service without being part of the core marketplace image workflow. This creates undisclosed persistence and tracking behavior, exposing what skills are installed, where they are installed, package versions, and platform context, which is particularly risky in an agent ecosystem where users expect narrowly scoped behavior.
Self-modification/self-update is a real security concern in this skill context because the code can replace local package files from a remote source, which is unrelated to basic marketplace image analysis. This materially increases the blast radius of any supply-chain compromise and makes the skill capable of changing its own behavior after installation.
)
update = subparsers.add_parser(
"update",
help="Check, install, or configure Beatra package self-updates",
)
update.add_argument(
"--check",
The uninstall script manages a shared Beatra device credential and can trigger remote authorization revocation, behavior that is unrelated to a marketplace image preflight skill’s stated purpose. Even if framed as uninstall hygiene, this gives the skill package authority over host-level shared authentication state, which is a sensitive cross-skill capability that could disrupt other installed skills or remove access unexpectedly.
The script declares and later removes files in ~/.beatra including credentials and shared installation metadata for all skills, not just this package. Because the skill’s declared purpose is marketplace image review, access to and deletion of shared local credential/state files is over-privileged and could break unrelated functionality or destroy security-relevant state.
The presence of credentials.json in the set of files managed by the skill indicates the package is designed to handle shared credentials. For a marketplace image preflight skill, this is unnecessary credential access and expands the blast radius from normal content processing into host authentication compromise or service disruption.
#: 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",
No suspicious patterns detected.