On this page · 8 sections
  1. SAML Broker Signature Bypasses: Login as Any User
  2. Account Takeover and Session Hijacking Paths in 26.8.2
  3. Delegated Admins Escalating to realm-admin
  4. Unauthenticated Denial of Service Through SAML and Themes
  5. All 52 CVEs by Release
  6. Upgrading Keycloak and Closing the Exposed Paths
  7. Checking a Keycloak Realm for the Affected Features
  8. Sources

Security release

Status as of 2026-11-13

24 CVEs

Google Brotli, keycloak-services

Highest CVSS9.2Critical
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

  1. CVE-2026-111497Critical9.2Out-of-Bounds Write in Google Brotli Decoder
  2. CVE-2026-112208High8.1Keycloak-services: keycloak-services: account takeover via stale sso_auth note in organization identity-first login
  3. CVE-2026-114232High8.1Keycloak-services: keycloak-services: uma protection api resourcetype field not validated — cross-owner resource access
  4. CVE-2026-92857High8.1Keycloak-services: keycloak-services: dcr protocol mapper config not validated, allowing iat holders to forge sub and au
  5. 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
  1. CVE-2026-103112High7.5Keycloak-services: keycloak-services: account takeover via authentication race using reset-credentials path
  2. CVE-2026-107123High7.5Keycloak-services: keycloak-services: unauthenticated cpu denial of service via saml xml datetime and duration parsing
  3. CVE-2026-107602High7.5Keycloak-services: keycloak-services: unauthenticated cpu exhaustion via saml 1.1 keyinfo infinite loop
  4. CVE-2026-110931High7.5Keycloak-services: keycloak-services: unauthenticated jvm termination via saml 1.1 authoritybinding parsing loop
  5. CVE-2026-110932High7.5Keycloak-services: keycloak-services: unauthenticated persistent disk exhaustion via theme gzip cache
  6. CVE-2026-93998High7.4Keycloak-core: keycloak-core: saml adapter does not bind signed assertions to the configured identity provider issuer
  7. CVE-2026-97847High7.1Keycloak-services: keycloak-services: client manager can substitute sessionless token principal via hardcoded-claim mapp
  8. CVE-2026-109081Medium6.8Keycloak-services: keycloak-services: injection of roles into realm default-roles via dcr endpoint
  9. CVE-2026-97174Medium6.8Keycloak-services: keycloak-services: ciba sub parameter injection causes attacker authentication to issue victim tokens
  10. CVE-2026-96547Medium6.5Keycloak-services: keycloak-services: dcr registration-time claim-path gap allows forging realm_access.roles
  11. CVE-2026-97848Medium6.5Keycloak-services: keycloak-services: protocol mapper with jsontype=json bypasses token sanitization
  12. CVE-2026-107124Medium6.4Keycloak-services: keycloak-services: oidc logout endpoint session fixation via id_token_hint leading to account takeove
  13. CVE-2026-92358Medium6.4Keycloak-services: keycloak-services: residual cross-browser account-link proof allows silent re-linking
  14. CVE-2026-97367Medium6.4Keycloak-services: keycloak-services: dcr azp and sid claim substitution allows account rest session takeover
  15. CVE-2026-107889Medium5.5Keycloak-services: keycloak-services: stored xss on login page via kcsanitize bypass
  16. CVE-2026-105305Medium5.4Keycloak-services: keycloak-services: device authorization grant bypasses per-client minimum.acr.value enforcement
  17. CVE-2026-96460Medium5.4Keycloak-services: keycloak-services: indefinite access token renewal via standard token exchange v2
  18. CVE-2026-112201Medium4.8Keycloak-services: keycloak-services: login-failure upsert trusts mysql/mariadb affected-row count
  19. 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_AUTH note 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 sub and aud claims, which spoofs identities.
  • CVE-2026-97174 (6.8): an injected sub parameter 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 through azp and sid claim substitution by User Property mappers in dynamic client registration.
  • CVE-2026-96447: a stateless token's preferred_username fallback 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.1What it fixesArea
