🔍 CVE-2026-27840

4.3
CVSS Score
MEDIUM
2026-02-26
2026-06-17 10:27
✅ 완료

🇰🇷 한글 설명

ZITADEL 오픈소스 ID 관리 플랫폼의 특정 버전에서 v2 형식의 불투명 OIDC 액세스 토큰이 80자까지만 잘려도 유효한 것으로 간주되는 취약점이 발견되었습니다. v2 토큰의 페이로드에서 사용자 ID가 누락되더라도 백엔드에서 이를 그대로 수용하는 문제가 발생합니다. 패치된 버전에서는 토큰의 사용자 ID와 데이터베이스의 세션 데이터를 대조하여 검증하도록 개선되었습니다.

💡 쉬운 설명

인증에 사용되는 암호화된 토큰이 중간에 잘려도 시스템이 이를 정상적인 토큰으로 잘못 인식할 수 있는 문제입니다. 실제 공격으로 이어지기는 어렵지만, 보안 규칙이 느슨하게 적용되는 상태입니다.

🇺🇸 원문 (English)

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.

📍 영향받는 시스템

ZITADEL version 2.31.0 및 3.4.7/4.11.0 미만 버전

⚔️ 공격 벡터

80자로 절단된 불완전한 v2 형식의 OIDC 액세스 토큰을 사용하여 인증 시도

🛡️ 대응 방법

ZITADEL을 최신 패치 버전인 3.4.7 또는 4.11.0 이상으로 업데이트

🔧 검증 코드

설치된 ZITADEL의 버전을 확인하여 3.4.7 또는 4.11.0 미만인지 확인합니다.

Shell / Script
curl -s http://<zitadel-host>/healthz | grep -i 'version' || echo 'Check version via CLI/API'

📊 CVSS Vector String

CVSS Vector
CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:N/I:L/A:N

💻 영향받는 소프트웨어

IBM Verify Identity Access