/

CVE-2026-115191

Severity:

HIGH RISK

(7.1)

SQL Injection (CWE-89) in Mautic AJAX Contact Lookup

CVE-2026-115191

Deferred

Vulnerability type

Category:

SQL Injection

CWE:

CWE-89

Impact:

Unauthorized database access and sensitive data disclosure

Severity:

HIGH RISK

(7.1)

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

A SQL injection vulnerability in Mautic's authenticated contact lookup AJAX endpoint allows insufficiently validated field-selection input to influence a database query. Any authenticated Mautic user may be able to use blind boolean-based or time-based techniques to retrieve data accessible to the Mautic database account.

A SQL injection vulnerability in Mautic's authenticated contact lookup AJAX endpoint allows insufficiently validated field-selection input to influence a database query. Any authenticated Mautic user may be able to use blind boolean-based or time-based techniques to retrieve data accessible to the Mautic database account.

Affected context

The issue occurs in the Mautic administration interface at the contact lookup AJAX endpoint, where a request parameter identifying the contact field to search is incorporated into a database query. Deployments are at risk when this endpoint is reachable by authenticated users and the parameter is not constrained to an allowlisted set of valid fields before query construction.

The issue occurs in the Mautic administration interface at the contact lookup AJAX endpoint, where a request parameter identifying the contact field to search is incorporated into a database query. Deployments are at risk when this endpoint is reachable by authenticated users and the parameter is not constrained to an allowlisted set of valid fields before query construction.

Exploit preconditions

  • Attack surface: Mautic administration contact lookup AJAX endpoint (/s/ajax)
  • Required access: A valid authenticated Mautic account; elevated privileges may not be required
  • Trigger point: A contact lookup request containing a manipulated field-selection parameter
  • Why exploitation is possible: User-controlled query-related input is insufficiently validated before influencing database query behavior
  • Data boundary: The database user permissions determine which records and schemas may be exposed
  • Attack surface: Mautic administration contact lookup AJAX endpoint (/s/ajax)
  • Required access: A valid authenticated Mautic account; elevated privileges may not be required
  • Trigger point: A contact lookup request containing a manipulated field-selection parameter
  • Why exploitation is possible: User-controlled query-related input is insufficiently validated before influencing database query behavior
  • Data boundary: The database user permissions determine which records and schemas may be exposed

Why this happens

The vulnerability results from treating a request parameter that selects a database field as trusted query input. When structural query elements are assembled from user-controlled values without strict allowlisting and safe query construction, an attacker may alter query logic. This behavior maps to CWE-89, SQL Injection, because external input is interpreted as part of a database statement rather than being limited to an approved, non-executable value.

The vulnerability results from treating a request parameter that selects a database field as trusted query input. When structural query elements are assembled from user-controlled values without strict allowlisting and safe query construction, an attacker may alter query logic. This behavior maps to CWE-89, SQL Injection, because external input is interpreted as part of a database statement rather than being limited to an approved, non-executable value.

Potential impact

  • An attacker may read Mautic user accounts, email addresses, and password hashes.
  • Contact records and other sensitive customer data could be disclosed.
  • Campaign and email content may be exposed.
  • The attacker could retrieve other database information available to the Mautic database account.
  • Database performance or availability could be affected by resource-intensive queries.
  • An attacker may read Mautic user accounts, email addresses, and password hashes.
  • Contact records and other sensitive customer data could be disclosed.
  • Campaign and email content may be exposed.
  • The attacker could retrieve other database information available to the Mautic database account.
  • Database performance or availability could be affected by resource-intensive queries.

General mitigation guidance

Mitigation generally focuses on separating query structure from user-controlled

data and reducing the trust placed in request parameters.

