T05 · Unauthorized Access and Privilege Escalation
Error
- Location
- SKILL.md:245
- Finding
- User-Controlled AI Visibility Gate Can Be Bypassed## Vulnerability Details **File Location**: `SKILL.md`, lines 245–251 **Vulnerability Type**: Authorization and task-level consent bypass **Risk Level**: High ### Vulnerable Code ```markdown ## AI Visibility Gate By default, the MCP server only returns tasks where `aiEnabled: true`. Tasks with `aiEnabled: false` are invisible to MCP agents — they will not appear in `list_tasks`, `search_across_habitats`, `get_events_since`, or `get_task`. Users control this via a **"Send to AI"** button on each task card. When clicked, it sets `aiEnabled: true`, `assignee: 'ai'`, and `status: 'doing'`. - To see only AI-assigned tasks: `list_tasks { "assignee": "ai" }` - To see all AI-enabled tasks: `list_tasks {}` (default — only AI-enabled tasks are returned) - To explicitly include non-AI tasks: `list_tasks { "aiEnabled": false }` (override, useful for reporting) ``` ### Technical Analysis The skill describes `aiEnabled` and the user-operated **Send to AI** action as a task-level visibility and consent boundary. Tasks for which `aiEnabled` is false are explicitly characterized as invisible to MCP agents. However, the skill then provides an override that directs the agent to call `list_tasks` with `"aiEnabled": false`. If the MCP server honors this parameter for ordinary agent credentials, the agent can retrieve tasks that the user deliberately did not enable for AI access. A default client-side filter is not an effective authorization control when the same client can disable or invert it. This violates least privilege and makes the purported AI visibility gate dependent on agent compliance rather than server-side authorization. ### Attack Path 1. A user creates or retains a task with `aiEnabled: false` and does not select **Send to AI**. 2. The agent loads the Todokan skill and obtains access through a configured MCP credential. 3. Instead of relying on the default AI-enabled task listing, the agent invokes: ```json { "aiEnabled": false } ``` 4. Th ...[truncated 892 chars]
- Remediation
- ## Remediation Suggestions 1. Remove the instruction that agents can request tasks with `"aiEnabled": false`. 2. Enforce `aiEnabled: true` on the MCP server for all standard agent credentials, regardless of client-supplied filters. 3. Reject requests that explicitly set `aiEnabled` to false unless the credential has a separate, narrowly defined administrative scope. 4. If broader reporting is required, use a distinct tool or authorization scope and require explicit, informed user confirmation before every query. 5. Ensure related APIs—including `list_tasks`, `get_task`, `search_across_habitats`, `get_events_since`, document access, and comment access—apply the same server-side visibility policy. 6. Add authorization tests proving that ordinary planner and worker credentials cannot retrieve or infer non-AI-enabled tasks through direct IDs, filters, searches, event feeds, pagination, counts, or related-resource endpoints. 7. Record denied override attempts in security logs and monitor repeated attempts to access non-AI-enabled data.
