All vulnerabilities

Servers and applications

GHSA-qvxq-53gh-64f6

Bypass of GHSA-mchc-246r-6m76: account takeover via userinfo in the public host header

Severity
High 8.1
Published
13 Nov 2026
Last changed
13 Nov 2026
Added to UpHeron
13 Nov 2026
Fixed in
4.20.3
Weakness
Weak password recovery (CWE-640)
Attack
Over the network · No login needed · Needs someone to click or open something
Attacker can
Read data · Change data
CVSS vector
CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:H/I:H/A:N
Sources
Project advisories (GitHub)

Description

ZITADEL allowed an unauthenticated attacker who knows only a victim’s login name to redirect that victim’s genuine password-reset, invite, and email-verification links to an attacker-controlled host, while the links still carried the real single-use codes. Harvesting such a code lets the attacker set a new password — or complete verification — and sign in as the victim, including an instance administrator. This is a bypass of the fix for GHSA-mchc-246r-6m76.

The fix for GHSA-mchc-246r-6m76 validates the public host from the x-zitadel-public-host request header against the instance’s trusted domains. However, the trusted-domain check and the links read the header value differently: a value that places a trusted host in the user-information portion of the header, in front of an attacker-controlled host, was checked as the trusted host, while a link built from the same value points to the attacker host.

From zitadel/zitadel's security advisory. Shortened; the full text is there.

Workarounds

The recommended solution is to upgrade to a patched version. There is no configuration that fully closes this gap on unpatched versions.

As a partial mitigation, a ZITADEL fronting proxy can be configured to strip or overwrite the x-zitadel-public-host header on all inbound requests, so that the public host cannot be set by a client.

Workarounds as given by zitadel/zitadel's security advisory.

Affected software

SoftwareAffected versions
ZITADELServers and applications · github:zitadel/zitadel
  • From 4.19.5 before 4.20.3

References