Back to skill

Security audit

Elder Checkup Voice Pack

Security checks for vulnerabilities and agentic risk

Overview

The skill matches its voice-clip purpose in part, but it also requests broad Beatra account powers and silently updates its own code, so it belongs in Review before installation.

Install only if you are comfortable granting this package a broad shared Beatra device authorization and accepting default silent package updates. Prefer disabling automatic updates with the documented command and verify that Beatra account permissions and billing controls are acceptable before using paid generation or cloning.

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:31
Finding

Excessive OAuth Scope and Unrestricted MCP Tool Dispatch

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 Skill's declared functionality is elder-checkup voice production, including text-to-speech, optional voice cloning, media upload, model and voice lookup, task retrieval, and limited billing operations. However, the authorization request includes permissions for unrelated image, video, and music generation, general wallet spending, artifact access, and task cancellation. The bundled MCP client also accepts an arbitrary tool name from the command line and forwards it to the remote MCP server without enforcing a package-specific allowlist. Consequently, local safety depends entirely on the bearer token's broad server-side permissions and on higher-level instructions being followed correctly. T ...[truncated 1656 chars]
Remediation
View remediation

T03 · Remote Payload Retrieval and Execution

Error
Location
scripts/mcp_client.py:969
Finding

Silent Self-Update Permits Remotely Controlled Code Replacement Without Independent Publisher Signatures

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"]: ...[truncated 4006 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 (39)

Context-Inappropriate Capability

Critical
Category
Not specified by scanner
Confidence
98% confidence
Finding

Task read/cancel permissions are not obviously necessary for a straightforward clip-pack generation workflow. Granting them may let the skill inspect or interfere with unrelated account tasks, expanding access beyond the user's likely expectations.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
99% confidence
Finding

The skill is presented as generating elder-checkup audio, but accompanying references indicate uninstall/revocation behavior that reads and modifies local Beatra state, inspects installed inventory, revokes credentials remotely, and deletes local files. Even if intended for lifecycle management, bundling destructive package-management behavior into a content-generation skill can lead to unexpected system changes and credential disruption if invoked incorrectly or maliciously.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
99% confidence
Finding

The skill is presented as generating elder-checkup audio, but accompanying references indicate uninstall/revocation behavior that reads and modifies local Beatra state, inspects installed inventory, revokes credentials remotely, and deletes local files. Even if intended for lifecycle management, bundling destructive package-management behavior into a content-generation skill can lead to unexpected system changes and credential disruption if invoked incorrectly or maliciously.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
99% confidence
Finding

The skill is presented as generating elder-checkup audio, but accompanying references indicate uninstall/revocation behavior that reads and modifies local Beatra state, inspects installed inventory, revokes credentials remotely, and deletes local files. Even if intended for lifecycle management, bundling destructive package-management behavior into a content-generation skill can lead to unexpected system changes and credential disruption if invoked incorrectly or maliciously.

Content

No source excerpt is available for this finding.

Credential Access

High
Category
Privilege Escalation
Confidence
89% confidence
Finding

The manifest declares use of a device-bearer authentication scheme and a local credential file path, indicating the skill can access bearer credentials for a remote MCP service. Even if common in integrations, this is sensitive because a deceptively described skill with unrelated ledger references could leverage those credentials to access protected services or account data beyond user expectations.

Content

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

