Skip to main content

Twenty CRM CVE-2026-85055

| EUVDEUVD-2026-84513 HIGH
Information Exposure (CWE-200)
2026-09-22 GitHub_M
7.1
CVSS 4.0 · Vendor: GitHub_M
View

Attack ChainAIDerived

Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain

  1. Access
    Authenticate as low-privileged member or API key
  2. Delivery
    Craft GraphQL/REST filter referencing denied field
  3. Exploit
    Observe totalCount/row-presence oracle
  4. Execution
    Iterate guesses to binary-search values
  5. Impact
    Reconstruct 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.

This Week Schedule remediation this week. Why: HIGH severity (CVSS 7.0-8.9).
Patch available 0.4% exploitation probability (EPSS)

Get an e-mail when this CVE is exploited, patched or re-scored. Free account.

Alert me

AnalysisAIv1 – 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

twenty < 2.22.0

Affected Packages

euvd twenty fix: 2.22.0

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

Vendor (GitHub_M) PRIMARY 7.1 HIGH
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
vuln.today AI 6.5 MEDIUM

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.

3.1 AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:N/A:N
4.0 AV:N/AC:L/AT:N/PR:L/UI:N/VC:H/VI:N/VA:N/SC:N/SI:N/SA:N

Primary rating from Vendor (GitHub_M).

CVSS VectorVendor: GitHub_M

Attack Vector
Network
Attack Complexity
Low
Attack Requirements
None
Privileges Required
Low
User Interaction
None
Vulnerable system: Confidentiality
High
Vulnerable system: Integrity
None
Vulnerable system: Availability
None
Subsequent system: Confidentiality
None
Subsequent system: Integrity
None
Subsequent system: Availability
None

Lifecycle Timeline

2
Patch available
Sep 22, 2026 - 17:17 EUVD
CVE Published
Sep 22, 2026 - 15:20 cve.org
HIGH 7.1

DescriptionCVE.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

Why It Matters

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.

Business Impact: Medium
Compensating Controls

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

EPSS Score
0.4%
Top 63% exploitable
Prevalence
Low
open-source self-hosted CRM, popular on GitHub but modest production footprint
Data Quality
5 sources
Confidence: Medium

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.

SignalValue
Severity HIGH
CISA KEV No
Public POC No
EPSS 0.4%
Patch available Yes
Active threat No
Deciding rule
HIGH severity (CVSS 7.0-8.9)
What every action level means
Emergency Immediate action required. Criteria: CRITICAL + in CISA KEV (actively exploited) without patch, OR CRITICAL + EPSS > 30% without patch, OR CRITICAL + active threat signals without patch.
Act Now Prioritize within 24-48h. Criteria: in KEV with patch available, OR CRITICAL + public POC, OR HIGH + EPSS > 10%, OR CRITICAL + active threat, OR any CRITICAL severity.
This Week Schedule remediation this week. Criteria: HIGH severity (CVSS 7.0-8.9). Patch within normal change window.
This Month Plan within 30 days. Criteria: MEDIUM severity (CVSS 4.0-6.9), lower exploitation probability. Include in regular patch cycle.
Monitor Track and reassess. Criteria: LOW severity (CVSS 0.1-3.9), minimal exploitation risk. No immediate action needed.

SSVC AssessmentENISA

SSVC Decision
Scheduled
Exploitation
None
System Exposure· derived
Open
Automatable
No
Human Impact
Medium
Technical Impact
Partial

Priority Score

36
Low Medium High Critical
KEV: 0
EPSS: 0
CVSS: +36
PoC: 0
Weaponized: 0
Threat intel: 0
Gov advisory: 0

Attack Technique

Information disclosure occurs when an application unintentionally exposes sensitive data that aids attackers in reconnaissance or directly compromises security.

More in Twenty

View all
CVE-2026-26720 CRITICAL POC
9.8 Mar 02

Twenty CRM v1.15.0 has a code injection vulnerability enabling remote attackers to execute arbitrary code through the CR

CVE-2024-28434 HIGH POC
7.6 Mar 25

The CRM platform Twenty is vulnerable to stored cross site scripting via file upload in version 0.3.0. Rated high severi

CVE-2026-46624 CRITICAL
9.9 May 26

Remote code execution in Twenty CRM versions 1.7.7 through 1.16.7 allows authenticated users to execute arbitrary OS com

CVE-2026-105763 CRITICAL
9.6 Oct 05

Plaintext IMAP, SMTP, and CalDAV passwords belonging to other workspace members are disclosed to any authenticated low-p

CVE-2024-28435 MEDIUM POC
5.4 Mar 25

The CRM platform Twenty version 0.3.0 is vulnerable to SSRF via file upload. Rated medium severity (CVSS 5.4), this vuln

CVE-2026-73069 CRITICAL
9.1 Aug 11

SQL injection in Twenty, an open-source CRM platform, lets a workspace administrator holding the DATA_MODEL permission i

CVE-2026-44729 HIGH
8.7 May 26

Stored cross-site scripting in Twenty CRM versions 1.18.0 and earlier allows authenticated users to upload HTML/JavaScri

CVE-2026-33975 HIGH
8.3 May 05

Server-side request forgery (SSRF) in Twenty CRM allows authenticated users to bypass IP filtering protections and acces

CVE-2026-55583 HIGH
7.6 Jun 24

Cross-workspace data disclosure in Twenty CRM before 2.9.0 lets any authenticated user holding the AI settings flag (a w

CVE-2026-92771 HIGH
7.1 Sep 16

Twenty CRM before 2.35.0 fails to enforce field- and row-level permission checks inside the groupBy-with-records GraphQL

CVE-2026-35451 MEDIUM
5.7 Apr 21

Stored cross-site scripting in Twenty CRM versions prior to 1.20.6 allows authenticated attackers to inject malicious Ja

CVE-2026-82274 MEDIUM
5.3 Aug 28

OAuth authorization code forwarding to attacker-controlled hosts is enabled by an open redirect flaw in Twenty CRM throu

This site uses cookies essential for authentication and security. No tracking or analytics cookies are used. Privacy Policy