CVEReports
CVEReports

Automated vulnerability intelligence platform. Comprehensive reports for high-severity CVEs generated by AI.

Product

  • Home
  • Sitemap
  • RSS Feed

Company

  • About
  • Contact
  • Privacy Policy
  • Terms of Service

© 2026 CVEReports. All rights reserved.

Made with love by Amit Schendel & Alon Barad



CVE-2026-34973

CVE-2026-34973: LIKE Wildcard Injection in phpMyFAQ Search Component

Alon Barad
Alon Barad
Software Engineer

Apr 2, 2026·7 min read·52 visits

Executive Summary (TL;DR)

Unauthenticated attackers can exploit a LIKE wildcard injection (CWE-943) in phpMyFAQ < 4.1.1 by passing '%' or '_' characters to the search function, resulting in the disclosure of hidden or unintended database records.

phpMyFAQ versions prior to 4.1.1 contain a LIKE wildcard injection vulnerability in the searchCustomPages() method. The application fails to properly neutralize SQL LIKE metacharacters, allowing unauthenticated attackers to bypass intended search constraints and trigger unauthorized information disclosure.

Vulnerability Overview

The phpMyFAQ application exposes a custom search interface to allow users to query available frequently asked questions and associated page content. This functionality is implemented via the searchCustomPages() method located within the src/phpMyFAQ/Search.php component.

The search mechanism accepts user-supplied query strings and integrates them into backend database operations. The application attempts to secure this integration by utilizing an internal escape() method. This abstraction layer typically wraps standard PHP database driver escaping functions, such as mysqli_real_escape_string or equivalent PDO mechanisms.

The vulnerability, classified as CWE-943 (Improper Neutralization of Special Elements in Data Query Logic), arises because standard string escaping functions do not neutralize metacharacters specific to SQL LIKE clauses. The application assumes that neutralizing standard SQL injection vectors (such as single and double quotes) provides sufficient protection for all query contexts.

Because the sanitized input is subsequently embedded directly into a LIKE clause, an unauthenticated remote attacker can inject the % and _ wildcard characters. This injection alters the query logic at the database layer, broadening the search scope beyond the intended constraints and facilitating unauthorized information disclosure.

Root Cause Analysis

The root cause of CVE-2026-34973 is the application's reliance on a generic string escaping mechanism for data that is evaluated within a specific SQL pattern-matching context. In SQL, the LIKE operator utilizes specific metacharacters to perform pattern matching: % matches any sequence of zero or more characters, and _ matches any single character.

