T05 · Unauthorized Access and Privilege Escalation
- Location
scripts/authorize.py:33- Finding
Overprivileged Shared Authorization Token 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 declared purpose of this Skill is chapter-by-chapter webnovel audio generation, with optional narrator voice cloning. Its legitimate operations require speech generation, voice discovery, optional voice creation, authorized media upload, task reads, and read-only wallet information. The requested token nevertheless includes unrelated capabilities such as: - Image generation - Video generation - Music generation - Generic artifact reads and writes - Wallet spending - Task cancellation - Generic MCP tool access The bundled client accepts an arbitrary `tool_name` and forwards it to `tools/call` without a package-specific allowlist. Consequently, the client does not constrain ...[truncated 2033 chars]- Remediation
View remediation
