CVEReports
CVEReports

Automated vulnerability intelligence platform. Comprehensive reports for high-severity CVEs generated by AI.

Product

  • Home
  • Sitemap
  • RSS Feed

Company

  • About
  • Contact
  • Privacy Policy
  • Terms of Service

© 2026 CVEReports. All rights reserved.

Made with love by Amit Schendel & Alon Barad



CVE-2026-56666

CVE-2026-56666: Account Takeover via Improper Email Verification in ZITADEL Federated Identity Handler

Amit Schendel
Amit Schendel
Senior Security Researcher

Sep 11, 2026·7 min read·2 visits

Executive Summary (TL;DR)

Unauthenticated remote attackers can takeover ZITADEL accounts by abusing a logical flaw where ZITADEL fails to verify the email ownership claim (email_verified) from federated identity providers during automatic account linking.

An improper authentication vulnerability (CWE-287) in ZITADEL's external identity provider handler before version 4.15.3 allows remote attackers to perform complete account takeover. When auto-linking by email is enabled, ZITADEL verifies that the local target account has a verified email address but fails to verify if the external provider confirmed ownership of that same email. Attackers can exploit this by registering an unverified account with a victim's email address on a permissive external provider, leading to unauthorized account binding and persistent access.

Vulnerability Overview

ZITADEL is an open-source cloud-native identity management platform that provides identity federation, authentication, and authorization services. The platform is designed to handle multiple external identity providers (IdPs) via standard protocols such as OpenID Connect (OIDC) and SAML.

To simplify the authentication experience, ZITADEL includes an 'auto-linking by email' feature. This feature automatically matches and links an incoming external identity to an existing local ZITADEL account when their email addresses match, avoiding the need for manual user intervention during registration.

This vulnerability, classified as CWE-287 (Improper Authentication), arises due to a flaw in how ZITADEL validates incoming identity assertions. While ZITADEL verified that the target local account possessed a verified email status, it did not verify whether the incoming external identity provider had actually validated ownership of that email address before performing the auto-link.

The resulting impact is an authentication bypass that can lead to remote, unauthenticated account takeover. If a victim has a verified email address on a ZITADEL instance, an attacker can register that same email on a permissive external identity provider and use it to log in and automatically take control of the victim's ZITADEL account.

Root Cause Analysis

The core of the vulnerability lies in ZITADEL's implicit trust of the federated payload's identity claims. When a user authenticates via an external identity provider, the provider returns a payload containing user attributes. In an OIDC environment, this typically includes the email and email_verified claims.

In versions prior to 4.15.3, ZITADEL's backend logic for automatic account linking only performed validation checks on the local side of the relationship. The function checkAutoLinking checked whether the local user's email was verified in the ZITADEL database using the query NewUserVerifiedEmailSearchQuery. This check was intended to ensure that arbitrary unverified accounts could not be linked, but it failed to evaluate the security state of the incoming federated identity.

This implementation ignored the OIDC specification regarding the email_verified claim. If the external provider did not enforce email verification (a 'permissive' IdP), an attacker could register an account with a victim's email without proving ownership. Upon logging in via this IdP, the incoming payload asserted the target email address but set the email_verified attribute to false (or omitted it entirely).

Because ZITADEL skipped validating the external verification attribute, it proceeded to execute the database link. The external account was bound to the local account, establishing an authenticated session for the attacker under the victim's identity without requiring the victim's password or multi-factor authentication credentials.

Code Analysis

The logical flaw was present in both the Go backend and the TypeScript client-side login server, requiring aligned modifications across both codebases.

In the vulnerable Go backend code within internal/api/ui/login/external_provider_handler.go, the checkAutoLinking handler did not evaluate externalUser.IsEmailVerified before processing the email search query:

// VULNERABLE Go Implementation
case domain.AutoLinkingOptionEmail:
    // Email will always be checked against verified email addresses.
    emailQuery, err := query.NewUserVerifiedEmailSearchQuery(string(externalUser.Email))
    if err != nil {
        return false, nil
    }

The patched version introduces a strict conditional check immediately prior to building the query. This prevents execution if the external user's email status is not verified:

// PATCHED Go Implementation
case domain.AutoLinkingOptionEmail:
    // When checking for email matches, we need to make sure that both (the one from the IdP and the one in Zitadel)
    // are verified to prevent potential account takeovers.
    if !externalUser.IsEmailVerified {
        return false, nil
    }
    emailQuery, err := query.NewUserVerifiedEmailSearchQuery(string(externalUser.Email))
    if err != nil {
        return false, nil
    }

