mcp-memory-service fixes a critical OAuth bypass: open client registration handed out read-write tokens without the API key
The mcp-memory-service project published advisory GHSA-5p27-64mv-pr73 on 2026-08-23, rated critical at CVSS 9.1, and shipped the fix in v11.8.2 the same morning. When OAuth was enabled with Dynamic Client Registration left open, the default in that configuration, an unauthenticated caller could register a public client and replay its returned credentials against the token endpoint with grant_type=client_credentials, receiving a read-write bearer token that bypassed the owner API key entirely. OAuth is off by default, so default installs were not exposed. Versions v10.20.0 through v11.8.1 are affected; a CVE has been requested.
The mcp-memory-service project published a critical advisory,
GHSA-5p27-64mv-pr73, on 2026-08-23 and released the fix in v11.8.2
the same morning. Rated 9.1 on CVSS 3.1 with a CVE requested, the
finding is an unauthenticated authorization bypass through the
server's own OAuth surface: an attacker could register a public
client via /oauth/register, then replay the returned credentials
against /oauth/token with grant_type=client_credentials and
receive a read-write bearer token, bypassing the owner API key
entirely.
Exposure required a specific but self-reinforcing configuration.
MCP_OAUTH_ENABLED defaults to false, so a default install was never
exposed; but once OAuth is enabled, open Dynamic Client Registration
is the default, because MCP_DCR_REGISTRATION_KEY starts unset. The
release notes are specific about the mechanics, describing four
defects that lined up: the registration endpoint issued a
client_secret even to public clients that registered with
token_endpoint_auth_method=none, the client_credentials grant
handler checked neither the client's registered grant types (RFC 6749
section 4.4) nor its authentication method, and the client store
hashed an absent secret as the SHA-256 of the empty string, which the
notes describe as not exploitable on its own since the comparison
rejects empty input first. The fix copies the pattern the
authorization_code grant already used, and public clients no longer
receive a client_secret in their registration response at all.
Versions v10.20.0 through v11.8.1 are affected. Operators who cannot
upgrade are directed to set MCP_DCR_REGISTRATION_KEY or disable
OAuth. The report came privately from Sergio Rodriguez Jove with a
working proof of concept.
This is the same project whose unauthenticated document API, CVE-2026-50027 at CVSS 9.8, reached NVD on 2026-08-14, and the advisory lands during an eventful stretch for the project's hosting: its v11.8.1 release notes state that development moved to Codeberg at the end of May 2026 and that the GitHub repository now operates as a mirror.
How was this verified, and what are the sources?
Published · last verified · confidence 1.00.
- Repository advisory GHSA-5p27-64mv-pr73 (published 2026-08-23, severity critical) - "OAuth client_credentials grant ignores the client's registered grant types and authentication method, allowing an unauthenticated authorization bypass" - accessed
- mcp-memory-service v11.8.2 release notes (published on GitHub 2026-08-23) - CVSS 3.1 9.1 critical, CVE requested; exposure requires MCP_OAUTH_ENABLED=true with MCP_DCR_REGISTRATION_KEY unset, which is the default when OAuth is on, while MCP_OAUTH_ENABLED itself defaults to false; describes the four lined-up defects in registration.py and the client_credentials grant handler, names the affected range v10.20.0 through v11.8.1, credits Sergio Rodriguez Jove with a private report and working proof of concept, lists the mitigations for operators who cannot upgrade, and records the behaviour change that a public client's registration response no longer contains a client_secret - accessed
- PyPI JSON metadata for mcp-memory-service, fetched 2026-08-25 - the current release is 11.8.4, above the patched version - accessed