Zitadel
CVE-2025-64103
HIGH
Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessObtain one valid factor (e.g. TOTP)
-
ExploitCreate single-factor session via v2 session API
-
ExecutionZitadel marks session as MFA-complete
-
ImpactUse session bearer token to access account bypassing 2FA
Vulnerability Assessment
| Weakness |
CWE
OWASP Top 10:2025
A07:2025 - Authentication Failures
ASVS 5.0
V6 - Authentication Authentication mechanism validation
MITRE ATT&CK
2 techniques across 2 tactics: Defense Evasion, Initial Access The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up. |
| Exploitation Conditions | Exploitation requires a specific, named combination: (1) the deployment uses the Zitadel v2/v2-beta session API directly or the new login UI; (2) the login policy has NEITHER requireMFA NOR requireMFAForLocalUsers enabled; and (3) the targeted user has self-enrolled a second factor (TOTP, U2F, OTP-SMS, or OTP-Email) under that non-enforcing policy. Given those, an attacker needs only ONE valid factor - critically, the standalone 6-digit TOTP code, which can be brute-forced, bypassing password verification entirely. Limiting factors that reduce real-world exposure: the flaw does not apply where the login policy already forces MFA, does not apply to machine users (no interactive login), does not affect legacy login flows outside the session API, and still requires the attacker to possess or guess one factor (PR:L), so it is not usable against an attacker with zero credentials. |
| Impact | This is a genuine authentication-bypass priority for affected Zitadel deployments, not a CVSS-inflated non-issue. The vendor CVSS 4.0 vector (AV:N/AC:L/AT:N/PR:L/UI:N/VC:H/VI:H/VA:H, score 8.7/High) is internally consistent with the advisory: network-reachable session API, low complexity, and PR:L reflecting that the attacker must present one legitimate factor rather than being fully unauthenticated. The core danger is that Zitadel prematurely marked a single-factor session as fully authenticated when a user had voluntarily enrolled MFA but the login policy did not set requireMFA/requireMFAForLocalUsers - so an attacker can satisfy MFA with just the 6-digit TOTP (or just the password) and defeat the second factor entirely. No EPSS score, CISA KEV entry, or public exploit was provided, so exploitation is: no public exploit identified at time of analysis - the flaw was found during a scheduled penetration test by zentrust partners, indicating it was responsibly disclosed rather than exploited in the wild. The absence of KEV/EPSS data should be treated as missing signal, not as evidence of low risk: the 6-digit TOTP-only path is realistically brute-forceable, which materially raises practical exploitability for any operator who relied on self-service MFA enrollment without enforcing a policy. |
| Exploit ScenarioDerived | An attacker who holds one of a victim's authentication factors - for example a phished/reused password, or alternatively just the ability to brute-force the account's 6-digit TOTP - creates a session through Zitadel's v2 session API (or the new login UI). Because the login policy does not force MFA, Zitadel issues a fully-valid session token after only that single factor, and the attacker uses it as a Bearer token to access the account despite its 2FA being enabled. No public exploit code is known, but the attack requires no special tooling. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Oct 19, 2026
Second-factor bypass in Zitadel lets a session be treated as fully authenticated after only one authentication factor is verified, so an account with TOTP, U2F, OTP-SMS, or OTP-Email enrolled can be accessed with just the standalone 6-digit code and no password. The flaw affects deployments using the session API v2/v2-beta or the new login UI in Zitadel 4.0.0 through 4.5.0, 3.0.0 through 3.4.2, and 2.53.6 through 2.71.17, but only when the login policy has neither requireMFA nor requireMFAForLocalUsers enabled and the targeted user self-enrolled a second factor anyway. Exploitation requires a low-privileged position (CVSS PR:L) - the attacker must already hold or guess one valid factor, with the brute-forceable six-digit TOTP code being the cheapest entry point - and no public exploit code has been identified at time of analysis, with no CISA KEV listing.
RemediationAI
Vendor-released patch: upgrade to Zitadel 4.6.0 or later for 4.x, 3.4.3 or later for 3.x, or 2.71.18 or later for 2.x (2.53.x and 2.54.x users must move to 2.71.18 since no fixed release exists on those branches). The fix commit is https://github.com/zitadel/zitadel/commit/b284f8474eed0cba531905101619e7ae7963156b and the advisory is https://github.com/zitadel/zitadel/security/advisories/GHSA-cfjq-28r2-4jv5. If upgrading cannot be scheduled immediately, the highest-value compensating control is to enable requireMFA (or requireMFAForLocalUsers for local accounts) in every login policy that governs users who have self-enrolled a second factor - this restores enforcement of the second factor, at the cost of forcing MFA enrollment prompts on users who had none and possibly locking out accounts without a registered factor, so stage it per organization first. A second option is to temporarily disable the session API v2/v2-beta and the new login UI in favor of the legacy login flow, which is not affected by this logic, with the trade-off of losing the custom login experience and Bearer-token session semantics for integrations. As a detection measure rather than a fix, audit session tokens and Zitadel logs for sessions for MFA-enrolled users that were established with password-only or TOTP-only authentication, and consider temporarily removing unused second-factor enrollments from high-value accounts so the downgrade path has no factor to shortcut to - noting this reduces rather than eliminates risk and must be reversed once patched. Rotating session tokens and secrets for accounts that may have been accessed during exposure is advised.
Affected Packages
Source: OSV (Open Source Vulnerabilities)
Affects your stack
Affects 2 packages in go
Checking this CVE against your own stacks and servers is part of the Basic plan and up.
Technical ContextAI · show details
Zitadel's session API issues session tokens that are used as Bearer tokens against the Zitadel API, and the vulnerable logic lives in the token verification path (internal/authz/repository/eventsourcing/eventstore/token_verifier.go, checkAuthentication). Prior to the fix, the code called domain.RequiresMFA() and only enforced a second factor when the login policy explicitly set ForceMFA or ForceMFALocalOnly; if a user had voluntarily enrolled MFA under a non-enforcing policy, a single-factor session was still accepted as valid. The upstream commit b284f8474eed0cba531905101619e7ae7963156b changes the check to compute the set of allowed second factors from the policy (allowed2FAFactors, drawing on AllowedSecondFactors and SetUpFactors), adds domain.AuthMethodToSecondFactor to map UserAuthMethodTypeTOTP/U2F/OTPSMS/OTPEmail onto SecondFactorType values, and rejects the token whenever domain.Has2FA reports an enrolled factor OR the policy forces MFA. The query layer (internal/query/user_auth_method.go) was extended to return AllowedSecondFactors and SetUpFactors, and regression tests were added both for the gRPC session v2 path (Test_ZITADEL_API_missing_mfa) and the OIDC path (Test_ZITADEL_API_missing_mfa_2fa_setup). The root cause is CWE-287, Improper Authentication: a policy-driven authorization decision treated an unset requirement as a permission to skip the check entirely, converting optional MFA enrollment into a downgrade of the authentication state machine. Machine users are explicitly excluded because they have no interactive login, and legacy login flows outside the session API are unaffected.
Know when Zitadel 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
CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N
Network session API with low complexity; PR:L because the attacker must supply one legitimate factor; full account takeover yields high confidentiality, integrity, and availability impact.
Primary rating from Vendor (github).
CVSS VectorVendor: github
DescriptionCVE.org
Starting from 2.53.6, 2.54.3, and 2.55.0, Zitadel only required multi factor authentication in case the login policy has either enabled requireMFA or requireMFAForLocalUsers. If a user has set up MFA without this requirement, Zitadel would consider single factor auhtenticated sessions as valid as well and not require multiple factors. Bypassing second authentication factors weakens multifactor authentication and enables attackers to bypass the more secure factor. An attacker can target the TOTP code alone, only six digits, bypassing password verification entirely and potentially compromising accounts with 2FA enabled. This vulnerability is fixed in 4.6.0, 3.4.3, and 2.71.18.
Executive ViewAI
Zitadel identity deployments in the affected version ranges can treat a session as fully authenticated after only one factor when MFA is not enforced by login policy, undermining the protection organizations expect from enrolled second factors. This creates account-access risk for users who self-enrolled TOTP, U2F, OTP-SMS, or OTP-Email under non-enforcing policies, and it should be prioritized because it affects core authentication assurance. No public exploit has been identified at time of analysis, but the issue is rated HIGH with CVSS 8.7 and a vendor patch is available.
Apply vendor patch.
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
Authentication bypass attacks exploit flaws in the verification mechanisms that control access to systems and applications.
Affected Products (CPE)CVE.org
Zitadel is open-source identity infrastructure software. Rated critical severity (CVSS 9.1), this vulnerability is remot
ZITADEL is an identity infrastructure system. Rated high severity (CVSS 8.8), this vulnerability is remotely exploitable
Authentication bypass in ZITADEL 4.x before 4.19.2 and 3.x through 3.4.15 lets an authenticated attacker with organizati
Account takeover in ZITADEL affects instances running 3.0.0 through 3.4.15 and 4.0.0 before 4.17.3: an unauthenticated r
Cross-organization account takeover in ZITADEL 3.x before 3.4.15 and 4.x before 4.17.1 allows an authenticated attacker
Stored XSS in ZITADEL identity management platform versions 4.0.0 to 4.11.1 allows unauthenticated attackers to inject p
Account pre-hijacking in ZITADEL lets an unauthenticated remote attacker create a user record already bound to a victim'
Authentication bypass in ZITADEL's Login V2 UI (versions 3.0.0 through 4.19.1) allows unauthenticated attackers to take
Remote account takeover in ZITADEL versions before 4.17.1 allows unauthenticated attackers to compromise MFA-protected a
The open-source identity infrastructure software Zitadel allows administrators to disable the user self-registration. Ra
The open-source identity infrastructure software Zitadel allows administrators to disable the user self-registration. Ra
Unauthenticated username-change in ZITADEL's hosted Login V1 UI lets a remote attacker rename any active human account -
NVD
CVE.org
EPSS
GitHub
Exploit-DB