Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessAuthenticate as low-privileged member or API key
-
DeliveryCraft GraphQL/REST filter referencing denied field
-
ExploitObserve totalCount/row-presence oracle
-
ExecutionIterate guesses to binary-search values
-
ImpactReconstruct restricted field data
Vulnerability Assessment
| Weakness |
CWE
OWASP Top 10:2025
A01:2025 - Broken Access Control
ASVS 5.0
V14 - Data Protection Data exposure prevention
MITRE ATT&CK
2 techniques across 2 tactics: Collection, Discovery The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up. |
| Exploitation Conditions | Requires an authenticated principal - a workspace member account or a valid API key - that holds object-level read on the target object but has field-level read explicitly DENIED on at least one field (i.e., the deployment must actually use Twenty's field-level read permissions/restricted fields). The attacker abuses GraphQL or REST filter predicates (direct filters, relation filters, or persisted view filters) plus the returned totalCount/row-presence to build the oracle. Exploitation is LIMITED to values of records already exposed by the principal's row-level policy, so it cannot reveal fields on rows the principal cannot see at all, and reconstruction is iterative (many queries) rather than a single-shot read. Instances that do not configure field-level restrictions are not meaningfully affected. |
| Impact | This is a genuine but bounded confidentiality risk, not an inflated high-CVSS finding. The vendor CVSS 4.0 vector (7.1, AV:N/AC:L/AT:N/PR:L/UI:N/VC:H/VI:N/VA:N) is internally consistent with the description: network-reachable via the GraphQL/REST API, low attacker complexity, requiring an authenticated low-privileged principal (PR:L - a workspace member or API key), no user interaction, and a high confidentiality-only impact (VC:H, with integrity and availability untouched). The VC:H rating is defensible because the count/boolean oracle can fully reconstruct denied field values, but it overstates immediacy: reconstruction is an iterative guess-and-check side channel scoped to records already exposed by the principal's row-level policy, so it is slow rather than a bulk dump. No EPSS score, no CISA KEV listing, and no public exploit code are present in the supplied intelligence, so there is no public exploit identified at time of analysis and no evidence of active exploitation. SSVC-style read: exploitation=none observed, technical impact=partial (confidentiality of specific restricted fields), automatable=yes in principle (the oracle can be scripted). Net: patch-worthy for deployments that actually rely on field-level read restrictions, but not an emergency for instances that do not use field-level permissions. |
| Exploit ScenarioDerived | An authenticated workspace member (or an API key) that can read Person records but is denied read on a sensitive field such as salary or a private note references that field inside a GraphQL filter like { jobTitle: { like: 'Par%' } } (or a relation/persisted-view filter). By observing how totalCount and row presence change across successive guesses, the attacker performs a binary/prefix search to reconstruct the hidden field's value for records they can already see. No public exploit code is identified, but the fixed integration test in PR #22873 demonstrates the exact filter-based trigger. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Sep 22, 2026
Field-level read permission bypass in Twenty CRM before 2.22.0 lets an authenticated workspace member or API key that is allowed to read an object but explicitly denied read on a specific field still reference that denied field inside GraphQL or REST filter predicates, turning the returned totalCount and row presence into a boolean/count oracle that can reconstruct the hidden values. The vulnerability is a bounded confidentiality issue: exploitation requires a principal whose role actually configures field-level read restrictions, and reconstruction only works against records already visible under that principal's row-level policy, and it is iterative across many queries rather than a single-shot dump. There is no evidence of active exploitation (not listed in CISA KEV) and no public exploit code identified at time of analysis; the vendor has released a patch in Twenty 2.22.0.
RemediationAI
Vendor-released patch: Twenty 2.22.0 - upgrade the Twenty server to 2.22.0 (release tag twenty/v2.22.0) as the primary fix, which adds permission checks to the GraphQL filter-field parser and the group-by query runner so filters on denied fields raise a PERMISSION_DENIED error; verify the deployment by confirming the fix commit (a5108d512f754a937860bda5e0c2c40c7266e19e) or the equivalent code is present, and retest a filter on a restricted field such as jobTitle expecting a permission-denied response. If upgrading cannot be done immediately, compensating controls are limited and each has trade-offs: review and tighten row-level policy so that principals with field-level denials see the smallest possible set of rows (reduces the oracle's reachable data but does not eliminate the leak on those rows), remove or rotate API keys and workspace-member roles that combine broad object read with field-level restrictions where that combination is not operationally required (may break integrations that depend on those roles), and monitor or rate-limit high-volume filtered GraphQL/REST queries, especially repeated totalCount queries with first: 0, since exploitation requires many iterative queries (detection is heuristic and adds latency, and does not block a patient attacker). Note that simply disabling field-level restrictions is not a safe workaround because it exposes the fields outright rather than protecting them. Full guidance is in the GitHub advisory GHSA-v93q-4jcx-7p9m.
Affected VersionsENISA
Affected Packages
Source: OSV (Open Source Vulnerabilities)
Affects your stack
Affects 1 package in euvd
Checking this CVE against your own stacks and servers is part of the Basic plan and up.
Technical ContextAI · show details
Twenty is an open-source CRM whose server exposes records through both a GraphQL API and a REST layer, with authorization resolved through object-level record permissions and per-field "restrictedFields" permissions attached to workspace roles. The root cause is CWE-200 (Exposure of Sensitive Information): read-permission enforcement was applied when shaping selected output fields but not when parsing filter predicates, so permission checks were missing on the query-planning path. The upstream fix (PR #22873, commit a5108d512f754a937860bda5e0c2c40c7266e19e) threads a RestrictedFieldsPermissions structure into the group-by query runner, filters restricted fields out of field metadata lists, and makes the GraphQL filter-field parser throw a PermissionsException (PERMISSION_DENIED) when the target object denies canReadObjectRecords or when restrictedFields[fieldMetadataId].canRead is false. An integration test was added that asserts a filter such as { jobTitle: { like: 'Par%' } } with first: 0 must return a permission-denied error. Because the leak was in the predicate layer rather than the projection layer, an attacker could compare totalCount across crafted guesses against direct filters, relation filters, or persisted view filters to infer hidden field values for rows the principal could already see.
Know when Twenty gets its next vulnerability
- Watch products and get an email when something new is published
- Check this CVE against your own stack and servers
- Exploit and PoC references, threat intelligence from 22 sources
No credit card · 7-day full trial
Severity by source
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
Network API access with low-privileged auth (PR:L) and no user interaction; oracle reconstructs restricted field values (C:H) with no integrity or availability impact and no scope change.
Primary rating from Vendor (GitHub_M).
CVSS VectorVendor: GitHub_M
Lifecycle Timeline
2DescriptionCVE.org
Twenty is an open-source CRM (customer relationship management) platform. Prior to 2.22.0, field-level read permission is enforced on selected output fields but not on GraphQL or REST filter predicates. A workspace member or API key with permission to read an object but not a particular field can reference that denied field in direct filters, relation filters, or persisted view filters. The resulting totalCount and row presence reveal whether guesses match the real column, forming a boolean/count oracle that can reconstruct denied field values for records exposed by the principal's row-level policy. This issue is fixed in version 2.22.0.
Technical POC Analysis
Evidence base: GitHub Security Advisory GHSA-v93q-4jcx-7p9m (twentyhq/twenty).
Full technical POC analysis - root cause, step-by-step exploitation and patch breakdown - is part of the Pro and Business plans.
Executive ViewAI
Twenty CRM deployments running versions before 2.22.0 contain a field-level read permission bypass that lets a workspace member or API key retrieve the very field values their role explicitly denies. The exposure is bounded - it only affects records the principal can already see, it requires a role that actually configures field-level restrictions, and reconstruction is iterative rather than a single bulk extraction - but any organization relying on field-level controls to shield sensitive attributes (compensation, contract terms, customer PII) should treat those controls as unreliable until upgraded. No public exploit code has been identified and there is no evidence of active exploitation, so this is a remediation-planning issue rather than an active-incident response.
Apply vendor patch (Twenty CRM 2.22.0 or later; the advisory context identifies 2.22.0 as the fix, though the patch-status feed reports no patch - verify directly with the vendor before relying on this). Until the upgrade is confirmed, restrict or temporarily disable API keys assigned to principals with field-level read restrictions, reduce field-restricted roles to read-only on objects with no sensitive field configuration, and monitor API logs for iterative count/filter query patterns consistent with oracle-based reconstruction.
Threat Intelligence Overview
How this decision was reached
The engine reads each signal below and applies a fixed list of rules from top to bottom. The first rule that matches sets the recommended action – like a statement, every line is shown.
What every action level means
SSVC AssessmentENISA
Priority Score
Attack Technique
Information disclosure occurs when an application unintentionally exposes sensitive data that aids attackers in reconnaissance or directly compromises security.
Twenty CRM v1.15.0 has a code injection vulnerability enabling remote attackers to execute arbitrary code through the CR
The CRM platform Twenty is vulnerable to stored cross site scripting via file upload in version 0.3.0. Rated high severi
Remote code execution in Twenty CRM versions 1.7.7 through 1.16.7 allows authenticated users to execute arbitrary OS com
Plaintext IMAP, SMTP, and CalDAV passwords belonging to other workspace members are disclosed to any authenticated low-p
The CRM platform Twenty version 0.3.0 is vulnerable to SSRF via file upload. Rated medium severity (CVSS 5.4), this vuln
SQL injection in Twenty, an open-source CRM platform, lets a workspace administrator holding the DATA_MODEL permission i
Stored cross-site scripting in Twenty CRM versions 1.18.0 and earlier allows authenticated users to upload HTML/JavaScri
Server-side request forgery (SSRF) in Twenty CRM allows authenticated users to bypass IP filtering protections and acces
Cross-workspace data disclosure in Twenty CRM before 2.9.0 lets any authenticated user holding the AI settings flag (a w
Twenty CRM before 2.35.0 fails to enforce field- and row-level permission checks inside the groupBy-with-records GraphQL
Stored cross-site scripting in Twenty CRM versions prior to 1.20.6 allows authenticated attackers to inject malicious Ja
OAuth authorization code forwarding to attacker-controlled hosts is enabled by an open redirect flaw in Twenty CRM throu
EUVD-2026-84513
NVD
CVE.org
EPSS
Vulnrichment
GitHub
Exploit-DB