T05 · Unauthorized Access and Privilege Escalation
- Location
scripts/authorize.py:34- Finding
Over-Privileged 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}, ) ``` ### Technical Analysis The declared Skill functionality requires storyboard planning, reference uploads, image generation or editing, and related task management. However, authorization requests a shared token that additionally permits video, music, speech, voice creation and modification, artifact reads, task cancellation, and wallet spending. The generic `call` command accepts any caller-supplied MCP tool name and forwards it without checking that the requested tool belongs to the storyboard workflow. Consequently, the local client does not enforce the functional boundary described by the Skill. This violates least privilege at two layers: 1. The issued bearer credential has capabilities unrelated to storyboard generation. 2. The client does not restrict which serv ...[truncated 1167 chars]- Remediation
View remediation
