CVE-2026-9800: Keycloak-policy-enforcer: keycloak policy enforcer: authorization bypass via incorrect uri comparison
A flaw was found in Keycloak Policy Enforcer. This vulnerability allows any authenticated user to bypass all authorization policies, including role, scope, and User-Managed Access (UMA) permission checks. By including the configured access-denied page path within a request URL, either as a path segment or a query parameter, an attacker can gain unauthorized access to protected resources.
Other sources
Summary
PolicyEnforcer.isDefaultAccessDeniedUri uses a substring match (String.contains) instead of an exact path comparison to determine whether an incoming request targets the configured access-denied page. When the check matches, the request is short-circuited as granted — skipping all role checks, scope checks, and UMA permission evaluation. Any authenticated user can bypass every authorization policy by including the on-deny-redirect-to value anywhere in the request URL (as a path segment or query parameter).
Requirements to exploit
Any authenticated user with a valid access token. No specific role, scope, or UMA permission required. The attacker needs to know the on-deny-redirect-to value, which defaults to /access-denied and is trivially discoverable by triggering a deny and observing the redirect location.
Component affected: org.keycloak.keycloak-policy-enforcer
Version affected: 26.0.5 (latest on Maven Central) and all prior versions containing PolicyEnforcer.isDefaultAccessDeniedUri
Patch available: no
File issue trackers? Yes, for all supported release streams
CVSS: CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:N (8.1 High)
Embargo: yes (High severity, complete authorization bypass. Suggested date: 19-Aug-2026)
Acknowledgement:
Bas Levering <basdaniel3>
Steps to reproduce
1. Deploy an application using keycloak-policy-enforcer with on-deny-redirect-to set to /access-denied (or any value) 2. Obtain a valid access token for any authenticated user (no specific roles required) 3. Send a request to a protected endpoint with /access-denied appended to the path: GET /api/protected-resource/access-denied 4. Alternatively, append it as a query parameter: GET /api/protected-resource?x=/access-denied 5. The request is granted without any authorization evaluation — no role check, no scope check, no UMA permission check runs
— Red Hat
Affected Software
Event History
Frequently Asked Questions
What is the severity of CVE-2026-9800?
CVE-2026-9800 has a high severity score of 8.1.
What does CVE-2026-9800 allow an attacker to do?
CVE-2026-9800 allows authenticated users to bypass authorization policies, including role and scope checks.
Which software is affected by CVE-2026-9800?
CVE-2026-9800 affects the Keycloak Policy Enforcer component of Keycloak.
How can I mitigate CVE-2026-9800?
Mitigation for CVE-2026-9800 can be achieved by updating to the latest version of Keycloak that addresses this vulnerability.
What is the impact of exploiting CVE-2026-9800?
Exploiting CVE-2026-9800 could lead to unauthorized actions by allowing users to access resources without proper permissions.