CVE-2026-0976
Java vulnerability analysis and mitigation

Overview

CVE-2026-0976 is an improper input validation vulnerability in Keycloak (specifically the org.keycloak/keycloak-quarkus-server component) that allows remote attackers to bypass proxy-level path filtering by crafting URLs with RFC-compliant matrix parameters. Because Keycloak's JAX-RS routing layer accepts matrix parameters (e.g., ;param) in URL path segments while common reverse proxy configurations may ignore or mishandle them, an attacker can mask path segments to reach administrative or sensitive endpoints believed to be externally inaccessible. The vulnerability was disclosed on January 15, 2026, and carries a CVSS v3.1 base score of 3.7 (Low), assigned by Red Hat (Red Hat CVE, Red Hat Bugzilla).

Technical details

The root cause is classified as CWE-20 (Improper Input Validation): Keycloak's JAX-RS routing layer processes RFC-compliant matrix parameters (semicolon-delimited segments such as /realms;abc/master/account) in URL paths, but many reverse proxy configurations strip or ignore these parameters when evaluating path-based access control rules. This discrepancy creates a parsing inconsistency that an attacker can exploit to craft requests that appear to target a benign path at the proxy layer while actually reaching a restricted endpoint on the Keycloak backend. Exploitation is network-based, requires no authentication, and is contingent on the specific reverse proxy configuration deployed in front of Keycloak (Red Hat Bugzilla, Red Hat CVE).

Impact

Successful exploitation results in limited confidentiality impact — specifically, unauthorized read access to administrative or sensitive Keycloak endpoints that are intended to be shielded by reverse proxy path filtering rules. Integrity and availability are not directly affected. The practical risk depends heavily on what sensitive endpoints are exposed and whether additional authentication controls exist on those endpoints; in some configurations, this could allow an unauthenticated attacker to probe or interact with Keycloak admin APIs (Red Hat Bugzilla, Red Hat CVE).

Exploitation steps

  1. Reconnaissance: Identify internet-facing Keycloak instances (specifically those running keycloak-quarkus-server) that are fronted by a reverse proxy (e.g., nginx, Apache HTTP Server, HAProxy) enforcing path-based access restrictions.
  2. Identify restricted endpoints: Determine which Keycloak endpoints (e.g., admin console paths, management APIs) are expected to be blocked by the proxy's path filtering rules.
  3. Craft matrix parameter payload: Construct a URL that embeds RFC-compliant matrix parameters in a path segment to obfuscate the true path, for example: GET /realms;bypass=1/master/account or GET /admin;foo/master/console.
  4. Send crafted request: Submit the crafted HTTP request directly to the Keycloak instance through the reverse proxy. The proxy evaluates the path without the matrix parameter and may not match its block rule, forwarding the request to Keycloak.
  5. Access restricted endpoint: Keycloak's JAX-RS layer parses the matrix parameter correctly and routes the request to the intended (restricted) endpoint, potentially exposing administrative or sensitive functionality (Red Hat Bugzilla).

Indicators of compromise

  • Network: HTTP requests to Keycloak containing semicolons in URL path segments (e.g., /realms;param=value/, /admin;bypass/) that would not normally appear in legitimate traffic.
  • Logs: Keycloak access logs showing requests with matrix parameters (;) in path segments targeting admin or management endpoints; reverse proxy access logs showing requests forwarded to Keycloak that should have been blocked by path filtering rules.
  • Logs: Discrepancies between reverse proxy access logs and Keycloak application logs for the same request paths, indicating path parsing inconsistencies.

Mitigation and workarounds

A patch has been tracked under Red Hat Bugzilla bug 2429869, with the fix targeting org.keycloak/keycloak-quarkus-server; administrators should upgrade to the fixed version once released. As a workaround, configure the reverse proxy to normalize or strip matrix parameters from URL paths before applying path-based access control rules — for example, in nginx, use rewrite rules to remove semicolon-delimited segments. Additionally, apply defense-in-depth by enforcing authentication requirements directly on sensitive Keycloak endpoints rather than relying solely on proxy-level path filtering (Red Hat Bugzilla, Red Hat CVE).

Additional resources


SourceThis report was generated using AI

Related Java vulnerabilities:

CVE ID

Severity

Score

Technologies

Component name

CISA KEV exploit

Has fix

Published date

GHSA-p279-2cqp-84jgCRITICAL9.6
  • Java logoJava
  • org.openidentityplatform.opendj:opendj-server-legacy
NoYesJul 24, 2026
GHSA-fp43-vj7g-pg92HIGH7.5
  • Java logoJava
  • org.omnifaces:omnifaces
NoYesJul 24, 2026
GHSA-7ppr-r889-mcf2HIGH7.5
  • Java logoJava
  • org.http4s:http4s-blaze-server_2.12
NoYesJul 24, 2026
GHSA-mhvj-jhpq-885vHIGH7.4
  • Java logoJava
  • org.http4s:http4s-blaze-server_2.13
NoYesJul 24, 2026
GHSA-46q4-43ph-c6frHIGH7.4
  • Java logoJava
  • org.http4s:blaze-http_2.12
NoYesJul 24, 2026

Free Vulnerability Assessment

Benchmark your Cloud Security Posture

Evaluate your cloud security practices across 9 security domains to benchmark your risk level and identify gaps in your defenses.

Request assessment

Get a personalized demo

Ready to see Wiz in action?

"Best User Experience I have ever seen, provides full visibility to cloud workloads."
David EstlickCISO
"Wiz provides a single pane of glass to see what is going on in our cloud environments."
Adam FletcherChief Security Officer
"We know that if Wiz identifies something as critical, it actually is."
Greg PoniatowskiHead of Threat and Vulnerability Management