CVE-2025-64101

8.1 HIGH

📋 TL;DR

This vulnerability allows attackers to hijack password reset links in Zitadel identity management software by manipulating HTTP headers. Attackers can redirect users to malicious domains to capture reset codes and gain unauthorized account access. Users without MFA or passwordless authentication are primarily affected.

💻 Affected Systems

Products:
  • Zitadel
Versions: All versions prior to 4.6.0, 3.4.3, and 2.71.18
Operating Systems: All
Default Config Vulnerable: ⚠️ Yes
Notes: Vulnerability affects the password reset mechanism specifically; accounts with MFA or passwordless authentication are protected.

📦 What is this software?

⚠️ Risk & Real-World Impact

🔴

Worst Case

Complete account takeover for users without MFA, potentially leading to privilege escalation, data theft, and lateral movement within the organization.

🟠

Likely Case

Targeted account compromise of users who click manipulated password reset emails, with attackers gaining access to sensitive identity management systems.

🟢

If Mitigated

Minimal impact for accounts with MFA or passwordless authentication enabled, as these require additional verification beyond the reset code.

🌐 Internet-Facing: HIGH
🏢 Internal Only: MEDIUM

🎯 Exploit Status

Public PoC: ✅ No
Weaponized: LIKELY
Unauthenticated Exploit: ⚠️ Yes
Complexity: LOW

Attack requires ability to manipulate HTTP headers (host header injection) and user interaction (clicking email link).

🛠️ Fix & Mitigation

✅ Official Fix

Patch Version: 4.6.0, 3.4.3, or 2.71.18

Vendor Advisory: https://github.com/zitadel/zitadel/security/advisories/GHSA-mwmh-7px9-4c23

Restart Required: Yes

Instructions:

1. Identify your Zitadel version. 2. Upgrade to 4.6.0, 3.4.3, or 2.71.18 based on your major version. 3. Restart Zitadel services. 4. Verify the fix by testing password reset functionality.

🔧 Temporary Workarounds

Enable MFA for all users

all

Require Multi-Factor Authentication for all accounts to mitigate the impact even if exploitation occurs.

Configure reverse proxy to strip suspicious headers

linux

Configure load balancers or reverse proxies to strip or validate X-Forwarded-Host and Forwarded headers.

# Example nginx configuration to strip headers
proxy_set_header X-Forwarded-Host "";
proxy_set_header Forwarded "";

🧯 If You Can't Patch

  • Implement network controls to prevent host header injection attacks at the perimeter.
  • Enable MFA for all users and monitor for suspicious password reset attempts.

🔍 How to Verify

Check if Vulnerable:

Check Zitadel version against affected versions; test password reset functionality with manipulated X-Forwarded-Host headers.

Check Version:

Check Zitadel admin interface or run: docker inspect zitadel | grep -i version

Verify Fix Applied:

After patching, verify password reset links no longer use manipulated headers and test with header injection attempts.

📡 Detection & Monitoring

Log Indicators:

  • Unusual X-Forwarded-Host header values in password reset requests
  • Multiple failed password reset attempts from same IP

Network Indicators:

  • HTTP requests with manipulated Forwarded or X-Forwarded-Host headers

SIEM Query:

source="zitadel" AND (http_header="X-Forwarded-Host" OR http_header="Forwarded") AND action="password_reset"

🔗 References

📤 Share & Export