A similar omission was present in the TypeScript login flow in apps/login/src/lib/server/idp-intent.ts. The server-side login logic extracted the email but bypassed checking the corresponding verification state:

// VULNERABLE TypeScript Implementation
const email = addHumanUser?.email?.email;
if (options.autoLinking === AutoLinkingOption.EMAIL && email) {
  foundUser = await listUsers({ serviceConfig, email, organizationId: organization }).then((response) => {
    return response.result ? response.result[0] : null;
  });
}

The fix introduces the emailVerified constant, which parses the OIDC verification structure and enforces that both the email and the verification assertion evaluate to true before executing the user lookup:

// PATCHED TypeScript Implementation
const email = addHumanUser?.email?.email;
const emailVerified = addHumanUser?.email?.verification?.case === "isVerified" && addHumanUser?.email?.verification?.value;
 
if (options.autoLinking === AutoLinkingOption.EMAIL && email && emailVerified) {
  foundUser = await listUsers({ serviceConfig, email, organizationId: organization }).then((response) => {
    return response.result ? response.result[0] : null;
  });
}

Exploitation Methodology

Exploiting CVE-2026-56666 requires specific environmental conditions but no advanced tooling or prior authentication. An attacker must identify a target ZITADEL instance that has enabled 'Auto-linking by email' and configured a permissive external identity provider.

To execute the exploit, the attacker first registers an account on the permissive external identity provider using the victim's email address (e.g., victim@company.com). Because the IdP is permissive, it does not mandate verification of the registered email address to complete the signup or issue tokens.

The attacker then navigates to the target ZITADEL instance and selects the option to authenticate via the permissive external provider. ZITADEL redirects the user to the provider, where the attacker logs in using the newly created unverified account.

Upon successful authentication, the external provider redirects back to ZITADEL, passing an identity token that asserts the victim's email. ZITADEL's vulnerable login handler reads this email, finds the matching, verified local user, and establishes the database link. The attacker's external profile is permanently associated with the victim's local identity, bypassing standard local authentication controls.

Impact Assessment

The successful exploitation of CVE-2026-56666 results in full account takeover. The attacker gains administrative or standard user permissions equivalent to the victim's local account within ZITADEL. This provides access to any downstream applications integrated with ZITADEL using single sign-on (SSO).

Although the vulnerability allows complete authentication bypass, the CVSS v3.1 score is rated as 4.8 (Medium) due to several restrictive environmental requirements. The 'Attack Complexity' (AC:H) is high because the target system must have a specific, vulnerable configuration, and there must be a permissive external identity provider linked to the environment.

No user interaction is required from the victim to trigger the compromise, making it a passive exploitation vector from the perspective of the target. Once the external account is linked, the attacker maintains persistent access even if the victim changes their local ZITADEL password, as federated authentication bypasses the local password validation checks entirely.

From a detection standpoint, the attack can be difficult to distinguish from a standard federated login unless administrators proactively audit changes to linked external identities. This makes the vulnerability highly attractive for targeted persistence in environments that utilize multiple external directory services.

Remediation and Defenses

The primary remediation strategy is upgrading the ZITADEL deployment to version 4.15.3 or higher. This update introduces the mandatory verification checks in both the backend and client-side logic, preventing unverified external claims from initiating automatic links.

If upgrading is not immediately possible, administrators must implement defensive mitigations to protect the environment. The most effective immediate workaround is to disable the 'Auto-linking by email' option within the Identity Provider (IdP) settings in the ZITADEL console. Administrators should transition to linking based on username (such as the OIDC sub claim) or enforce manual linking where users must log in to their local account before associating an external identity.

Administrators should also review the configuration of all configured external identity providers. Any provider that does not strictly enforce email verification before issuing OIDC tokens should be disabled or isolated.

To detect potential past exploitation, security teams should inspect ZITADEL's event store for historic linkings. Querying for user event types associated with identity provider associations (user.external.idp.added) allows security teams to identify any accounts that were linked prior to the application of the patch. These logs should be cross-referenced with external identity provider registration records to ensure correlation and legitimacy.

Official Patches

ZITADELZITADEL Security Advisory GHSA-992q-9gwp-7r79
ZITADELCore Patch Commit

Fix Analysis (1)

Technical Appendix

CVSS Score
4.8/ 10
CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:L/I:L/A:N
EPSS Probability
0.29%
Top 79% most exploited

Affected Systems

ZITADEL Cloud PlatformZITADEL Self-Hosted (Go-based authentication engine)ZITADEL Node/TypeScript Login Server Application

