CVE-2026-27840

ZITADEL is an open source identity management platform. Starting in version 2.31.0 and prior to versions 3.4.7 and 4.11.0, opaque OIDC access tokens in the v2 format truncated to 80 characters are still considered valid. Zitadel uses a symmetric AES encryption for opaque tokens. The cleartext payload is a concatenation of a couple of identifiers, such as a token ID and user ID. Internally Zitadel has 2 different versions of token payloads. v1 tokens are no longer created, but are still verified as to not invalidate existing session after upgrade. The cleartext payload has a format of `<token_id>:<user_id>`. v2 tokens distinguished further where the `token_id` is of the format `v2_<oidc_session_id>-at_<access_token_id>`. V1 token authZ/N session data is retrieved from the database using the (simple) `token_id` value and `user_id` value. The `user_id` (called `subject` in some parts of our code) was used as being the trusted user ID. V2 token authZ/N session data is retrieved from the database using the `oidc_session_id` and `access_token_id` and in this case the `user_id` from the token is ignored and taken from the session data in the database. By truncating the token to 80 chars, the user_id is now missing from the cleartext of the v2 token. The back-end still accepts this for above reasons. This issue is not considered exploitable, but may look awkward when reproduced. The patch in versions 4.11.0 and 3.4.7 resolves the issue by verifying the `user_id` from the token against the session data from the database. No known workarounds are available.
Configurations

Configuration 1 (hide)

OR cpe:2.3:a:zitadel:zitadel:*:*:*:*:*:*:*:*
cpe:2.3:a:zitadel:zitadel:*:*:*:*:*:*:*:*
cpe:2.3:a:zitadel:zitadel:*:*:*:*:*:*:*:*

History

05 Mar 2026, 16:04

Type Values Removed Values Added
References () https://github.com/zitadel/zitadel/releases/tag/v3.4.7 - () https://github.com/zitadel/zitadel/releases/tag/v3.4.7 - Release Notes
References () https://github.com/zitadel/zitadel/releases/tag/v4.11.0 - () https://github.com/zitadel/zitadel/releases/tag/v4.11.0 - Release Notes
References () https://github.com/zitadel/zitadel/security/advisories/GHSA-6mq3-xmgp-pjm5 - () https://github.com/zitadel/zitadel/security/advisories/GHSA-6mq3-xmgp-pjm5 - Vendor Advisory
First Time Zitadel
Zitadel zitadel
CPE cpe:2.3:a:zitadel:zitadel:*:*:*:*:*:*:*:*
Summary
  • (es) ZITADEL es una plataforma de gestión de identidades de código abierto. A partir de la versión 2.31.0 y antes de las versiones 3.4.7 y 4.11.0, los tokens de acceso OIDC opacos en formato v2 truncados a 80 caracteres todavía se consideran válidos. Zitadel utiliza un cifrado AES simétrico para tokens opacos. La carga útil en texto claro es una concatenación de un par de identificadores, como un ID de token y un ID de usuario. Internamente, Zitadel tiene 2 versiones diferentes de cargas útiles de token. Los tokens v1 ya no se crean, pero aún se verifican para no invalidar las sesiones existentes después de la actualización. La carga útil en texto claro tiene un formato de ':'. Los tokens v2 se distinguen aún más donde el 'token_id' tiene el formato 'v2_-at_'. Los datos de sesión de authZ/N del token v1 se recuperan de la base de datos utilizando el valor (simple) de 'token_id' y el valor de 'user_id'. El 'user_id' (llamado 'subject' en algunas partes de nuestro código) se utilizaba como el ID de usuario de confianza. Los datos de sesión de authZ/N del token v2 se recuperan de la base de datos utilizando el 'oidc_session_id' y el 'access_token_id' y, en este caso, el 'user_id' del token se ignora y se toma de los datos de sesión en la base de datos. Al truncar el token a 80 caracteres, el 'user_id' ahora falta en el texto claro del token v2. El back-end todavía acepta esto por las razones mencionadas. Este problema no se considera explotable, pero puede parecer incómodo cuando se reproduce. El parche en las versiones 4.11.0 y 3.4.7 resuelve el problema verificando el 'user_id' del token contra los datos de sesión de la base de datos. No se conocen soluciones alternativas disponibles.

26 Feb 2026, 01:16

Type Values Removed Values Added
New CVE

Information

Published : 2026-02-26 01:16

Updated : 2026-03-05 16:04


NVD link : CVE-2026-27840

Mitre link : CVE-2026-27840

CVE.ORG link : CVE-2026-27840


JSON object : View

Products Affected

zitadel

  • zitadel
CWE
CWE-302

Authentication Bypass by Assumed-Immutable Data