T05 · Unauthorized Access and Privilege Escalation
- Location
scripts/authorize.py:33- Finding
Overprivileged Shared Credential 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}, ) ``` ```python call = subparsers.add_parser("call", help="Call one tool with a JSON object on stdin") call.add_argument("tool_name") ``` ### Technical Analysis The Skill's declared functionality requires speech synthesis, optional voice cloning, authorized sample upload, voice and model discovery, task polling, and limited billing queries. However, authorization requests a shared bearer token with substantially broader privileges, including: - Image, video, and music generation. - General artifact read and write access. - Wallet spending. - Task cancellation. - Broad `mcp:tools` access. The bundled client compounds this excessive authorization by accepting an arbitrary MCP tool name from the command line. `_run_command` forwards that name direc ...[truncated 1655 chars]- Remediation
View remediation