The application's escape() method correctly neutralizes characters that could break out of a string literal context, such as ', `

Root Cause Analysis

The root cause of CVE-2026-34973 is the application's reliance on a generic string escaping mechanism for data that is evaluated within a specific SQL pattern-matching context. In SQL, the LIKE operator utilizes specific metacharacters to perform pattern matching: % matches any sequence of zero or more characters, and _ matches any single character.

The application's escape() method correctly neutralizes characters that could break out of a string literal context, such as ', ", \, and NULL bytes. This successfully prevents traditional SQL injection attacks where an attacker attempts to append subqueries or manipulate the WHERE clause structure. However, it explicitly leaves the % and _ characters unaltered.

When the searchCustomPages() method constructs the final SQL string, it embeds the user input directly between two wildcard characters: LIKE '%$term%'. If the user supplies the string % as the search term, the resulting SQL logic evaluates to LIKE '%%%'. The database engine interprets this as a command to match every single record within the target table.

This behavior circumvents application-level constraints that rely on specific keyword matching to filter results. The core failure is architectural: the data flow does not differentiate between the semantic meaning of data within a string literal and the semantic meaning of data within a pattern-matching parameter.

Code Analysis and Data Flow

The implementation flaw is located in the src/phpMyFAQ/Search.php file. The vulnerable design pattern retrieves user input, applies the generic escape() method, and concatenates the result into a static SQL template.

The following conceptual snippet illustrates the vulnerable code path:

// Vulnerable Implementation
public function searchCustomPages($term) {
    // The escape() function neutralizes quotes but ignores % and _
    $term = $this->config->getDb()->escape($term);
    
    // The term is directly interpolated into a LIKE clause
    $sql = "SELECT id, title, content FROM faqdata WHERE content LIKE '%" . $term . "%'";
    
    return $this->executeSearch($sql);
}

The vendor addressed this flaw in version 4.1.1 by introducing a secondary neutralization step explicitly designed for LIKE clauses. The patched implementation utilizes PHP's str_replace() to insert backslashes before the % and _ characters, instructing the database driver to treat them as literal characters rather than pattern metacharacters.

// Patched Implementation
public function searchCustomPages($term) {
    $term = $this->config->getDb()->escape($term);
    
    // Explicitly escape LIKE metacharacters
    $term = str_replace(['%', '_'], ['\%', '\_'], $term);
    
    $sql = "SELECT id, title, content FROM faqdata WHERE content LIKE '%" . $term . "%'";
    
    return $this->executeSearch($sql);
}

While this explicit substitution successfully remediates the immediate vulnerability, the architectural reliance on string concatenation remains. The most robust defense against this class of vulnerability is the implementation of parameterized queries (prepared statements), which fundamentally separate SQL syntax from user-supplied data.

The following diagram illustrates the vulnerable data flow:

Exploitation Mechanics

Exploitation of CVE-2026-34973 requires no authentication and can be executed via standard HTTP requests over the network. The vulnerability possesses a low attack complexity, as it requires only a basic understanding of application endpoints and HTTP parameter submission.

An attacker initiates the exploit by targeting the specific URL endpoint mapped to the phpMyFAQ search functionality. The payload consists of standard URL-encoded HTTP GET or POST parameters containing the % or _ characters. For example, a search parameter submitted as ?q=%25 translates to the literal % character at the application layer.

Upon processing the request, the application backend constructs the broadened LIKE query and executes it against the database. Because the pattern %%% matches any string length, the query circumvents targeted search filtering. The database engine subsequently returns a comprehensive dataset to the application layer.

The application layer, assuming the returned records correspond to a legitimate broad search, formats the dataset and returns it to the attacker within the HTTP response body. This allows the attacker to systematically extract data that would otherwise require precise knowledge of application content or specific internal identifiers.

Impact Assessment

The primary impact of this vulnerability is unauthorized information disclosure. By exploiting the wildcard injection, an unauthenticated attacker can force the application to surface records that are stored in the backend database but are not intended for public visibility without specific prerequisite knowledge.

Depending on the specific configuration and usage of the phpMyFAQ instance, exposed data may include unlisted FAQ entries, draft pages, internal documentation, or customized content elements intended for restricted distribution. The confidentiality metric is classified as Low according to CVSS v4.0, reflecting the fact that the disclosed data is limited to the scope of the queried table.

A secondary consequence of this vulnerability is a potential localized performance degradation. A query executing a LIKE '%%%' pattern forces the backend database to perform a full table scan, evaluating every row against the wildcard pattern. While the availability impact is officially rated as None, concurrent and repeated execution of this exploit against a sufficiently large dataset consumes substantial CPU and memory resources on the database server.

This vulnerability does not permit the execution of arbitrary code, the modification of database records, or the exfiltration of system credentials. The integrity and availability metrics remain unaffected, isolating the attack surface strictly to the read-operations of the affected tables.

Remediation and Mitigation

The definitive remediation for CVE-2026-34973 is to upgrade the phpMyFAQ application to version 4.1.1 or later. The vendor has included specific sanitization logic within the Search.php component that neutralizes the % and _ metacharacters before they are passed to the database execution layer.

Organizations that are unable to immediately apply the software update must implement compensatory controls. A Web Application Firewall (WAF) can be configured to inspect inbound HTTP requests targeting the phpMyFAQ search endpoints. Rules should be established to drop or flag requests where the search parameter exclusively contains, or abnormally relies on, the % or _ characters.

Software developers maintaining similar PHP architectures must ensure that any data bound to a LIKE clause undergoes context-specific sanitization. Standard escape() functions are insufficient for pattern matching. Developers should mandate the use of prepared statements and parameter binding via modern database abstractions like PDO, which inherently protect against all forms of SQL syntax manipulation.

Security teams should conduct retrospective log analysis to identify potential historical exploitation attempts. Analysis should focus on application access logs targeting the search URI, specifically isolating requests containing single or multiple URL-encoded % (%25) characters in the query parameter.

Official Patches

thorstenGitHub Security Advisory
thorstenRelease Notes for Version 4.1.1

Technical Appendix

CVSS Score
6.9/ 10
CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:L/VI:N/VA:N/SC:N/SI:N/SA:N

Affected Systems

phpMyFAQ Search ComponentLAMP/LEMP Stack Applications running vulnerable phpMyFAQ versions

Affected Versions Detail

Product
Affected Versions
Fixed Version
phpMyFAQ
thorsten
< 4.1.14.1.1
AttributeDetail
CWE IDCWE-943
Attack VectorNetwork / Unauthenticated
CVSS v4.06.9
ImpactInformation Disclosure
Exploit StatusNone
CISA KEVNot Listed

MITRE ATT&CK Mapping

T1190Exploit Public-Facing Application
Initial Access
T1592.002Gather Victim Host Information: Software
Reconnaissance
CWE-943
Improper Neutralization of Special Elements in Data Query Logic

Improper Neutralization of Special Elements in Data Query Logic

Vulnerability Timeline

Vulnerability publicly disclosed and assigned CVE-2026-34973.
2026-04-02
GHSA-gcp9-5jc8-976x advisory published.
2026-04-02
phpMyFAQ version 4.1.1 released with the fix.
2026-04-02

References & Sources

  • [1]GHSA-gcp9-5jc8-976x Advisory
  • [2]phpMyFAQ 4.1.1 Release Notes
  • [3]NVD - CVE-2026-34973
  • [4]CVE.org - CVE-2026-34973

Attack Flow Diagram

Press enter or space to select a node. You can then use the arrow keys to move the node around. Press delete to remove it and escape to cancel.
Press enter or space to select an edge. You can then press delete to remove it or escape to cancel.

More Reports

•about 6 hours ago•CVE-2026-54347
8.7

CVE-2026-54347: Stored Cross-Site Scripting in Froxlor DNS TXT Record Configuration

A critical stored Cross-Site Scripting (XSS) vulnerability was identified in Froxlor server administration software panel before version 2.3.8. Authenticated customers with DNS editor privileges can inject malicious JavaScript into DNS TXT records. Because the application processes these values via a raw formatting callback without context-aware HTML entity encoding, the payload executes in the security context of administrative users who view the affected domain's DNS zones.

Amit Schendel
Amit Schendel
3 views•6 min read
•about 6 hours ago•CVE-2026-54348
7.2

CVE-2026-54348: Second-Order SQL Injection in Froxlor API Layer

An authenticated administrator with privileges to manage admin accounts (such as change_serversettings) can execute arbitrary SQL commands via a second-order SQL injection vulnerability. The flaw resides in Froxlor's administrative API endpoints, specifically during the handling of IP address mapping parameters which are stored as serialized arrays and later interpolated without sanitization into active database queries. This vulnerability allows high-privileged administrative attackers to compromise the database. By injecting a payload into administrative profile metadata, an attacker can extract sensitive credentials, manipulate backend settings, or potentially disrupt database integrity. The vulnerability affects all versions of Froxlor prior to 2.3.8.

Amit Schendel
Amit Schendel
3 views•6 min read
•about 8 hours ago•CVE-2026-54543
5.4

CVE-2026-54543: DNS Resource Record (RR) Injection in Froxlor DomainZones API

CVE-2026-54543 is a DNS Resource Record (RR) Injection vulnerability in Froxlor, an open-source server administration control panel. Prior to version 2.3.8, the DomainZones.add API command failed to perform strict sanitization and validation on the user-controlled record (label) and type parameters before serializing them into BIND-compatible zone files. An authenticated customer with DNS zone management permissions can inject control characters, breaking out of the original record context to define unauthorized resource records within managed zones.

Amit Schendel
Amit Schendel
4 views•7 min read
•about 8 hours ago•CVE-2026-42533
9.2

CVE-2026-42533: NGINX Map Directive and Regex Matching Pre-Auth Heap Buffer Overflow & Info Leak

CVE-2026-42533 is a critical security vulnerability discovered in NGINX Open Source, NGINX Plus, NGINX Ingress Controller, and related products, referred to as the 'Two-Pass Capture-Clobbering' bug. The flaw is situated within NGINX's internal evaluation engine when handling complex variables, exposing a heap-based buffer overflow and information leak when a configuration chains regular expression-based map directives with numbered capture groups. An unauthenticated remote attacker can exploit this weakness by transmitting crafted HTTP requests to trigger remote code execution or defeat ASLR.

Alon Barad
Alon Barad
7 views•7 min read
•about 8 hours ago•CVE-2026-55593
6.5

CVE-2026-55593: Persistent Administrative Hijacking via Cross-Site Request Forgery in Froxlor Ajax Router

Froxlor prior to version 2.3.8 contains a high-severity architectural flaw where the standalone lib/ajax.php entry point bypasses the centralized request validation in lib/init.php. Unauthenticated remote attackers can leverage Cross-Site Request Forgery (CSRF) to induce authenticated administrators to submit forged requests that modify API key whitelists and expiration dates, potentially yielding persistent, out-of-band administrative control.

Amit Schendel
Amit Schendel
6 views•8 min read
•about 9 hours ago•CVE-2026-62988
9.0

CVE-2026-62988: Multi-Factor Authentication and Credential Bypass in Froxlor API

An insecure data retrieval flaw in the Froxlor server administration panel API allows authenticated remote attackers to retrieve unredacted bcrypt password hashes and Base32-encoded Time-Based One-Time Password (TOTP) seeds. Affected endpoints include several 'get' and 'listing' handlers for customers, administrators, and FTP accounts. Utilizing these leaked parameters, attackers can crack the password hashes offline and concurrently generate valid second-factor authentication codes to completely bypass access controls.

Amit Schendel
Amit Schendel
8 views•6 min read