T05 · Unauthorized Access and Privilege Escalation
- Location
SKILL.md:245- Finding
User-Controlled AI Visibility Gate Can Be Bypassed
- Content
View full analysis
Vulnerability Details
File Location:
SKILL.md, lines 245–251
Vulnerability Type: Authorization and task-level consent bypass
Risk Level: HighVulnerable 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
aiEnabledand the user-operated Send to AI action as a task-level visibility and consent boundary. Tasks for whichaiEnabledis false are explicitly characterized as invisible to MCP agents.However, the skill then provides an override that directs the agent to call
list_taskswith"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
- A user creates or retains a task with
aiEnabled: falseand does not select Send to AI. - The agent loads the Todokan skill and obtains access through a configured MCP credential.
- Instead of relying on the default AI-enabled task listing, the agent invokes:
json { "aiEnabled": false } - Th ...[truncated 892 chars]
- A user creates or retains a task with
- Remediation
View remediation
Remediation Suggestions
- Remove the instruction that agents can request tasks with
"aiEnabled": false. - Enforce
aiEnabled: trueon the MCP server for all standard agent credentials, regardless of client-supplied filters. - Reject requests that explicitly set
aiEnabledto false unless the credential has a separate, narrowly defined administrative scope. - If broader reporting is required, use a distinct tool or authorization scope and require explicit, informed user confirmation before every query.
- 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. - 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.
- Record denied override attempts in security logs and monitor repeated attempts to access non-AI-enabled data.
- Remove the instruction that agents can request tasks with
