Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessRegister or compromise OAuth client credentials
-
DeliveryInitiate CIBA auth request targeting locked-out victim
-
ExploitVictim user approves back-channel authentication prompt
-
ExecutionTrigger or await victim account brute-force lockout
-
PersistSubmit approved auth_req_id to token redemption endpoint
-
ImpactReceive access and refresh tokens for locked account
Vulnerability Assessment
| Weakness |
CWE
OWASP Top 10:2025
A06:2025 - Insecure Design
ASVS 5.0
V2 - Validation and Business Logic Workflow enforcement
|
| Exploitation Conditions | Exploitation requires three concurrent conditions: (1) the attacker must possess valid OAuth client credentials (client_id and client_secret) for a client registered in the target Keycloak realm - these are application-level secrets, not user passwords; (2) the target user account must have an active, user-approved CIBA authentication request that was initiated before the account became locked - this means the user must have actively approved the back-channel authentication prompt; and (3) the user account must subsequently enter a locked state due to brute-force protection before the attacker redeems the auth_req_id at the token endpoint. Exploitation is limited by: requirement for valid OAuth client credentials (not anonymous); dependency on user interaction to approve the CIBA request (UI:R); dependency on a race window between CIBA approval and account lockout; and the CIBA flow must be enabled and in use on the affected Keycloak instance - organizations not using CIBA are not affected. |
| Impact | The real-world risk is moderate and scenario-constrained. The CVSS vector AV:N/AC:L/PR:N/UI:R reflects a network-exploitable path with low complexity, but the PR:N designation warrants scrutiny: exploitation requires valid OAuth client credentials, which are application-level secrets, not user-level credentials - this is closer to PR:L in practice. The UI:R requirement is load-bearing: the legitimate target user must actively approve the CIBA authentication request before the lockout occurs, making this a race-condition style attack dependent on external user behavior. The C:L impact is accurate - only access and refresh tokens for a single locked account are disclosed, with no integrity or availability consequence. No EPSS data was provided in the intelligence feed; given the specificity of conditions required (valid client credentials, pending CIBA approval, user locked mid-flow), opportunistic or automated exploitation at scale is unlikely. The CVE is not in the CISA KEV catalog, and no POC exists per available data. This is a genuine but situationally limited security gap - organizations where CIBA is actively used alongside brute-force lockout policies face elevated real-world risk compared to those not using CIBA. The absence of CWE assignment and exact fix version data from the references reduces confidence in scope determination. |
| Exploit ScenarioDerived | An attacker who controls a registered OAuth client in the Keycloak realm initiates a CIBA authentication request for a targeted user account and waits for the user to approve the push notification or out-of-band prompt - which the user does, believing it to be a legitimate sign-in. If the target user's account is then locked by brute-force protection (whether triggered by the attacker on a separate channel or by prior failed attempts), the attacker can still call the CIBA token redemption endpoint with the approved auth_req_id and receive valid access and refresh tokens, effectively bypassing the lockout mechanism. No public POC has been identified, but the exploitation technique is mechanically straightforward for any party already possessing valid client credentials. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Jul 17, 2026
Brute-force lockout bypass in Keycloak's Client-Initiated Backchannel Authentication (CIBA) flow allows an attacker holding valid OAuth client credentials to redeem previously approved authentication requests and obtain access and refresh tokens for a user account that has since been locked. This is an incomplete fix for CVE-2026-9798: the brute-force protection check was applied to the CIBA initiation handler but was never added to the token redemption handler, creating a gap that persists after the earlier patch. No public exploit code has been identified at time of analysis, and this CVE is not listed in the CISA KEV catalog.
RemediationAI
Patch availability has not been confirmed with an exact fix version from the available references; a Red Hat vendor advisory exists at https://access.redhat.com/security/cve/CVE-2026-16103 and should be checked for updated package versions. Until a patch is applied, organizations using the CIBA flow should consider disabling Client-Initiated Backchannel Authentication entirely in Keycloak if not operationally required (this can be done per-realm by disabling the CIBA grant type on registered clients), as this eliminates the vulnerable code path with the trade-off of losing decoupled authentication for those clients. If CIBA must remain active, enforce short-lived auth_req_id expiration windows and monitor token endpoint logs for redemption attempts tied to accounts under lockout. Administrators should also ensure brute-force lockout thresholds are conservative and that account unlock procedures require re-authentication, limiting the window an approved CIBA request remains redeemable. Track Red Hat Bugzilla #2501736 for patch availability.
Affects your stack
Find out whether the stacks and servers you run are on an affected version.
Checking this CVE against your own stacks and servers is part of the Basic plan and up.
Technical ContextAI · show details
The vulnerability resides in the keycloak-services component that implements the CIBA (Client-Initiated Backchannel Authentication) flow, an OAuth 2.0 extension (OpenID Connect CIBA profile) enabling decoupled authentication where a client application requests authentication on behalf of a user via a back channel and the user approves the request through a separate device or channel. The affected products confirmed by CPE data are: Red Hat Build of Keycloak, Red Hat Data Grid 8, Red Hat JBoss Enterprise Application Platform Expansion Pack, and Red Hat Single Sign-On 7. The root cause is a missing authorization check - specifically, brute-force lockout status is not evaluated at the token redemption endpoint (/token endpoint with grant_type=urn:openid:params:grant-type:ciba), allowing an already-authorized auth_req_id to be exchanged for tokens even when the associated user account is locked. No CWE was assigned by the reporter, but this maps conceptually to CWE-863 (Incorrect Authorization) due to the incomplete enforcement of access control policy across all relevant code paths.
Know when Red Hat Build Of Keycloak gets its next vulnerability
- Watch products and get an email when something new is published
- Check this CVE against your own stack and servers
- Exploit and PoC references, threat intelligence from 22 sources
No credit card · 7-day full trial
Severity by source
AV:N/AC:L/PR:N/UI:R/S:U/C:L/I:N/A:N
OAuth client credentials required (PR:L); specific race-condition timing between CIBA approval and account lockout raises complexity (AC:H); only token confidentiality disclosed (C:L).
Primary rating from Vendor (redhat).
CVSS VectorVendor: redhat
DescriptionCVE.org
A flaw was found in the keycloak-services component of Keycloak. This issue is an incomplete fix for CVE-2026-9798, where brute-force protection checks were added to the Client-Initiated Backchannel Authentication (CIBA) initiation handler but were omitted from the token redemption handler. This allows an attacker with valid client credentials to obtain access and refresh tokens for a user account that has been locked due to brute-force protection, provided the authentication request was started before the lockout occurred and was approved by the user.
Threat Intelligence Overview
How this decision was reached
The engine reads each signal below and applies a fixed list of rules from top to bottom. The first rule that matches sets the recommended action – like a statement, every line is shown.
What every action level means
SSVC AssessmentENISA
Priority Score
Attack Technique
Information disclosure occurs when an application unintentionally exposes sensitive data that aids attackers in reconnaissance or directly compromises security.
Affected Products (CPE)CVE.org
More in Red Hat Build Of Keycloak
View allAccount takeover in Red Hat Build of Keycloak allows an unauthenticated attacker to abuse the reset-credentials flow in
Account takeover in Keycloak (Red Hat build of Keycloak, Red Hat Single Sign-On 7) arises because the IdP-initiated SAML
Authentication bypass in Red Hat Build of Keycloak (and Red Hat Single Sign-On 7) lets an unauthenticated attacker forge
Privilege escalation in Red Hat Build of Keycloak's Dynamic Client Registration (DCR) grants an attacker with low-privil
Mismatched handling of the HTTP/1 absolute-form request authority in Red Hat build of Quarkus and other affected Red Hat
Authorization bypass in the Keycloak Policy Enforcer allows any authenticated user to circumvent all enforced access con
URI normalization bypass in Keycloak's Authorization Services PathMatcher allows authenticated low-privilege users to re
Privilege escalation in Keycloak's Dynamic Client Registration (DCR) component allows attackers with standard user accou
Token exchange in Keycloak bypasses Google Workspace domain allowlist restrictions, enabling any valid Google account ho
Signature-verification bypass in Keycloak (and Red Hat's Keycloak-based products such as Red Hat Single Sign-On 7 and Re
Tenant-restriction bypass in Keycloak's Microsoft identity provider integration allows attackers holding any valid Micro
Session hijacking via SAML assertion replay in Keycloak's SAML broker component allows adjacent-network attackers to aut
EUVD-2026-45225
GHSA-v7m3-vpqr-6m6p
NVD
CVE.org
EPSS
Vulnrichment
VulDB
Exploit-DB