ZeroHour

CVE-2026-92771

moderate

Field-Level Permission Bypass in Twenty CRM groupBy GraphQL Resolver

CVSS 4.0
7.1 high
EPSS
Published
()
Modified
AI analysis

Twenty, an open-source CRM, prior to version 2.35.0 fails to enforce field- and row-level permissions in the groupBy-with-records GraphQL resolver (CWE-863, incorrect authorization). An authenticated user who holds object-level read permission (canReadObjectRecords) but has field-level read denied (canReadFieldValue false) can call the groupBy resolver and retrieve restricted field values that the permission system would normally hide. Exploitation requires only a valid low-privilege account and no user interaction, resulting in high confidentiality impact (CVSS 4.0: 7.1 High). Any deployment running an affected version is exposed, since the flaw is reachable through the standard GraphQL API. No public proof-of-concept or in-the-wild exploitation is currently known.

What to do: Upgrade Twenty to version 2.35.0 or later, which fixes the groupBy resolver permission enforcement. Until patched, review user roles for accounts holding canReadObjectRecords and restrict GraphQL API access (e.g., via reverse-proxy rules or allowlists) for untrusted users, and inspect access logs for groupBy queries against objects with restricted fields. Note that any authenticated user account, including low-privilege ones, could have been used to read hidden field values, so consider auditing sensitive fields for unauthorized reads.

Affected
Twenty (open-source CRM)All versions before 2.35.0
Estimated exposure
moderate≈10,000–100,000 users across thousands of self-hosted instances — Twenty is a heavily used open-source CRM with tens of thousands of GitHub stars and widespread Docker-based self-hosting, suggesting thousands of deployed instances whose aggregated users fall in the tens of thousands; exact install counts…

Order-of-magnitude estimate by the model from install counts, market share and public scan data it knows; verify before quoting.

Description

Twenty before 2.35.0 fails to validate field and row permissions in the groupBy-with-records GraphQL resolver, allowing authenticated users to bypass permission checks. Attackers with canReadObjectRecords permission but canReadFieldValue false can retrieve restricted field values through the groupBy resolver that would normally be denied.

Weakness
CWE-863
Vector
CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:N/VC:H/VI:N/VA:N/SC:N/SI:N/SA:N/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X

In the news

No ingested article mentions this CVE yet.