CVE-2026-11717
Description
An authentication bypass vulnerability exists in the generic opaque token validation path (validateOpaqueToken) of googleapis/mcp-toolbox.
When verifying an unparsed opaque token via an OAuth 2.0 introspection endpoint (RFC 7662), the toolbox decodes the response into an introspectResp struct where the Active field is declared as a pointer to a boolean (*bool). The code only explicitly rejects a token if the response contains a populated active field set to false (if introspectResp.Active != nil && !*introspectResp.Active). If an introspection endpoint responds with a payload that completely omits the mandatory active key, the internal variable remains nil, causing the conditional check to short-circuit. As a result, Toolbox accepts authorization tokens missing the "active" field, granting access to protected tools and underlying data sources.
AI Insight
LLM-synthesized narrative grounded in this CVE's description and references.
Affected products
1Patches
Vulnerability mechanics
Root cause
"Missing nil-pointer guard on the `active` field in the opaque token introspection response allows authentication bypass when the field is omitted."
Attack vector
An attacker can craft an opaque token and submit it to a Toolbox instance configured with a generic OAuth 2.0 introspection endpoint. If the introspection server responds with a JSON payload that omits the `active` field (or returns a response where `active` is absent), the nil pointer check in `validateOpaqueToken` passes without rejecting the token. This allows the attacker to bypass authentication and gain access to protected MCP tools and underlying data sources. The attack requires network access to the Toolbox server and knowledge of a valid introspection endpoint that can be induced to return an incomplete response.
Affected code
The vulnerability resides in the `validateOpaqueToken` function within the generic OAuth token validation path (`internal/auth/generic/`). The `introspectResp` struct declares the `Active` field as a pointer to a boolean (`*bool`), and the code only rejects a token when `introspectResp.Active != nil && !*introspectResp.Active`. If the introspection endpoint omits the mandatory `active` key, the pointer remains `nil`, the condition short-circuits, and the token is accepted. The patch [patch_id=6466784] adds an explicit check for a missing `active` field and enforces `iss` (issuer) validation.
What the fix does
The patch [patch_id=6466784] adds a new test case `missing active claim` that expects an error when the introspection response lacks the `active` field. The corresponding production code change (not fully shown in the diff but implied by the test) ensures that `validateOpaqueToken` returns a `token is not active` error when the `active` field is missing or nil, rather than silently accepting the token. Additionally, the patch enforces `iss` (issuer) validation for generic OAuth tokens and separates Google-specific token validation into its own code path, preventing the same nil-pointer bypass from affecting Google token validation.
Preconditions
- configThe Toolbox instance must be configured with a generic OAuth auth service that uses an introspection endpoint.
- networkThe attacker must have network access to the Toolbox server.
- inputThe introspection endpoint must be reachable and return a response that omits the 'active' field.
Generated on Jun 18, 2026. Inputs: CWE entries + fix-commit diffs from this CVE's patches. Citations validated against bundle.
References
1News mentions
0No linked articles in our index yet.