Skip to content

GHSA-mq4x-r2w3-j7mr CVE-2024-28197 GO-2024-2637

Account Takeover via Session Fixation in Zitadel [Bypassing MFA]

High Go
Severity
0.0 / 10
High · CVSS 4.0
Exploit chance (EPSS)
0.34%
Chance of exploitation in the next 30 days. Higher than 26.96% of scored vulnerabilities.
Known exploited
No
Not in CISA's catalog
Weakness
CWE-269 Improper Privilege Management
CWE-384 Session Fixation
Fix
2.44.3
Upgrade github.com/zitadel/zitadel to this version or later

Description

Impact

ZITADEL uses a cookie to identify the user agent (browser) and its user sessions.

Although the cookie was handled according to best practices, it was accessible on subdomains of the ZITADEL instance. An attacker could take advantage of this and provide a malicious link hosted on the subdomain to the user to gain access to the victim’s account in certain scenarios. A possible victim would need to login through the malicious link for this exploit to work.

If the possible victim already had the cookie present, the attack would not succeed. The attack would further only be possible if there was an initial vulnerability on the subdomain. This could either be the attacker being able to control DNS or a XSS vulnerability in an application hosted on a subdomain.

Patches

2.x versions are fixed on >= 2.46.0 2.45.x versions are fixed on >= 2.45.1 2.44.x versions are fixed on >= 2.44.3

ZITADEL recommends upgrading to the latest versions available in due course.

Note that applying the patch will invalidate the current cookie and thus users will need to start a new session and existing sessions (user selection) will be empty.

Workarounds

For self-hosted environments unable to upgrade to a patched version, prevent setting the following cookie name on subdomains of your ZITADEL instance (e.g. within your WAF): __Secure-zitadel-useragent

References

None

Questions

If you have any questions or comments about this advisory, please email us at security@zitadel.com

Credits

Thanks to Amit Laish – GE Vernova for finding and reporting the vulnerability.

Affected versions

Go

PackageVulnerableFixed in
github.com/zitadel/zitadel
< 2.44.3
2.44.3
github.com/zitadel/zitadel
>= 2.45.0, < 2.45.1
2.45.1
github.com/zitadel/zitadel
all versions
No fix yet

How to fix

Move to the fixed version or later with your package manager, update the lockfile, and run your tests. If the package only arrives through another dependency, upgrade that dependency first. If none of its releases pulls a fixed version yet, force the version with your package manager's override.

github.com/zitadel/zitadel Go → 2.44.3

go
go get github.com/zitadel/zitadel@v2.44.3 && go mod tidy

Severity breakdown

CVSS 4.0 0.0

CVSS:4.0/AV:N/AC:H/AT:N/PR:N/UI:P/VC:N/VI:H/VA:N/SC:H/SI:H/SA:N

Attack vector
Network
Attack complexity
High
Attack requirements
None
Privileges required
None
User interaction
Passive
Confidentiality (vulnerable system)
None
Integrity (vulnerable system)
High
Availability (vulnerable system)
None
Confidentiality (subsequent systems)
High
Integrity (subsequent systems)
High
Availability (subsequent systems)
None

CVSS 3.1 7.5

CVSS:3.1/AV:A/AC:H/PR:N/UI:R/S:C/C:H/I:H/A:N

Attack vector
Adjacent
Attack complexity
High
Privileges required
None
User interaction
Required
Scope
Changed
Confidentiality
High
Integrity
High
Availability
None

Weakness

CWE-269: Improper Privilege Management

The product does not properly assign, modify, track, or check privileges for an actor, creating an unintended sphere of control for that actor.

How to prevent it
  • Architecture and Design, Operation: Very carefully manage the setting, management, and handling of privileges. Explicitly manage trust zones in the software.
  • Architecture and Design: Follow the principle of least privilege when assigning access rights to entities in a software system.
  • Architecture and Design: Consider following the principle of separation of privilege. Require multiple conditions to be met before permitting access to a system resource.

CWE-384: Session Fixation

Authenticating a user, or otherwise establishing a new user session, without invalidating any existing session identifier gives an attacker the opportunity to steal authenticated sessions.

How to prevent it
  • Architecture and Design: Invalidate any existing session identifiers prior to authorizing a new user session.
  • Architecture and Design: For platforms such as ASP that do not generate new values for sessionid cookies, utilize a secondary cookie. In this approach, set a secondary cookie on the user's browser to a random value and set a session variable to the same value. If the session variable and the cookie value ever don't match, invalidate the session, and force the user to log on again.
  • Operation: Use an application firewall that can detect attacks against this weakness. It can be beneficial in cases in which the code cannot be fixed (because it is controlled by a third party), as an emergency prevention measure while more comprehensive software assurance measures are applied, or to provide defense in depth [REF-1481].

References

Timeline

  1. Published
  2. Last updated by the source
  3. Latest EPSS score
AdvisorySeverityWhy it's related
GHSA-fgmf-7rf8-m6vf
ZITADEL: Actions V1 sandbox escape: host file read via require()
High Also affects github.com/zitadel/zitadel
GHSA-9993-rfwp-rhwf
ZITADEL: MFA bypass via session reuse in Login V2
High Also affects github.com/zitadel/zitadel
GHSA-v859-c572-qh5p
ZITADEL: Improper Role Revocation on Granted Projects during Multiple Role Deletions
Medium Also affects github.com/zitadel/zitadel
GHSA-jq8w-8q2f-ffm9
ZITADEL Users Can Self-Verify Email/Phone via API
High Also affects github.com/zitadel/zitadel
GHSA-vrh8-c9cm-wh8v
ZITADEL: Unauthorized Token Privilege Escalation in OAuth2 Token Exchange
High Also affects github.com/zitadel/zitadel
GHSA-992q-9gwp-7r79
ZITADEL: Auto-linking by email: IdP-side email verification is not checked
Medium Also affects github.com/zitadel/zitadel
GHSA-v77h-2w3m-94hx
ZITADEL: Missing Token Expiration (`exp`) Validation in JWT IdP Provider
Medium Also affects github.com/zitadel/zitadel
GHSA-g5h5-m4hm-xjrr
ZITADEL: Missing Token Audience Validation (`aud`) in JWT IdP Provider
Medium Also affects github.com/zitadel/zitadel
Is this in your code?

MergeHarbor checks every repository's dependencies against this database, ranks what matters by exploitability and reachability, routes it to the owning team and opens the fix pull request.

Check your repos with MergeHarbor