Common defensive patterns include:

  • Mapping externally supplied field identifiers to a fixed server-side allowlist.
  • Using parameterized queries for values and trusted query-builder abstractions for query construction.
  • Rejecting unknown, ambiguous, or unexpected field-selection values before database access.
  • Applying least-privilege permissions to the Mautic database account and limiting access to only required schemas and operations.
  • Restricting access to administrative endpoints and reviewing whether all authenticated roles need contact lookup functionality.
  • Protecting sensitive stored credentials with appropriate hashing and limiting unnecessary database exposure.

Mitigation generally focuses on separating query structure from user-controlled

data and reducing the trust placed in request parameters.

Common defensive patterns include:

  • Mapping externally supplied field identifiers to a fixed server-side allowlist.
  • Using parameterized queries for values and trusted query-builder abstractions for query construction.
  • Rejecting unknown, ambiguous, or unexpected field-selection values before database access.
  • Applying least-privilege permissions to the Mautic database account and limiting access to only required schemas and operations.
  • Restricting access to administrative endpoints and reviewing whether all authenticated roles need contact lookup functionality.
  • Protecting sensitive stored credentials with appropriate hashing and limiting unnecessary database exposure.

How teams detect issues like this

Organizations can look for this weakness through:

  • Static analysis rules identifying string concatenation or interpolation of request parameters in SQL or query-builder expressions.
  • Code review checks for dynamic column, table, sort, or filter identifiers that are not resolved through server-side allowlists.
  • Tests that submit unexpected field identifiers and verify rejection without database query execution.
  • Web application monitoring for unusual requests to /s/ajax, repeated lookup failures, boolean-pattern responses, or abnormal response timing.
  • Database audit logs showing unexpected query shapes, broad metadata access, or repeated time-based behavior.
  • Automated security review tools and policy checks that flag unsafely constructed database queries.

Organizations can look for this weakness through:

  • Static analysis rules identifying string concatenation or interpolation of request parameters in SQL or query-builder expressions.
  • Code review checks for dynamic column, table, sort, or filter identifiers that are not resolved through server-side allowlists.
  • Tests that submit unexpected field identifiers and verify rejection without database query execution.
  • Web application monitoring for unusual requests to /s/ajax, repeated lookup failures, boolean-pattern responses, or abnormal response timing.
  • Database audit logs showing unexpected query shapes, broad metadata access, or repeated time-based behavior.
  • Automated security review tools and policy checks that flag unsafely constructed database queries.

Sources

SourceLink
github.comgithub.com/mautic/mautic/security/advisories/GHSA-fj8v-c9c3-7q26

Frequently asked

questions

Any authenticated Mautic user may be able to reach the vulnerable endpoint, and

exploitation does not inherently depend on administrative privileges. Actual

exposure depends on endpoint accessibility, deployment configuration, and the

database account's permissions.

No. The vulnerable functionality is exposed through the authenticated Mautic

AJAX interface. Blind query behavior can potentially reveal database content

through response differences or timing.

Treat field-selection parameters as identifiers rather than arbitrary query

text. Resolve them through a strict server-side allowlist, use parameterized

queries for data values, and reject invalid input before database access.

Combine secure query-construction patterns with least-privilege database

accounts, role-aware endpoint access, negative testing of dynamic query

parameters, code review, and monitoring for anomalous database activity.

Any authenticated Mautic user may be able to reach the vulnerable endpoint, and

exploitation does not inherently depend on administrative privileges. Actual

exposure depends on endpoint accessibility, deployment configuration, and the

database account's permissions.

No. The vulnerable functionality is exposed through the authenticated Mautic

AJAX interface. Blind query behavior can potentially reveal database content

through response differences or timing.

Treat field-selection parameters as identifiers rather than arbitrary query

text. Resolve them through a strict server-side allowlist, use parameterized

queries for data values, and reject invalid input before database access.

Combine secure query-construction patterns with least-privilege database

accounts, role-aware endpoint access, negative testing of dynamic query

parameters, code review, and monitoring for anomalous database activity.

Find out what's already
exploitable in your codebase.