CVE-2026-15943OIDC identity provider update reuses the masked client secret after the token URL changesidentity brokering
CVE-2026-18569OIDC broker back-channel logout accepts unsigned forged logout tokens when signature validation is offOIDC
CVE-2026-82968Persistent wrong-account linking through the null or GitHub identity provideridentity brokering
CVE-2026-94001Admin credential DELETE bypasses a denied reset-password permissionfine-grained permissions
CVE-2026-94000manage-users admin becomes realm-admin through a group that maps an admin rolefine-grained permissions
CVE-2026-942182FA setup enforcement bypass through login-actions/restartauthentication
CVE-2026-94215Cross-realm read and write through a per-request session cacheadmin API
CVE-2026-94213Missing user view authorization in policy evaluation, possibly an incomplete fix of CVE-2026-37978authorization services
CVE-2026-94217UMA scope merge across resource owners through a name collisionauthorization services
CVE-2026-96446PAR single-use bypass through prompt=none, reported on 26.7.3OIDC
CVE-2026-96445Conditional OTP trusts skip headers on untrusted proxy pathsauthentication
CVE-2026-97177Generic user update bypasses a denied reset-password permissionfine-grained permissions
CVE-2026-95503Possible KDC spoofing with Kerberos password authenticationauthentication
CVE-2026-97311roles/{role-name}/groups discloses groups the caller cannot viewadmin API
CVE-2026-97846Standard Token Exchange skips required mTLS certificate bindingtoken exchange
CVE-2026-101333Unbounded metric series through the idp tag on broker loginobservability
CVE-2026-91777jackson-databind dependency updatedependencies
CVE-2026-103884Path traversal through a client-supplied X.509 CRL distribution pointauthentication
CVE-2026-107121SMTP starttls=true allows a plaintext downgrade of credentials and messagesadmin API
CVE in 26.8.2What it fixesArea
CVE-2026-117691SAML redirect binding signature bypass through %53AMLResponse, broker login as any userSAML broker
CVE-2026-92855SAML broker accepts holder-of-key assertions without proof of possessionSAML broker
CVE-2026-92856SAML broker ignores ProxyRestrictionSAML broker
CVE-2026-93998SAML adapter accepts assertions from the wrong issuerSAML adapter
CVE-2026-112208Account takeover through a stale SSO_AUTH note in organization loginorganizations
CVE-2026-103112Account takeover through an authentication raceauthentication
CVE-2026-97175Unverified identity provider email auto-linkingidentity brokering
CVE-2026-92857Default-allowed DCR protocol mapper writes sub and audclient registration
CVE-2026-97174CIBA sub injection issues the victim's tokensCIBA
CVE-2026-107124Session takeover through a victim logout with an injected id_token_hintOIDC
CVE-2026-97367DCR azp and sid claim substitution enables session takeoverclient registration
CVE-2026-96447preferred_username fallback rebinds identities after client recreationtokens
CVE-2026-97847Client manager replaces a sessionless token principal and takes over the realmadmin API
CVE-2026-96448FGAP v2 lets manage-users assign a composite containing realm-adminfine-grained permissions
CVE-2026-109081create-client principal injects a role into default rolesadmin API
CVE-2026-96457Group-admin deny bypass through a top-level move, a CVE-2026-9099 regressionadmin API
CVE-2026-19688Admin API missing audience checkadmin API
CVE-2026-96547DCR attribute mappers forge realm_access.roles from user-editable fieldsclient registration
CVE-2026-97848Mapper with jsonType=JSON bypasses the CVE-2026-16102 fix with a duplicate resource_access claimtokens
CVE-2026-114232UMA permission resourceType not validated, cross-owner resource accessauthorization services
CVE-2026-96460Token from token exchange can have unlimited expirationtoken exchange
CVE-2026-105305Device Authorization Grant bypasses per-client minimum.acr.valueauthentication
CVE-2026-92358Cross-browser fallback proof survives account linking and unlinkorganizations
CVE-2026-107623DCR read-modify-write disables offline token revocation on back-channel logoutOIDC
CVE-2026-107889Stored XSS on the login page through a kcSanitize bypassauthentication
CVE-2026-112201Login-failure upsert trusts the MySQL or MariaDB affected-row countauthentication
CVE-2026-96453kcadm custom truststores trust any self-signed certificateadmin CLI
CVE-2026-107602SAML 1.1 KeyInfo parser loop exhausts CPU and workersSAML
CVE-2026-110931SAML 1.1 AuthorityBinding parser ends the JVM, incomplete fix of CVE-2026-7307SAML
CVE-2026-107123Unauthenticated denial of service in the SAML endpointSAML
CVE-2026-82965Unbounded XML parsing on the SAML SOAP resolve endpointSAML
CVE-2026-110932Persistent disk exhaustion through the theme gzip cachethemes
CVE-2026-111497Out-of-bounds write in the bundled Brotli decoderdistribution

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 #

  1. 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.
  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.
  3. Restrict dynamic client registration with client registration policies, or turn anonymous registration off, since four of the 26.8.2 CVEs run through it.
  4. List which groups map admin roles and which delegated admins hold manage-users, create-client or client manager rights, and remove assignments nobody needs.
  5. Rebuild container images and Keycloak operator deployments with the new version, then check that SMTP settings with starttls=true still deliver mail, since 26.8.1 closed the plaintext downgrade that starttls=true allowed.

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.

Bash
/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,realmRoles

The 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

  1. Release 26.8.2 · keycloak/keycloak · GitHub github.com · Nov 5, 2026
  2. Release 26.8.1 · keycloak/keycloak · GitHub github.com · Oct 13, 2026
  3. CVE-2026-111497: Out-of-Bounds Write in Google Brotli Decoder cve.org · Oct 22, 2026
  4. CVE-2026-112208: Keycloak-services: keycloak-services: account takeover via stale sso_auth note in organization identity-first login cve.org · Nov 5, 2026
  5. CVE-2026-110932: Keycloak-services: keycloak-services: unauthenticated persistent disk exhaustion via theme gzip cache cve.org · Nov 5, 2026
  6. CVE-2026-107123: Keycloak-services: keycloak-services: unauthenticated cpu denial of service via saml xml datetime and duration parsing cve.org · Nov 5, 2026
  7. CVE-2026-107602: Keycloak-services: keycloak-services: unauthenticated cpu exhaustion via saml 1.1 keyinfo infinite loop cve.org · Nov 5, 2026
  8. CVE-2026-110931: Keycloak-services: keycloak-services: unauthenticated jvm termination via saml 1.1 authoritybinding parsing loop cve.org · Nov 5, 2026
  9. CVE-2026-97847: Keycloak-services: keycloak-services: client manager can substitute sessionless token principal via hardcoded-claim mapp cve.org · Nov 5, 2026
  10. CVE-2026-109081: Keycloak-services: keycloak-services: injection of roles into realm default-roles via dcr endpoint cve.org · Nov 6, 2026
  11. 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
  12. 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
  13. CVE-2026-103112: Keycloak-services: keycloak-services: account takeover via authentication race using reset-credentials path cve.org · Nov 5, 2026

Also consulted

Next reading

Edited and approved by Jarosław Krzemiński. Spotted a mistake? Report a correction or read the corrections policy.