Instituto Nacional de ciberseguridad. Sección Incibe
Instituto Nacional de Ciberseguridad. Sección INCIBE-CERT

Vulnerabilidad en ZITADEL (CVE-2026-27840)

Gravedad CVSS v3.1:
MEDIA
Tipo:
No Disponible / Otro tipo
Fecha de publicación:
26/02/2026
Última modificación:
05/03/2026

Descripción

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.

Productos y versiones vulnerables

CPE Desde Hasta
cpe:2.3:a:zitadel:zitadel:*:*:*:*:*:*:*:* 2.31.0 (incluyendo) 2.71.19 (incluyendo)
cpe:2.3:a:zitadel:zitadel:*:*:*:*:*:*:*:* 3.0.0 (incluyendo) 3.4.7 (excluyendo)
cpe:2.3:a:zitadel:zitadel:*:*:*:*:*:*:*:* 4.0.0 (incluyendo) 4.11.0 (excluyendo)