Add 10.4.10: bind MCP client consent and authorization to the server's connection endpoint (#1119) - #1127
Open
aminekhazraj wants to merge 1 commit into
Open
Conversation
…s connection endpoint (OWASP#1119)
aminekhazraj
force-pushed
the
add-10.4.10-endpoint-binding
branch
from
August 28, 2026 17:39
ccf58f3 to
ed59e85
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Closes #1119
Summary
Adds 10.4.10 to C10.4: MCP client consent and authorization must be bound to the server's connection endpoint, with user re-approval required when that endpoint changes. Wording is @ottosulin's from the issue thread; level (L2) and placement (C10.4, alongside 10.4.8 and 10.4.9) are as agreed there.
Changes
In 1.01-dev/en/0x10-C10-MCP-Security.md:
Background
10.4.8 binds client re-approval to what a tool declares; nothing binds it to where the client connects. A client that has approved server S retains that approval when S's connection endpoint changes — including a path-only rebind on an already-allow-listed host, which leaves tool definitions byte-identical, so 10.4.8 and 10.1.2 both remain satisfied while cached consent, credentials, and tool-call payloads flow to the new destination. Full analysis and testability procedure in #1119.
Why "connection endpoint" rather than "canonical URI": the MCP spec permits a client to use
https://hostas the canonical URI for a server athttps://host/tenant-a/mcp(most-specific is a SHOULD), so a path-only rebind can leave the canonical URI — and with it theresourcevalue and token audience — unchanged. The connection endpoint is the URL the client actually opens the transport connection to, as configured, which may be more specific than the canonical URI the client derives for token audience. Neither term currently appears in C10, so the definition is recorded here.Rationale
issuerand forces re-registration when the AS changes. This requirement binds user consent and tool-call data to the resource server's endpoint. An AS-keyed rule does not fire when the server endpoint moves and the AS stays put. SEP-2352 is precedent for the principle (destination changed, so prior state must not carry), not coverage of this case. The DCR deprecation reinforces the gap: CIMD client IDs are "portable across authorization servers" with no re-registration when the AS changes.issvalidation — simple string comparison per RFC 3986 §6.2.1, with no scheme or host case folding, default-port elision, trailing-slash, or percent-encoding normalisation before comparison. That rule is written for mix-up defence, so it is cited as discipline, not as coverage of endpoints.Scope
One requirement,
1.01-devonly. Does not restate token-audience or registration-binding obligations already in the MCP spec; it verifies the client-side consent binding the spec does not oblige.References