/

CVE-2026-71548

Severity:

HIGH RISK

(8.8)

SQL Injection (CWE-89) in SuiteCRM Report Query Builder

CVE-2026-71548

Undergoing Analysis

Vulnerability type

Category:

SQL Injection

CWE:

CWE-20, CWE-89

Impact:

Unauthorized database disclosure

Severity:

HIGH RISK

(8.8)

CVSS version:

3.1

Catch this CVE while code is being written

Detect vulnerable code directly in pull requests, so CVEs are fixed before merge.

Summary

SuiteCRM's report query builder can incorporate a report parameter value without sufficient validation when its value type is set to "Field." An authenticated user who can save a report may exploit this behavior to read database contents, including sensitive account, token, CRM, and configuration data.

SuiteCRM's report query builder can incorporate a report parameter value without sufficient validation when its value type is set to "Field." An authenticated user who can save a report may exploit this behavior to read database contents, including sensitive account, token, CRM, and configuration data.

Affected context

The issue occurs in AOR_Report::build_report_query_where when SuiteCRM builds a report query using a report editor's parameter_value with value_type=Field. It is relevant where an authenticated user is permitted to save reports and the application processes such a report. The database connector does not permit stacked queries, so direct write-through-injection is not supported by the described issue.

The issue occurs in AOR_Report::build_report_query_where when SuiteCRM builds a report query using a report editor's parameter_value with value_type=Field. It is relevant where an authenticated user is permitted to save reports and the application processes such a report. The database connector does not permit stacked queries, so direct write-through-injection is not supported by the described issue.

Exploit preconditions

  • Attack surface: SuiteCRM report query generation
  • Required access: An authenticated account with permission to save a report
  • Trigger point: The application builds a report query containing a field-type parameter value
  • Why exploitation is possible: The parameter value is incorporated into SQL without sufficient validation, allowing SQL syntax to alter the query's intended meaning
  • Attack surface: SuiteCRM report query generation
  • Required access: An authenticated account with permission to save a report
  • Trigger point: The application builds a report query containing a field-type parameter value
  • Why exploitation is possible: The parameter value is incorporated into SQL without sufficient validation, allowing SQL syntax to alter the query's intended meaning

Why this happens

The report query builder does not adequately validate or safely bind a parameter value before incorporating it into SQL. This is a SQL injection flaw (CWE-89): data supplied through a report definition is treated as part of a query rather than being kept separate from query syntax. The insufficient validation also relates to CWE-20, Improper Input Validation.

The report query builder does not adequately validate or safely bind a parameter value before incorporating it into SQL. This is a SQL injection flaw (CWE-89): data supplied through a report definition is treated as part of a query rather than being kept separate from query syntax. The insufficient validation also relates to CWE-20, Improper Input Validation.

Potential impact

  • An attacker may read sensitive data across the SuiteCRM database.
  • Disclosed data could include user password hashes, OAuth2 tokens, CRM records, report definitions, and configuration data.
  • Exposure of credentials or tokens could enable further unauthorized access.
  • Direct database modification through stacked queries is not supported by the described connector behavior.
  • An attacker may read sensitive data across the SuiteCRM database.
  • Disclosed data could include user password hashes, OAuth2 tokens, CRM records, report definitions, and configuration data.
  • Exposure of credentials or tokens could enable further unauthorized access.
  • Direct database modification through stacked queries is not supported by the described connector behavior.

General mitigation guidance

Defensive patterns focus on keeping report values separate from SQL structure and limiting the data available to report queries:

  • Use parameterized queries or prepared statements for values.
  • Allowlist permitted field names and validate them against the expected schema; do not rely on escaping alone.
  • Apply strict, context-aware validation to report definitions before query construction.
  • Restrict report creation and editing to users who need those capabilities.
  • Use least-privilege database accounts and limit access to sensitive tables and columns.
  • Review and minimize the sensitive data exposed through reporting features.

Defensive patterns focus on keeping report values separate from SQL structure and limiting the data available to report queries:

  • Use parameterized queries or prepared statements for values.
  • Allowlist permitted field names and validate them against the expected schema; do not rely on escaping alone.
  • Apply strict, context-aware validation to report definitions before query construction.
  • Restrict report creation and editing to users who need those capabilities.
  • Use least-privilege database accounts and limit access to sensitive tables and columns.
  • Review and minimize the sensitive data exposed through reporting features.

How teams detect issues like this

  • Use static analysis to identify query construction that concatenates or interpolates report-controlled values into SQL.
  • Review report query paths for missing parameter binding and for field names or values accepted without schema-based allowlisting.
  • Monitor database and application logs for unusual report-generated queries or unexpected access to sensitive tables.
  • Enforce code review and CI policies requiring parameterized queries for database access; automated review tools can help flag risky patterns.
  • Use static analysis to identify query construction that concatenates or interpolates report-controlled values into SQL.
  • Review report query paths for missing parameter binding and for field names or values accepted without schema-based allowlisting.
  • Monitor database and application logs for unusual report-generated queries or unexpected access to sensitive tables.
  • Enforce code review and CI policies requiring parameterized queries for database access; automated review tools can help flag risky patterns.

Sources

SourceLink
github.comgithub.com/SuiteCRM/SuiteCRM-Core/commit/a11f50180d939f639cc468b5d536e8ad714dfb68
github.comgithub.com/SuiteCRM/SuiteCRM-Core/releases/tag/v8.10.2
github.comgithub.com/SuiteCRM/SuiteCRM/commit/d6bca97a0159ec019a969b86eca32affab3beb7c
github.comgithub.com/SuiteCRM/SuiteCRM/releases/tag/v7.15.2
github.comgithub.com/SuiteCRM/SuiteCRM/security/advisories/GHSA-239h-ffjr-v957

Frequently asked

questions

The described impact is unauthorized reading of SuiteCRM database contents. Stacked queries are not permitted by the connector, so direct write-through-injection is not supported.

The attacker needs an authenticated account with permission to save a report, and the application must process a report containing the affected field-type parameter.

Keep values out of SQL syntax by using parameterized queries. Validate field identifiers against an explicit allowlist because identifiers generally cannot be handled as ordinary bound values.

Use safe query APIs consistently, validate report inputs against the schema, limit reporting permissions, and review generated-query paths with static analysis and code review.

The described impact is unauthorized reading of SuiteCRM database contents. Stacked queries are not permitted by the connector, so direct write-through-injection is not supported.

The attacker needs an authenticated account with permission to save a report, and the application must process a report containing the affected field-type parameter.

Keep values out of SQL syntax by using parameterized queries. Validate field identifiers against an explicit allowlist because identifiers generally cannot be handled as ordinary bound values.

Use safe query APIs consistently, validate report inputs against the schema, limit reporting permissions, and review generated-query paths with static analysis and code review.

Find out what's already
exploitable in your codebase.