/

CVE-2026-97377

Severity:

HIGH RISK

(8.8)

SQL Injection (CWE-89) in SuiteCRM Legacy SOAP Portal

CVE-2026-97377

Undergoing Analysis

Vulnerability type

Category:

SQL Injection

CWE:

CWE-89

Impact:

Unauthorized data disclosure, query manipulation, and resource consumption

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 legacy SOAP portal method portal_get_entry_list uses caller-controlled where and order_by values when constructing SQL queries without sufficient neutralization. A low-privileged portal API user may exploit this to infer database contents through blind SQL injection, alter query behavior, or consume resources.

SuiteCRM's legacy SOAP portal method portal_get_entry_list uses caller-controlled where and order_by values when constructing SQL queries without sufficient neutralization. A low-privileged portal API user may exploit this to infer database contents through blind SQL injection, alter query behavior, or consume resources.

Affected context

The issue occurs in SuiteCRM's legacy SOAP portal API, specifically the portal_get_entry_list method. It affects releases before the corresponding fixes in 7.15.2 and 8.10.2 when caller-controlled where or order_by values reach SQL query construction without adequate neutralization.

The issue occurs in SuiteCRM's legacy SOAP portal API, specifically the portal_get_entry_list method. It affects releases before the corresponding fixes in 7.15.2 and 8.10.2 when caller-controlled where or order_by values reach SQL query construction without adequate neutralization.

Exploit preconditions

  • Attack surface: The legacy SOAP portal API and its portal_get_entry_list method
  • Required access: A low-privileged portal API account
  • Trigger point: Processing caller-supplied where or order_by values
  • Why exploitation is possible: These values are incorporated into SQL construction without sufficient neutralization, allowing blind SQL injection
  • Attack surface: The legacy SOAP portal API and its portal_get_entry_list method
  • Required access: A low-privileged portal API account
  • Trigger point: Processing caller-supplied where or order_by values
  • Why exploitation is possible: These values are incorporated into SQL construction without sufficient neutralization, allowing blind SQL injection

Why this happens

The method incorporates caller-controlled values into SQL query construction without reliably separating data from SQL syntax. This is an injection flaw mapped to CWE-89: Improper Neutralization of Special Elements used in an SQL Command. When input is treated as part of a query rather than as data, crafted values may influence the query's behavior.

The method incorporates caller-controlled values into SQL query construction without reliably separating data from SQL syntax. This is an injection flaw mapped to CWE-89: Improper Neutralization of Special Elements used in an SQL Command. When input is treated as part of a query rather than as data, crafted values may influence the query's behavior.

Potential impact

  • An attacker may infer database metadata and sensitive records through blind SQL injection.
  • Query behavior could be altered, potentially affecting the results or scope of database operations.
  • Crafted requests may consume database or application resources.
  • An attacker may infer database metadata and sensitive records through blind SQL injection.
  • Query behavior could be altered, potentially affecting the results or scope of database operations.
  • Crafted requests may consume database or application resources.

General mitigation guidance

Defensive patterns focus on ensuring caller input cannot alter SQL structure:

  • Use parameterized queries for data values and avoid building SQL from raw caller-controlled strings.
  • Where dynamic filtering or ordering is required, map inputs to strict allowlists of supported fields and operators.
  • Validate inputs against expected types and schemas, while treating validation as a complement to parameterization rather than a substitute.
  • Apply least-privilege database permissions and limit the data accessible to portal accounts.
  • Restrict portal API exposure and monitor access to legacy endpoints.

Defensive patterns focus on ensuring caller input cannot alter SQL structure:

  • Use parameterized queries for data values and avoid building SQL from raw caller-controlled strings.
  • Where dynamic filtering or ordering is required, map inputs to strict allowlists of supported fields and operators.
  • Validate inputs against expected types and schemas, while treating validation as a complement to parameterization rather than a substitute.
  • Apply least-privilege database permissions and limit the data accessible to portal accounts.
  • Restrict portal API exposure and monitor access to legacy endpoints.

How teams detect issues like this

  • Use static analysis to identify SQL construction that concatenates or interpolates request-controlled values.
  • Review query-building code paths for handling of where and order_by, including indirect helpers and legacy SOAP methods.
  • Apply code review checks and policies requiring parameterized queries and allowlisted dynamic identifiers.
  • Monitor database and application logs for unusual portal query patterns, errors, or resource usage.
  • Use static analysis to identify SQL construction that concatenates or interpolates request-controlled values.
  • Review query-building code paths for handling of where and order_by, including indirect helpers and legacy SOAP methods.
  • Apply code review checks and policies requiring parameterized queries and allowlisted dynamic identifiers.
  • Monitor database and application logs for unusual portal query patterns, errors, or resource usage.

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-2hv5-wj8h-mv8m

Frequently asked

questions

The described attack requires a low-privileged portal API account and access to the legacy SOAP method.

Yes. Blind SQL injection can allow an attacker to infer database metadata or sensitive records through observable query behavior.

Use parameterized queries for values and strict allowlists for any dynamic fields or ordering choices.

Keep caller input separate from SQL syntax, review all query-building paths, enforce least privilege, and use automated checks for unsafe SQL construction.

The described attack requires a low-privileged portal API account and access to the legacy SOAP method.

Yes. Blind SQL injection can allow an attacker to infer database metadata or sensitive records through observable query behavior.

Use parameterized queries for values and strict allowlists for any dynamic fields or ordering choices.

Keep caller input separate from SQL syntax, review all query-building paths, enforce least privilege, and use automated checks for unsafe SQL construction.

Find out what's already
exploitable in your codebase.