ZITADEL's truncated opaque tokens are still valid
Key facts
- Attack vector
- Network
- Privileges required
- None
- User interaction
- Required
- Attack complexity
- Low
- Impact type
- —
- Confidentiality · integrity · availability
- None · Low · None
- Fix status
- Fixed
Attack profile from CVSS 3.1 · CNA. Fix status from CNA and GitHub.
Summary
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.
Why it matters now
SSVC decision points
CISA ADP · SSVC 2.0.3
- Exploitation
- None
- Automatable
- No
- Technical impact
- Partial
The decision (Track, Attend, Act) also depends on your mission and well-being impact; see CISA's SSVC guide.
Affected products
| Vendor | Product | Affected versions | Fixed in | Status | Source |
|---|---|---|---|---|---|
| zitadel | zitadel | 4.0.0 to before 4.11.0; 3.0.0 to before 3.4.7; 2.31.0 – 2.71.19 | 4.11.0, 3.4.7 | Patch available | CNA |
| — | github.com/zitadel/zitadel (Go) | 4.0.0 to before 4.11.0 | 4.11.0 | Patch available | GHSA-6mq3-xmgp-pjm5 |
| — | github.com/zitadel/zitadel (Go) | 3.0.0 to before 3.4.7 | 3.4.7 | Patch available | GHSA-6mq3-xmgp-pjm5 |
| — | github.com/zitadel/zitadel (Go) | 2.31.0 – 2.71.19 | — | No fix listed | GHSA-6mq3-xmgp-pjm5 |
| — | github.com/zitadel/zitadel (Go) | before 1.80.0-v2.20.0.20260216092519-feab8e1fa371 | 1.80.0-v2.20.0.20260216092519-feab8e1fa371 | Patch available | GHSA-6mq3-xmgp-pjm5 |
- zitadel Vendorzitadel Affected 4.0.0 to before 4.11.0; 3.0.0 to before 3.4.7; 2.31.0 – 2.71.19 Fixed in 4.11.0, 3.4.7 Patch available CNA
- github.com/zitadel/zitadel (Go) Vendor— Affected 4.0.0 to before 4.11.0 Fixed in 4.11.0 Patch available GHSA-6mq3-xmgp-pjm5
- github.com/zitadel/zitadel (Go) Vendor— Affected 3.0.0 to before 3.4.7 Fixed in 3.4.7 Patch available GHSA-6mq3-xmgp-pjm5
- github.com/zitadel/zitadel (Go) Vendor— Affected 2.31.0 – 2.71.19 Fixed in — No fix listed GHSA-6mq3-xmgp-pjm5
- github.com/zitadel/zitadel (Go) Vendor— Affected before 1.80.0-v2.20.0.20260216092519-feab8e1fa371 Fixed in 1.80.0-v2.20.0.20260216092519-feab8e1fa371 Patch available GHSA-6mq3-xmgp-pjm5
CPE configurations NVD · 1
| CPE | Versions | Role | Vendor |
|---|---|---|---|
| cpe:2.3:a:zitadel:zitadel:*:*:*:*:*:*:*:* | 2.31.0 – 2.71.19; 3.0.0 to before 3.4.7; 4.0.0 to before 4.11.0 | Vulnerable | zitadel |
- cpe:2.3:a:zitadel:zitadel:*:*:*:*:*:*:*:* Versions 2.31.0 – 2.71.19; 3.0.0 to before 3.4.7; 4.0.0 to before 4.11.0 Vulnerable ·zitadel
Remediation
- Fix · CNA zitadel (zitadel) Fixed in 4.11.0, 3.4.7
- Fix · GHSA-6mq3-xmgp-pjm5 github.com/zitadel/zitadel (Go) Fixed in 4.11.0 Advisory →
- Fix · GHSA-6mq3-xmgp-pjm5 github.com/zitadel/zitadel (Go) Fixed in 3.4.7 Advisory →
- Fix · GHSA-6mq3-xmgp-pjm5 github.com/zitadel/zitadel (Go) Fixed in 1.80.0-v2.20.0.20260216092519-feab8e1fa371 Advisory →
Timeline
- 2026-10-02 Threatist record created from CVE-2026-27840
- 2026-10-03 Alias added: GHSA-6mq3-xmgp-pjm5
References
Advisory 2
More Zitadel vulnerabilities
- TI-2024-26607 ZITADEL Vulnerable to Session Information Leakage CVSS 3.1MEDIUM 6.5
- TI-2025-41253 ZITADEL Vulnerable to Unauthenticated Full-Read SSRF via V2 Login CVSS 3.1CRITICAL 9.3
- TI-2025-39554 Zitadel Bypass Second Authentication Factor CVSS 4.0HIGH 8.7
- TI-2024-33224 Zitadel User Registration Bypass Vulnerability CVSS 3.1HIGH 7.5
- TI-2024-31388 Service Users Deactivation not Working in Zitadel CVSS 3.1HIGH 8.1
- TI-2026-23310 ZITADEL: Bypassing Zitadel Login Behavior and Security Policy in Login V2 CVSS 3.1HIGH 8.2
Sources
- CVE-2026-27840 · CVE Program
- CVE-2026-27840 · NVD
- FIRST EPSS
- GHSA-6mq3-xmgp-pjm5 · GitHub Advisory Database · CC BY 4.0
This product uses the NVD API but is not endorsed or certified by the NVD. Sources and licences