T05 · Unauthorized Access and Privilege Escalation
- Location
scripts/authorize.py:31- Finding
Excessive Full-Scope Device Authorization
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
The skill’s creative workflow is coherent, but it requests and stores a very powerful shared Beatra token, exposes broad remote tool execution, and silently self-updates installed files.
Install only if you trust Beatra and its update channel with a shared full-scope device credential. Before use, understand that the token is stored locally, may authorize spending and unrelated media/tool operations if misused, and the package can silently update itself unless you disable auto updates. Be especially careful on shared Windows profiles and review every paid lookup or generation confirmation before approving.
scripts/authorize.py:31Excessive Full-Scope Device Authorization
scripts/mcp_client.py:1463Unrestricted MCP Tool Dispatch Bypasses Skill-Level Capability Boundaries
scripts/mcp_client.py:969Silent Remote Package Replacement Without Independently Anchored Signatures
scripts/authorize.py:334Unnecessary Hostname and Agent-Environment Telemetry
scripts/mcp_client.py:231Remote Upload Grant Can Direct User Files to Any HTTPS Host
scripts/mcp_client.py:1044Windows Credential Confidentiality Requirement Is Not Enforced
The documented uninstall/disconnect behaviors involve inspecting local Beatra state, revoking tokens over the network, and deleting local credential and installation files, but these administrative functions are not reflected in the declared purpose. Undisclosed destructive or credential-affecting operations are risky because users may trigger account/state changes without informed consent.
The documented uninstall/disconnect behaviors involve inspecting local Beatra state, revoking tokens over the network, and deleting local credential and installation files, but these administrative functions are not reflected in the declared purpose. Undisclosed destructive or credential-affecting operations are risky because users may trigger account/state changes without informed consent.
The documented uninstall/disconnect behaviors involve inspecting local Beatra state, revoking tokens over the network, and deleting local credential and installation files, but these administrative functions are not reflected in the declared purpose. Undisclosed destructive or credential-affecting operations are risky because users may trigger account/state changes without informed consent.
Referenced artifact was not completely inspected
Use only this package's bundled `scripts/mcp_client.py` for remote operations.
Referenced artifact was not completely inspected
Use only this package's bundled `scripts/mcp_client.py` for remote operations.
Referenced artifact was not completely inspected
Use only this package's bundled `scripts/mcp_client.py` for remote operations.
Referenced artifact was not completely inspected
Use only this package's bundled `scripts/mcp_client.py` for remote operations.
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
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 requested OAuth scope is far broader than the skill's declared purpose, including wallet spending, voice write, music/video generation, tasks control, and broad artifacts access. Overbroad authorization violates least privilege; if the credential is abused or the backend is compromised, the token could be used for unrelated sensitive actions under the user's account.
This code writes a long-lived bearer access token to a local credentials.json file. While local token storage is common, in this skill it is coupled with an over-privileged scope set, so compromise of the file would grant broad account capabilities well beyond note generation; the danger is amplified by the token's sensitive power rather than by the file write alone.
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,
{
The client contains a full self-update mechanism that downloads remote discovery metadata, manifests, and archives, then replaces files under the local installation root. For a skill whose stated purpose is generating local-business posts, self-modifying package logic substantially expands the trust boundary and creates a supply-chain/persistence path if the update channel, publisher account, or signing assumptions are compromised.
The CLI exposes a generic tool invocation path that reads arbitrary JSON from stdin and forwards it as a tools/call request to the remote MCP service. This exceeds the declared narrow skill purpose and can turn the package into a general remote action proxy, increasing the chance of misuse, unauthorized capability exposure, or policy bypass if broader tools are reachable through the same credential.
The explicit self-update command exposes intentional self-modification of the installed package, including downloading and replacing local files. In the context of a content-generation skill, this is unnecessary and dangerous because it enables persistence and post-install behavior changes through a remote-controlled update path rather than through the host platform's normal package management.
)
update = subparsers.add_parser(
"update",
help="Check, install, or configure Beatra package self-updates",
)
update.add_argument(
"--check",
The skill declares no explicit tool scope or allowed-tools restrictions even though its instructions clearly rely on shell, file, network, and environment capabilities. That increases the blast radius of prompt injection, tool misuse, and accidental execution because the runtime permissions are broader and less transparent than users would expect.
The skill includes silent automatic update and package replacement capability unrelated to its core note-making function. Even with integrity checks, self-updating code changes the trusted execution surface after installation and creates a supply-chain risk if the update channel, signing assumptions, or packaged client are ever compromised.
Automatic updates are enabled silently and are not clearly disclosed in the main description, so users may not realize code can change without separate approval. This weakens informed consent and makes downstream supply-chain or behavior changes more dangerous because the trust boundary shifts after installation.
The manifest explicitly advertises reading Xiaohongshu notes, top comments, and account posts, but it does not disclose what data is accessed, how consent is obtained, how long data is retained, or whether third-party content is stored or reused. In a skill that performs external platform research, this omission can mislead users about privacy exposure and cause unauthorized or non-compliant handling of scraped or account-linked content.
No suspicious patterns detected.