On this page · 8 sections
- SAML Broker Signature Bypasses: Login as Any User
- Account Takeover and Session Hijacking Paths in 26.8.2
- Delegated Admins Escalating to realm-admin
- Unauthenticated Denial of Service Through SAML and Themes
- All 52 CVEs by Release
- Upgrading Keycloak and Closing the Exposed Paths
- Checking a Keycloak Realm for the Affected Features
- Sources
Security release
Status as of 2026-11-13
24 CVEs
Google Brotli, keycloak-services
- First fixed in
- Google Brotli 1.0.10, 1.1.1, 1.2.1The earliest release on each line that fixes these CVEs. The release to install is in the article's upgrade steps.
- Exploited
- 1 of 24 · known exploited (CISA)
- Published
- 2026-09-16 – 2026-11-11
Most severe first
- CVE-2026-111497Critical9.2Out-of-Bounds Write in Google Brotli Decoder
- CVE-2026-112208High8.1Keycloak-services: keycloak-services: account takeover via stale sso_auth note in organization identity-first login
- CVE-2026-114232High8.1Keycloak-services: keycloak-services: uma protection api resourcetype field not validated — cross-owner resource access
- CVE-2026-92857High8.1Keycloak-services: keycloak-services: dcr protocol mapper config not validated, allowing iat holders to forge sub and au
- CVE-2026-96453High8.0Org.keycloak/keycloak-admin-cli: keycloak-admin-cli: kcadm custom truststore accepts arbitrary self-signed certificates
Show all 24 · 34 more named
- CVE-2026-103112High7.5Keycloak-services: keycloak-services: account takeover via authentication race using reset-credentials path
- CVE-2026-107123High7.5Keycloak-services: keycloak-services: unauthenticated cpu denial of service via saml xml datetime and duration parsing
- CVE-2026-107602High7.5Keycloak-services: keycloak-services: unauthenticated cpu exhaustion via saml 1.1 keyinfo infinite loop
- CVE-2026-110931High7.5Keycloak-services: keycloak-services: unauthenticated jvm termination via saml 1.1 authoritybinding parsing loop
- CVE-2026-110932High7.5Keycloak-services: keycloak-services: unauthenticated persistent disk exhaustion via theme gzip cache
- CVE-2026-93998High7.4Keycloak-core: keycloak-core: saml adapter does not bind signed assertions to the configured identity provider issuer
- CVE-2026-97847High7.1Keycloak-services: keycloak-services: client manager can substitute sessionless token principal via hardcoded-claim mapp
- CVE-2026-109081Medium6.8Keycloak-services: keycloak-services: injection of roles into realm default-roles via dcr endpoint
- CVE-2026-97174Medium6.8Keycloak-services: keycloak-services: ciba sub parameter injection causes attacker authentication to issue victim tokens
- CVE-2026-96547Medium6.5Keycloak-services: keycloak-services: dcr registration-time claim-path gap allows forging realm_access.roles
- CVE-2026-97848Medium6.5Keycloak-services: keycloak-services: protocol mapper with jsontype=json bypasses token sanitization
- CVE-2026-107124Medium6.4Keycloak-services: keycloak-services: oidc logout endpoint session fixation via id_token_hint leading to account takeove
- CVE-2026-92358Medium6.4Keycloak-services: keycloak-services: residual cross-browser account-link proof allows silent re-linking
- CVE-2026-97367Medium6.4Keycloak-services: keycloak-services: dcr azp and sid claim substitution allows account rest session takeover
- CVE-2026-107889Medium5.5Keycloak-services: keycloak-services: stored xss on login page via kcsanitize bypass
- CVE-2026-105305Medium5.4Keycloak-services: keycloak-services: device authorization grant bypasses per-client minimum.acr.value enforcement
- CVE-2026-96460Medium5.4Keycloak-services: keycloak-services: indefinite access token renewal via standard token exchange v2
- CVE-2026-112201Medium4.8Keycloak-services: keycloak-services: login-failure upsert trusts mysql/mariadb affected-row count
- CVE-2026-107623Medium4.3Keycloak-services: keycloak-services: oidc dcr read-modify-write silently disables offline token revocation
Also named in this article, without a record here: CVE-2026-117691, CVE-2026-92855, CVE-2026-92856, CVE-2026-97175, CVE-2026-96447, CVE-2026-94000, CVE-2026-94001, CVE-2026-97177, CVE-2026-96448, CVE-2026-96457, CVE-2026-9099, CVE-2026-7307, CVE-2026-82965, CVE-2026-15943, CVE-2026-18569, CVE-2026-82968, CVE-2026-94218, CVE-2026-94215, CVE-2026-94213, CVE-2026-37978, CVE-2026-94217, CVE-2026-96446, CVE-2026-96445, CVE-2026-95503, CVE-2026-97311, CVE-2026-97846, CVE-2026-101333, CVE-2026-91777, CVE-2026-103884, CVE-2026-107121, CVE-2026-19688, CVE-2026-16102, CVE-2026-4629, CVE-2026-16104
Data: CVE records on cve.org
TL;DR
Keycloak 26.8.1, released on October 13, fixes 19 CVEs, and Keycloak 26.8.2, released on November 5, fixes 33 more. The most serious affect realms that broker logins from SAML identity providers: CVE-2026-117691 in 26.8.2 lets a forged SAML response pass the signature check and log in as any user, and 26.8.1 already fixed a similar bypass listed as a weakness. 26.8.2 also closes several account takeover paths, one of them reproduced on 26.8.1, so 26.8.2 is the release to install, not 26.8.1.
SAML Broker Signature Bypasses: Login as Any User #
When Keycloak brokers a login to an external SAML identity provider over the HTTP-Redirect binding, the signature covers the query string. The 26.8.1 notes list weakness #53354: the signature was verified over a different SAMLResponse than the one Keycloak processed, using ; as a parameter separator, which allowed an unauthenticated login as an arbitrary user. That entry carries no CVE, only the identifier ANT-2026-HQ54RPF9. About three weeks later, 26.8.2 fixed CVE-2026-117691, the same outcome through a percent-encoded parameter name, %53AMLResponse.
26.8.2 fixes three more SAML trust problems: the broker accepted holder-of-key assertions without proof of key possession (CVE-2026-92855), it ignored ProxyRestriction (CVE-2026-92856), and the SAML adapter accepted assertions from the wrong configured issuer (CVE-2026-93998, CVSS 7.4). A realm without a SAML identity provider or SAML adapter is outside these four.
Account Takeover and Session Hijacking Paths in 26.8.2 #
- CVE-2026-112208 (CVSS 8.1): a stale
SSO_AUTHnote in organization identity-first login allows account takeover; the notes say it was reproduced on 26.8.1. - CVE-2026-103112 (7.5): account takeover through a race in authentication.
- CVE-2026-97175: an identity provider email that was never verified can be auto-linked to an existing account.
- CVE-2026-92857 (8.1): a protocol mapper that dynamic client registration allows by default can write the reserved
subandaudclaims, which spoofs identities. - CVE-2026-97174 (6.8): an injected
subparameter in CIBA makes the attacker's authentication issue the victim's tokens. - CVE-2026-107124 (6.4) and CVE-2026-97367 (6.4): session takeover through a victim logout with an injected
id_token_hint, and throughazpandsidclaim substitution by User Property mappers in dynamic client registration. - CVE-2026-96447: a stateless token's
preferred_usernamefallback rebinds identities after a client is recreated.
Several of these depend on dynamic client registration, organizations or CIBA, which not every realm enables. The account takeover through organization login and the authentication race carry the highest scores.
Delegated Admins Escalating to realm-admin #
Both releases fix ways for a limited administrator to gain more rights. In 26.8.1, CVE-2026-94000 let a delegated admin with only manage-users become realm-admin by joining, or being created into, a group that maps an admin role. CVE-2026-94001 and CVE-2026-97177 bypassed a denied reset-password permission through credential deletion and a generic user update. In 26.8.2, a client manager could replace a sessionless token principal and take over the realm (CVE-2026-97847, 7.1). Fine-grained admin permissions v2 let manage-users assign a composite role that wraps realm-admin (CVE-2026-96448). A principal with only create-client could add a role to the realm's default roles (CVE-2026-109081, 6.8). CVE-2026-96457 restores a group-admin deny that a top-level move bypassed, a regression of CVE-2026-9099.
Unauthenticated Denial of Service Through SAML and Themes #
26.8.2 fixes five ways to take Keycloak down without logging in, four of them scored 7.5. A legal ds:KeyName in SAML 1.1 sends the KeyInfo parser into a loop that exhausts CPU and the worker pool until a restart (CVE-2026-107602). A single request ends the JVM with an OutOfMemoryError through the SAML 1.1 AuthorityBinding parser, an incomplete fix of CVE-2026-7307 (CVE-2026-110931). The SAML endpoint has a further denial of service (CVE-2026-107123), and the theme gzip cache on 26.8.0 and older can fill the disk permanently (CVE-2026-110932). The SOAP endpoint at /realms/{realm}/protocol/saml/resolve parses unbounded XML (CVE-2026-82965). 26.8.2 also updates the bundled Brotli decoder for CVE-2026-111497.
All 52 CVEs by Release #
The two tables list every CVE in the security fixes of each release, with the component label the release notes give.
| CVE in 26.8.1 | What it fixes | Area |
|---|---|---|
| CVE-2026-15943 | OIDC identity provider update reuses the masked client secret after the token URL changes | identity brokering |
| CVE-2026-18569 | OIDC broker back-channel logout accepts unsigned forged logout tokens when signature validation is off | OIDC |
| CVE-2026-82968 | Persistent wrong-account linking through the null or GitHub identity provider | identity brokering |
| CVE-2026-94001 | Admin credential DELETE bypasses a denied reset-password permission | fine-grained permissions |
| CVE-2026-94000 | manage-users admin becomes realm-admin through a group that maps an admin role | fine-grained permissions |
| CVE-2026-94218 | 2FA setup enforcement bypass through login-actions/restart | authentication |
| CVE-2026-94215 | Cross-realm read and write through a per-request session cache | admin API |
| CVE-2026-94213 | Missing user view authorization in policy evaluation, possibly an incomplete fix of CVE-2026-37978 | authorization services |
| CVE-2026-94217 | UMA scope merge across resource owners through a name collision | authorization services |
| CVE-2026-96446 | PAR single-use bypass through prompt=none, reported on 26.7.3 | OIDC |
| CVE-2026-96445 | Conditional OTP trusts skip headers on untrusted proxy paths | authentication |
| CVE-2026-97177 | Generic user update bypasses a denied reset-password permission | fine-grained permissions |
| CVE-2026-95503 | Possible KDC spoofing with Kerberos password authentication | authentication |
| CVE-2026-97311 | roles/{role-name}/groups discloses groups the caller cannot view | admin API |
| CVE-2026-97846 | Standard Token Exchange skips required mTLS certificate binding | token exchange |
| CVE-2026-101333 | Unbounded metric series through the idp tag on broker login | observability |
| CVE-2026-91777 | jackson-databind dependency update | dependencies |
| CVE-2026-103884 | Path traversal through a client-supplied X.509 CRL distribution point | authentication |
| CVE-2026-107121 | SMTP starttls=true allows a plaintext downgrade of credentials and messages | admin API |
| CVE in 26.8.2 | What it fixes | Area |
|---|---|---|
| CVE-2026-117691 | SAML redirect binding signature bypass through %53AMLResponse, broker login as any user | SAML broker |
| CVE-2026-92855 | SAML broker accepts holder-of-key assertions without proof of possession | SAML broker |
| CVE-2026-92856 | SAML broker ignores ProxyRestriction | SAML broker |
| CVE-2026-93998 | SAML adapter accepts assertions from the wrong issuer | SAML adapter |
| CVE-2026-112208 | Account takeover through a stale SSO_AUTH note in organization login | organizations |
| CVE-2026-103112 | Account takeover through an authentication race | authentication |
| CVE-2026-97175 | Unverified identity provider email auto-linking | identity brokering |
| CVE-2026-92857 | Default-allowed DCR protocol mapper writes sub and aud | client registration |
| CVE-2026-97174 | CIBA sub injection issues the victim's tokens | CIBA |
| CVE-2026-107124 | Session takeover through a victim logout with an injected id_token_hint | OIDC |
| CVE-2026-97367 | DCR azp and sid claim substitution enables session takeover | client registration |
| CVE-2026-96447 | preferred_username fallback rebinds identities after client recreation | tokens |
| CVE-2026-97847 | Client manager replaces a sessionless token principal and takes over the realm | admin API |
| CVE-2026-96448 | FGAP v2 lets manage-users assign a composite containing realm-admin | fine-grained permissions |
| CVE-2026-109081 | create-client principal injects a role into default roles | admin API |
| CVE-2026-96457 | Group-admin deny bypass through a top-level move, a CVE-2026-9099 regression | admin API |
| CVE-2026-19688 | Admin API missing audience check | admin API |
| CVE-2026-96547 | DCR attribute mappers forge realm_access.roles from user-editable fields | client registration |
| CVE-2026-97848 | Mapper with jsonType=JSON bypasses the CVE-2026-16102 fix with a duplicate resource_access claim | tokens |
| CVE-2026-114232 | UMA permission resourceType not validated, cross-owner resource access | authorization services |
| CVE-2026-96460 | Token from token exchange can have unlimited expiration | token exchange |
| CVE-2026-105305 | Device Authorization Grant bypasses per-client minimum.acr.value | authentication |
| CVE-2026-92358 | Cross-browser fallback proof survives account linking and unlink | organizations |
| CVE-2026-107623 | DCR read-modify-write disables offline token revocation on back-channel logout | OIDC |
| CVE-2026-107889 | Stored XSS on the login page through a kcSanitize bypass | authentication |
| CVE-2026-112201 | Login-failure upsert trusts the MySQL or MariaDB affected-row count | authentication |
| CVE-2026-96453 | kcadm custom truststores trust any self-signed certificate | admin CLI |
| CVE-2026-107602 | SAML 1.1 KeyInfo parser loop exhausts CPU and workers | SAML |
| CVE-2026-110931 | SAML 1.1 AuthorityBinding parser ends the JVM, incomplete fix of CVE-2026-7307 | SAML |
| CVE-2026-107123 | Unauthenticated denial of service in the SAML endpoint | SAML |
| CVE-2026-82965 | Unbounded XML parsing on the SAML SOAP resolve endpoint | SAML |
| CVE-2026-110932 | Persistent disk exhaustion through the theme gzip cache | themes |
| CVE-2026-111497 | Out-of-bounds write in the bundled Brotli decoder | distribution |
26.8.1 also lists weaknesses without CVEs, among them a reusable organization invitation link, username enumeration through empty-password timing, an X.509 KeyUsage mismatch that bypassed policy, and a fine-grained permissions v2 role injection that was an incomplete fix for CVE-2026-4629. One of its bug entries concerns the masking of the authenticator reference after the CVE-2026-16104 fix.
Upgrading Keycloak and Closing the Exposed Paths #
- Install 26.8.2 on every node; it contains the 26.8.1 fixes. A 26.7 installation is affected too, since the 26.8.1 notes report the PAR bypass on 26.7.3, so move it to 26.8.2.
- Until the update, review every SAML identity provider in each realm and disable the ones that are not needed; for the rest, compare recent broker logins with the users who actually signed in at that provider.
- Restrict dynamic client registration with client registration policies, or turn anonymous registration off, since four of the 26.8.2 CVEs run through it.
- List which groups map admin roles and which delegated admins hold
manage-users,create-clientor client manager rights, and remove assignments nobody needs. - Rebuild container images and Keycloak operator deployments with the new version, then check that SMTP settings with
starttls=truestill deliver mail, since 26.8.1 closed the plaintext downgrade thatstarttls=trueallowed.
Checking a Keycloak Realm for the Affected Features #
The admin CLI shows the version, the identity providers by type and the client registration policies, which decide whether the SAML and dynamic client registration CVEs apply.
/opt/keycloak/bin/kc.sh --version
kcadm.sh get identity-provider/instances -r REALM --fields alias,providerId,enabled
kcadm.sh get components -r REALM -q type=org.keycloak.services.clientregistration.policy.ClientRegistrationPolicy --fields name,providerId,subType
kcadm.sh get groups -r REALM --fields name,realmRolesThe Sentinel’s Call
Every Keycloak server should move to 26.8.2, not 26.8.1, because 26.8.2 fixes an account takeover reproduced on 26.8.1. Realms that broker logins from SAML identity providers come first, since two signature bypasses in these releases allowed login as any user. Realms with dynamic client registration or delegated admins should also review those settings after the upgrade.
Our judgement, drawn only from the facts and sources above.
Sources
- Release 26.8.2 · keycloak/keycloak · GitHub github.com · Nov 5, 2026
- Release 26.8.1 · keycloak/keycloak · GitHub github.com · Oct 13, 2026
- CVE-2026-111497: Out-of-Bounds Write in Google Brotli Decoder cve.org · Oct 22, 2026
- CVE-2026-112208: Keycloak-services: keycloak-services: account takeover via stale sso_auth note in organization identity-first login cve.org · Nov 5, 2026
- CVE-2026-110932: Keycloak-services: keycloak-services: unauthenticated persistent disk exhaustion via theme gzip cache cve.org · Nov 5, 2026
- CVE-2026-107123: Keycloak-services: keycloak-services: unauthenticated cpu denial of service via saml xml datetime and duration parsing cve.org · Nov 5, 2026
- CVE-2026-107602: Keycloak-services: keycloak-services: unauthenticated cpu exhaustion via saml 1.1 keyinfo infinite loop cve.org · Nov 5, 2026
- CVE-2026-110931: Keycloak-services: keycloak-services: unauthenticated jvm termination via saml 1.1 authoritybinding parsing loop cve.org · Nov 5, 2026
- CVE-2026-97847: Keycloak-services: keycloak-services: client manager can substitute sessionless token principal via hardcoded-claim mapp cve.org · Nov 5, 2026
- CVE-2026-109081: Keycloak-services: keycloak-services: injection of roles into realm default-roles via dcr endpoint cve.org · Nov 6, 2026
- CVE-2026-93998: Keycloak-core: keycloak-core: saml adapter does not bind signed assertions to the configured identity provider issuer cve.org · Nov 5, 2026
- CVE-2026-92857: Keycloak-services: keycloak-services: dcr protocol mapper config not validated, allowing iat holders to forge sub and au cve.org · Nov 5, 2026
- CVE-2026-103112: Keycloak-services: keycloak-services: account takeover via authentication race using reset-credentials path cve.org · Nov 5, 2026
Also consulted
- CVE-2026-92358: Keycloak-services: keycloak-services: residual cross-browser account-link proof allows silent re-linking cve.org · Sep 16, 2026
- CVE-2026-105305: Keycloak-services: keycloak-services: device authorization grant bypasses per-client minimum.acr.value enforcement cve.org · Oct 6, 2026
- CVE-2026-107623: Keycloak-services: keycloak-services: oidc dcr read-modify-write silently disables offline token revocation cve.org · Oct 8, 2026
- CVE-2026-107889: Keycloak-services: keycloak-services: stored xss on login page via kcsanitize bypass cve.org · Oct 9, 2026
- CVE-2026-112201: Keycloak-services: keycloak-services: login-failure upsert trusts mysql/mariadb affected-row count cve.org · Nov 11, 2026
- CVE-2026-107124: Keycloak-services: keycloak-services: oidc logout endpoint session fixation via id_token_hint leading to account takeove cve.org · Nov 6, 2026
- CVE-2026-97367: Keycloak-services: keycloak-services: dcr azp and sid claim substitution allows account rest session takeover cve.org · Nov 6, 2026
- CVE-2026-97174: Keycloak-services: keycloak-services: ciba sub parameter injection causes attacker authentication to issue victim tokens cve.org · Nov 5, 2026
- CVE-2026-114232: Keycloak-services: keycloak-services: uma protection api resourcetype field not validated — cross-owner resource access cve.org · Nov 5, 2026
- CVE-2026-96547: Keycloak-services: keycloak-services: dcr registration-time claim-path gap allows forging realm_access.roles cve.org · Nov 6, 2026
- CVE-2026-96460: Keycloak-services: keycloak-services: indefinite access token renewal via standard token exchange v2 cve.org · Nov 6, 2026
- CVE-2026-97848: Keycloak-services: keycloak-services: protocol mapper with jsontype=json bypasses token sanitization cve.org · Nov 6, 2026
- CVE-2026-96453: Org.keycloak/keycloak-admin-cli: keycloak-admin-cli: kcadm custom truststore accepts arbitrary self-signed certificates cve.org · Nov 5, 2026
Edited and approved by Jarosław Krzemiński. Spotted a mistake? Report a correction or read the corrections policy.




Comments