Skip to main content

Zitadel CVE-2025-64103

HIGH
Improper Authentication (CWE-287)
2025-10-29 security-advisories@github.com
8.7
CVSS 4.0 · Vendor: github
View

Attack ChainAIDerived

Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain

  1. Access
    Obtain one valid factor (e.g. TOTP)
  2. Exploit
    Create single-factor session via v2 session API
  3. Execution
    Zitadel marks session as MFA-complete
  4. Impact
    Use 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.

This Week Schedule remediation this week. Why: HIGH severity (CVSS 7.0-8.9).
Patch available 0.4% exploitation probability (EPSS)

Get an e-mail when this CVE is exploited, patched or re-scored. Free account.

Alert me

AnalysisAIv1 – 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

go github.com/zitadel/zitadel fix: 1.80.0-v2.20.0.20251029091250-b284f8474eed
go github.com/zitadel/zitadel/v2 fix: 2.71.18

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

Vendor (github) PRIMARY 8.7 HIGH
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
vuln.today AI 8.8 HIGH

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.

3.1 AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H
4.0 AV:N/AC:L/AT:N/PR:L/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N

Primary rating from Vendor (github).

CVSS VectorVendor: github

Attack Vector
Network
Attack Complexity
Low
Attack Requirements
None
Privileges Required
Low
User Interaction
None
Vulnerable system: Confidentiality
High
Vulnerable system: Integrity
High
Vulnerable system: Availability
High
Subsequent system: Confidentiality
None
Subsequent system: Integrity
None
Subsequent system: Availability
None

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

Why It Matters

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.

Business Impact: High
Compensating Controls

Apply vendor patch.

Threat Intelligence Overview

EPSS Score
0.4%
Top 73% exploitable
Prevalence
Low
self-hosted open-source IAM platform, specialized and modest deployment footprint
Data Quality
3 sources
Confidence: Low

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.

SignalValue
Severity HIGH
CISA KEV No
Public POC No
EPSS 0.4%
Patch available Yes
Active threat No
Deciding rule
HIGH severity (CVSS 7.0-8.9)
What every action level means
Emergency Immediate action required. Criteria: CRITICAL + in CISA KEV (actively exploited) without patch, OR CRITICAL + EPSS > 30% without patch, OR CRITICAL + active threat signals without patch.
Act Now Prioritize within 24-48h. Criteria: in KEV with patch available, OR CRITICAL + public POC, OR HIGH + EPSS > 10%, OR CRITICAL + active threat, OR any CRITICAL severity.
This Week Schedule remediation this week. Criteria: HIGH severity (CVSS 7.0-8.9). Patch within normal change window.
This Month Plan within 30 days. Criteria: MEDIUM severity (CVSS 4.0-6.9), lower exploitation probability. Include in regular patch cycle.
Monitor Track and reassess. Criteria: LOW severity (CVSS 0.1-3.9), minimal exploitation risk. No immediate action needed.

SSVC AssessmentENISA

SSVC Decision· derived
Scheduled
Exploitation· derived
None
System Exposure· derived
Open
Automatable· derived
No
Human Impact
High

Priority Score

44
Low Medium High Critical
KEV: 0
EPSS: 0
CVSS: +44
PoC: 0
Weaponized: 0
Threat intel: 0
Gov advisory: 0

Attack Technique

Authentication bypass attacks exploit flaws in the verification mechanisms that control access to systems and applications.

Affected Products (CPE)CVE.org

cpe:2.3:a:zitadel:zitadel:*:*:*:*:*:*:*:*
cpe:2.3:a:zitadel:zitadel:*:*:*:*:*:*:*:*
cpe:2.3:a:zitadel:zitadel:*:*:*:*:*:*:*:*
cpe:2.3:a:zitadel:zitadel:*:*:*:*:*:*:*:*
cpe:2.3:a:zitadel:zitadel:*:*:*:*:*:*:*:*
CVE-2024-49753 CRITICAL POC
9.1 Oct 25

Zitadel is open-source identity infrastructure software. Rated critical severity (CVSS 9.1), this vulnerability is remot

CVE-2023-49097 HIGH POC
8.8 Nov 30

ZITADEL is an identity infrastructure system. Rated high severity (CVSS 8.8), this vulnerability is remotely exploitable

CVE-2026-109372 CRITICAL
9.3 Oct 12

Authentication bypass in ZITADEL 4.x before 4.19.2 and 3.x through 3.4.15 lets an authenticated attacker with organizati

CVE-2026-105207 CRITICAL
9.3 Oct 04

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

CVE-2026-105209 CRITICAL
9.3 Oct 04

Cross-organization account takeover in ZITADEL 3.x before 3.4.15 and 4.x before 4.17.1 allows an authenticated attacker

CVE-2026-29191 CRITICAL
9.3 Mar 07

Stored XSS in ZITADEL identity management platform versions 4.0.0 to 4.11.1 allows unauthenticated attackers to inject p

CVE-2026-105215 CRITICAL
9.3 Oct 04

Account pre-hijacking in ZITADEL lets an unauthenticated remote attacker create a user record already bound to a victim'

CVE-2026-109373 CRITICAL
9.2 Oct 12

Authentication bypass in ZITADEL's Login V2 UI (versions 3.0.0 through 4.19.1) allows unauthenticated attackers to take

CVE-2026-105211 CRITICAL
9.2 Oct 04

Remote account takeover in ZITADEL versions before 4.17.1 allows unauthenticated attackers to compromise MFA-protected a

CVE-2025-27507 CRITICAL
9.0 Mar 04

The open-source identity infrastructure software Zitadel allows administrators to disable the user self-registration. Ra

CVE-2024-49757 MEDIUM POC
4.9 Oct 25

The open-source identity infrastructure software Zitadel allows administrators to disable the user self-registration. Ra

CVE-2026-109371 HIGH
8.8 Oct 12

Unauthenticated username-change in ZITADEL's hosted Login V1 UI lets a remote attacker rename any active human account -

This site uses cookies essential for authentication and security. No tracking or analytics cookies are used. Privacy Policy