T05 · Unauthorized Access and Privilege Escalation
- Location
scripts/authorize.py:34- Finding
Overprivileged Device Credential and Unrestricted MCP Tool Invocation
- 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 function is sleep-story speech synthesis with optional voice cloning. Its legitimate requirements include speech generation, optional sample upload and voice cloning, model and voice discovery, task status reads, and limited wallet reads. The requested OAuth scope is substantially broader. It grants image, video, and music generation, general artifact access, wallet spending, voice writes, and task cancellation. These permissions are not all necessary for the declared sleep-story workflow. The bundled client compounds this issue by accepting an arbitrary MCP tool n ...[truncated 2193 chars]- Remediation
View remediation
