phpMyFAQ Unauthenticated FAQ Permission Bypass via Solution ID Enumeration
phpMyFAQ version 4.1.1 and earlier is vulnerable to an unauthenticated FAQ permission bypass, allowing attackers to enumerate solution IDs and discover restricted FAQ titles due to missing permission filters in key functions.
phpMyFAQ version 4.1.1 and earlier contains a vulnerability that allows unauthenticated users to bypass intended access restrictions on FAQ entries. The vulnerability stems from the /solution_id_{id}.html route, which leverages the getIdFromSolutionId() function lacking proper permission checks. Additionally, the getFaqBySolutionId() function incorporates an explicit fallback mechanism that also bypasses permission filters. By sequentially querying solution IDs, an attacker can discover the existence and titles of FAQs intended for specific user groups or administrators. This affects deployments hosting sensitive internal knowledge alongside public content, impacting the confidentiality of restricted information. The vulnerability was reported on May 6, 2026.
Attack Chain
- An unauthenticated attacker sends a GET request to
/solution_id_{id}.html, where{id}is a sequentially incremented integer. - The phpMyFAQ server receives the request and calls
Faq::getIdFromSolutionId()to retrieve FAQ data. getIdFromSolutionId()executes an SQL query that joinsfaqdataandfaqcategoryrelationsbased onsolution_idwithout applying any permission filters.- The server constructs a redirect URL using the retrieved data, including the FAQ’s category ID, record ID, language, and a slugified title derived from the FAQ’s question.
- The server responds with a 301 Moved Permanently redirect to the generated URL, exposing the FAQ’s title in the
Locationheader. - The attacker records the 301 responses, extracting the FAQ’s category, ID, language, and title from the
Locationheader. - The attacker repeats steps 1-6, enumerating solution IDs to discover all FAQ entries, including those with restricted access.
- The attacker gains knowledge of restricted FAQ titles, compromising confidentiality where titles contain sensitive information about the FAQ’s content.
Impact
Successful exploitation allows any unauthenticated visitor to enumerate all FAQ entries on the phpMyFAQ instance, including those intended for specific groups or users. The attacker can read the title of every restricted FAQ. For deployments that host internal-only content alongside public content (e.g., staff knowledge bases, internal SOPs, confidential customer notes), this leads to a loss of confidentiality. The slugified titles, often encoding the subject directly (e.g., q3-layoff-plan), expose sensitive information.
Recommendation
- Apply the recommended fix by adding a permission filter to
getIdFromSolutionId()usingQueryHelper::queryPermission()(see code snippet in the original advisory) to prevent unauthenticated access. - Remove the unconditional fallback in
getFaqBySolutionId()atFaq.php:1256-1265to ensure permission checks are enforced. - Deploy the Sigma rule “phpMyFAQ Unauthenticated Solution ID Enumeration” to detect attackers enumerating
/solution_id_{id}.htmlto discover restricted FAQ titles. - Monitor web server logs (category: webserver, product: linux) for HTTP 301 responses originating from requests to
/solution_id_{id}.htmlas an indicator of potential exploitation.
Detection coverage 2
phpMyFAQ Unauthenticated Solution ID Enumeration
mediumDetects unauthenticated enumeration of solution IDs in phpMyFAQ, indicating a potential information disclosure attempt.
phpMyFAQ Solution ID Access Redirect
mediumDetects access to solution_id URLs which results in a redirect, potentially exposing restricted FAQ titles.
Detection queries are kept inside the platform. Get full rules →