Affected Versions Detail

Product
Affected Versions
Fixed Version
ZITADEL
ZITADEL
< 4.15.34.15.3
AttributeDetail
CWE IDCWE-287
Attack VectorNetwork (AV:N)
CVSS Score4.8
EPSS Score0.00285 (Percentile: 20.90%)
ImpactAccount Takeover / Authentication Bypass
Exploit Statuspoc
KEV StatusNot Listed

MITRE ATT&CK Mapping

T1078Valid Accounts
Initial Access
T1190Exploit Public-Facing Application
Initial Access
CWE-287
Improper Authentication

The platform performs authentication decisions based on an external entity's assertion without verifying that the external entity validated the identity claimed.

Vulnerability Timeline

Core security patches developed and committed
2026-06-22
CVE Published and ZITADEL v4.15.3 released
2026-07-10
National Vulnerability Database (NVD) analysis completed
2026-07-13

References & Sources

  • [1]NVD - CVE-2026-56666 Detail
  • [2]CVE.org - CVE-2026-56666 Record
  • [3]ZITADEL Release Tag v4.15.3

Attack Flow Diagram

Press enter or space to select a node. You can then use the arrow keys to move the node around. Press delete to remove it and escape to cancel.
Press enter or space to select an edge. You can then press delete to remove it or escape to cancel.

More Reports

•37 minutes ago•CVE-2026-56665
4.2

CVE-2026-56665: Logical Validation Bypass in ZITADEL External JWT Identity Provider

A logical verification flaw in ZITADEL's external JWT Identity Provider validation allows attackers to bypass session expiration checks. If an incoming JWT lacks the 'exp' claim, the system skips validation entirely, creating an indefinitely valid session. This issue has been addressed in versions 3.4.12 and 4.15.2.

Alon Barad
Alon Barad
0 views•7 min read
•about 2 hours ago•CVE-2026-59149
6.5

CVE-2026-59149: Sibling Directory Path Traversal in Mockoon Backend Server

CVE-2026-59149 identifies a directory traversal vulnerability in `@mockoon/commons-server`, the backend mock-server library powering the Mockoon application. The flaw occurs in the path containment validation logic used during raw file response generation. An unauthenticated attacker can exploit this weakness to retrieve arbitrary files from sibling directories sharing a common prefix with the designated static base directory.

Amit Schendel
Amit Schendel
2 views•5 min read
•about 3 hours ago•CVE-2026-59148
8.8

CVE-2026-59148: Unauthenticated Administrative API and CORS Misconfiguration in Mockoon

An in-depth analysis of CVE-2026-59148, a high-severity flaw in Mockoon where unauthenticated administrative endpoints and a wildcard Cross-Origin Resource Sharing (CORS) policy allow remote execution, state poisoning, and credential theft.

Alon Barad
Alon Barad
4 views•6 min read
•about 5 hours ago•CVE-2026-59151
9.6

CVE-2026-59151: Cross-Tenant Account Takeover via Improper SAML Assertion Validation in Prowler

A critical authentication bypass and cross-tenant account takeover vulnerability exists in the Prowler cloud security platform due to improper validation of the SAML Assertion Consumer Service (ACS) flow. An authenticated attacker controlling a custom Identity Provider (IdP) can forge assertions targeting arbitrary user identities across distinct tenants, allowing complete unauthorized access to target tenant-scoped resources.

Amit Schendel
Amit Schendel
3 views•6 min read
•about 6 hours ago•CVE-2026-11745
8.8

CVE-2026-11745: Host Key Verification Bypass in Central Dogma Git Mirror SSH Client

An issue was identified in Central Dogma prior to version 0.84.0. The Git mirror SSH client does not verify remote host keys for git+ssh:// connections, which allows an on-path attacker to execute man-in-the-middle attacks and compromise mirrored repositories.

Amit Schendel
Amit Schendel
2 views•7 min read
•about 11 hours ago•CVE-2026-87014
6.5

CVE-2026-87014: Session Desynchronization and Privilege Persistence in Open WebUI

Open WebUI from version 0.9.0 to 0.11.1 is vulnerable to a state desynchronization and privilege persistence flaw. When an administrator is demoted to a standard user via Single Sign-On (SSO) role synchronization, the local database is updated, but their active Socket.IO connection is not invalidated. Because the WebSocket handlers authorize operations using the cached role in the socket context, the demoted user retains administrative read and write access to all collaborative notes.

Alon Barad
Alon Barad
3 views•7 min read