CVE-2026-55672High· 7.4▾ TwilightZITADEL: Missing client_id binding in OIDC authorization code exchange and refresh token flows (RFC 6749 Section 4.1.3 violation)
▾ Twilight zone — High severity, or a signal on a lesser flaw
impact 40.7 · likelihood 0.1 · exploitation 0
Need a working PoC? Pro members can cast a request and our team develops one — it lands right here.
Exploit-prediction probability, daily snapshots since Jul 11.
Disclosure to exploitation, from the record and what we observed since indexing it.
Disclosed via GHSA
0.3%
0.3% → 0.4%
Zitadel's OAuth2 / OIDC CodeExchange and RefreshToken implementations omit a critical validation step to ensure that the requesting client matches the client that originally initiated the authorization flow. This violates RFC 6749 Section 4.1.3, which mandates that the authorization server must ensure the authorization code was issued to the authenticated confidential client.
This flaw creates potential vulnerabilities in two main authentication phases, provided specific external preconditions are met:
ClientB) registered on the same Zitadel instance. Zitadel will authenticate ClientB and issue tokens for the victim user without verifying the client binding.Scope and Mitigation Factors:
code_verifier. However, PKCE does not protect against refresh token cross-use.Systems running one of the following versions are affected:
4.0.0 through 4.15.1 (including RC versions)3.0.0 through 3.4.11 (including RC versions)The vulnerability has been addressed in the latest releases by re-introducing strict client identity validation on the CodeExchange and RefreshToken grants.
Please upgrade to one of the following secure versions:
The recommended solution is to upgrade to a patched version.
To reduce exposure in the interim, ensure absolute adherence to application security best practices to prevent credential/token theft, enforce the use of PKCE for all clients to mitigate the Authorization Code Injection risk, and minimize refresh token lifespans.
If you have any questions or comments about this advisory, please email us at [email protected]
Thanks to kodareef5, Shubham Raj / Causal Security, and Gaurav Popalghat for identifying and responsibly reporting this or a part of this vulnerability.
github.com/zitadel/zitadel < 1.80.0-v2.20.0.20260616131956-0973b074b488Upgrade to a patched release:
github.com/zitadel/zitadel 1.80.0-v2.20.0.20260616131956-0973b074b488Connected by shared product, vendor, weakness, or advisory.
CVE-2026-56665Medium· 4.2ZITADEL: Missing Token Expiration (`exp`) Validation in JWT IdP Provider
CVE-2026-56664Medium· 4.2ZITADEL: Missing Token Lifecyle Validation (`exp` and `iat`) in JWT IdP Provider
GHSA-wxg7-w2v3-w38gMedium· 4.2ZITADEL: Missing Token Lifecyle Validation (`exp` and `iat`) in JWT IdP Provider
CVE-2026-55669Medium· 4.2ZITADEL: Missing Token Audience Validation (`aud`) in JWT IdP Provider
CVE-2026-54693HighZITADEL Users Can Self-Verify Email/Phone via API
CVE-2026-55671LowZITADEL: Server-Side Request Forgery (SSRF) and Denylist Bypass in Outgoing HTTP Components