json
},
  "mcp": {
    "authentication": "device-bearer",
    "credential_file": "~/.beatra/credentials.json",
    "name": "beatra",
    "transport": "streamable-http",
    "url": "https://mcp.beatra.ai/mcp"

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 authorization flow requests a very broad OAuth scope set, including artifacts, images, videos, music, speech, voice management, wallet spending, and task operations, while the skill is described as converting a written elder-checkup schedule into voice clips. This violates least-privilege and means a compromise, misuse, or deceptive deployment of the skill could grant account capabilities far beyond what users would reasonably expect from this workflow.

Content

No source excerpt is available for this finding.

Context-Inappropriate Capability

High
Category
Not specified by scanner
Confidence
97% confidence
Finding

Task read/cancel permissions are not obviously necessary for a straightforward clip-pack generation workflow. Granting them may let the skill inspect or interfere with unrelated account tasks, expanding access beyond the user's likely expectations.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

High
Category
Not specified by scanner
Confidence
97% confidence
Finding

The client contains extensive self-update, package replacement, rollback, locking, and installation-state logic unrelated to converting schedules into voice clips. Even though the update path includes validation checks, it still grants the package the ability to silently replace its own code on disk, materially expanding the trust boundary and enabling post-install behavior changes outside the user's expected task scope.

Content

No source excerpt is available for this finding.

Self-Modification

High
Category
Rogue Agent
Confidence
94% confidence
Finding

The exposed self-update capability means the package can modify its own installed code, which is fundamentally risky for a skill whose stated purpose is voice clip generation. Even with checksum and origin checks, self-modification creates a supply-chain and trust-boundary hazard because compromised update infrastructure or future package changes can alter behavior after initial review.

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
99% confidence
Finding

The file implements device credential and installation-state management for Beatra, including shared connection handling and remote revocation, which is unrelated to the skill's advertised purpose of producing elder checkup voice clips. This mismatch is dangerous because it gives a content-generation skill authority over shared authentication state and other installed skills, expanding blast radius far beyond what users would reasonably expect.

Content

No source excerpt is available for this finding.

Credential Access

High
Category
Privilege Escalation
Confidence
90% confidence
Finding

Referencing credentials.json as part of the set of removable shared state files indicates this skill is designed to manipulate authentication material and local credential storage. Even without exfiltration, access to credential files by a schedule-to-audio skill is unnecessary and increases risk of accidental deletion, misuse, or future abuse if the script is modified or invoked unexpectedly.

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

This code can submit a bearer token to a remote revocation endpoint and then delete shared local connection files in ~/.beatra. In the context of a voice-pack skill, that capability is unjustified and dangerous because it can disrupt all skills using the shared device authorization and alter credential state outside the skill's business purpose.

Content

No source excerpt is available for this finding.

Credential Access

High
Category
Privilege Escalation
Confidence
95% confidence
Finding

The _device_token function reads an access token directly from ~/.beatra/credentials.json so it can be used for remote revocation. Direct token access is sensitive and unjustified for a voice-clip generation skill; compromise or misuse of this code path could enable unauthorized actions against the shared Beatra device authorization.

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 exposes effective capabilities including environment, filesystem, shell, and network access without an explicit tool-scope declaration. That makes the trust boundary unclear and can permit broader-than-necessary execution paths, increasing the chance of unintended local access or remote actions if the skill or bundled client is abused.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

Medium
Category
Not specified by scanner
Confidence
96% confidence
Finding

The documentation says the skill turns schedules into voice clips, but it also includes an automatic self-update mechanism that downloads and replaces package files. Any network-capable self-update path increases supply-chain risk and can change executable behavior after approval, especially when the update function is unrelated to the core user-facing purpose.

Content

No source excerpt is available for this finding.

Context-Inappropriate Capability

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

Automatic network-based software update capability is not necessary for generating voice clips and therefore violates least-functionality expectations. In this context, the feature makes the skill more dangerous because a low-risk office-content workflow now implicitly includes code download, installation, and replacement behavior that could be abused through supply-chain compromise or policy bypass.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The manifest presents a benign elder-checkup voice-pack skill, but the changelog references balance and ledger operations that are unrelated to the stated purpose. This mismatch is a strong indicator of hidden financial or account-oriented capabilities and creates a deceptive trust boundary where users may authorize a voice tool that can interact with monetary records.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
91% confidence
Finding

The manifest hardcodes localized content for English, Japanese, and Chinese, but provides no natural-language indication that users can choose their preferred language or that locale selection is optional. Under the policy, forcing a specific language or locale without explicit user opt-in is a reportable natural-language policy concern.

Content

No source excerpt is available for this finding.