Executive brief
Twenty is an open-source customer relationship management (CRM) platform used by organizations to manage sales pipelines and customer data. Workspace administrators with data modeling permissions can inject arbitrary PostgreSQL commands through improperly validated field settings, allowing them to execute database queries with application-level privileges and potentially access, modify, or delete customer records and business data.
Technical details
This is a SQL injection vulnerability in the search vector field configuration mechanism. The vulnerable code path exists in buildSqlColumnDefinition within the workspace schema manager, where user-supplied settings.asExpression values for the TS_VECTOR searchVector field are concatenated directly into SQL GENERATED ALWAYS AS clauses without proper escaping or validation. An authenticated workspace administrator with the DATA_MODEL permission can exploit this by sending a PATCH request to /rest/metadata/fields/:id or using the updateOneField GraphQL mutation to supply malicious PostgreSQL expressions. The application executes these unescaped inputs as the database user, allowing arbitrary SQL statement execution. The vulnerability was patched in version 2.15.0 by implementing proper input validation for search vector field expressions.
Affected products
- Twenty Twenty prior to 2.15.0
Timeline
- 2026-08-11: disclosed
- 2026-06-22: patched: Fix released in version 2.15.0