Search the Atlas

Search risks, controls, and glossary terms

HighAgenticOAuth Scope Misbinding in MCPDemonstrated

OAuth Scope Misbinding in MCP

Agent Autonomy

Description

MCP 1.0 added OAuth 2.1 but the mapping between MCP tool capabilities and OAuth scopes is implementer-defined. Common bug: server requests a coarse scope (e.g. `repo` on GitHub) and exposes 20 tools, all of which inherit that scope. No mechanism exists in the spec to require per-tool scope. Result: tool that "reads issues" has the same authority as one that "deletes repos." Distinct from ZYR-AU-006 (Privilege Creep) by mechanism — Privilege Creep is silent expansion over time; this is a configuration-time vacuum.

Example scenario

GitHub MCP server requests `repo` scope. Among its 22 tools, 18 only need `public_repo` or read-only; 4 actually need `repo`. All 22 inherit `repo` because there is no per-tool scope mechanism. A TPA-D in any of the 22 tool descriptions can pivot the full scope.

Real-world evidenceDemonstrated

Red-team evaluations of autonomous AI agents such as AutoGPT-class systems and tool-augmented LLMs have repeatedly demonstrated that agents invoke external tools and act on unvalidated outputs, including in security research published by Anthropic, DeepMind, and academic groups; however, a large-scale confirmed production incident specifically attributable to agentic tool invocation without output validation is not yet documented.

Primary mitigations

  • Per-tool OAuth scope declaration enforced by client
  • deny-by-default on coarse-scoped tools
  • scope-narrowing proxy in front of MCP server
  • explicit OAuth scope decoration in MCP server manifest

Detection signals

Single OAuth scope used across > 3 tools on a server; tool capabilities that obviously exceed declared scope (e.g. write tool with read-only scope); audit log of scope-to-tool ratios per server

Mitigating controls

6
Dual coverage

Related risks in Agent Autonomy