phpMyFAQ
CVE-2025-68951
MEDIUM
Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessRegister account via public registration
-
DeliverySet display_name to entity-encoded XSS payload
-
ExploitServer stores and decodes value
-
ExecutionAdmin opens user list, |raw renders payload
-
ImpactScript runs in admin session (steal CSRF token/cookies)
Vulnerability Assessment
| Weakness |
CWE
OWASP Top 10:2025
A05:2025 - Injection
ASVS 5.0
V1 - Encoding and Sanitization Output encoding, context-aware escaping
MITRE ATT&CK
2 techniques across 2 tactics: Initial Access, Execution The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up. |
| Exploitation Conditions | Requires that public self-registration is enabled (security.enableRegistration = true) so an unauthenticated attacker can create an account and control the display_name/real-name field; the attacker submits an HTML-entity-encoded payload (e.g. '<img src=x onerror=alert(1)>') which UserData.php decodes via html_entity_decode and users.twig renders with the Twig |raw filter. Execution is gated on an administrator actually opening the admin user list page (/admin/user/list), i.e. UI:R is mandatory - the payload is inert until an admin views it. Limiting factors: registration may be disabled in hardened deployments, impact is confined to the admin-panel context, and successful session/CSRF-token theft depends on cookie flags (HttpOnly/SameSite). Affected only in phpMyFAQ 4.0.14 and 4.0.15; patched in 4.0.16. |
| Impact | This is a genuine but moderate-priority issue, not an urgent emergency. The CVSS 3.1 base score of 6.1 (AV:N/AC:L/PR:N/UI:R/S:C/C:L/I:L/A:N) reflects a network-reachable, low-complexity, unauthenticated stored XSS with a scope change (attacker-registered user payload executes in the privileged admin context) but only Low confidentiality/integrity impact and no availability impact. No EPSS score, no CISA KEV listing, and no SSVC decision were provided in the input, so widespread or automated exploitation cannot be asserted. However, the GitHub Security Advisory (GHSA-jv8r-hv7q-p6vc) contains a complete, working proof-of-concept (register a user, set display name to '<img src=x onerror=alert(1)>', admin views user list), so publicly available exploit code effectively exists even though no structured POC/KEV flag was supplied. The key tempering factors are that exploitation requires UI:R (an administrator must actually open the admin user list) and that the self-registration feature (security.enableRegistration=true) must be enabled, which is not guaranteed in every deployment. The CVSS signals are internally consistent with the description - no conflicts were observed - so the realistic verdict is: a legitimate, patch-worthy admin-targeted XSS with a confirmed fix, meriting prompt patching but not drop-everything escalation absent any exploitation telemetry. |
| Exploit ScenarioDerived | An unauthenticated attacker uses the public self-registration page to create an account, setting the display/real name to an HTML-entity-encoded payload such as '<img src=x onerror=alert(1)>'. The value is stored, then html_entity_decode'd on read and rendered through Twig's |raw filter when an administrator opens the admin user list, executing attacker JavaScript in the admin's authenticated session. A minimal, reproducible PoC is published in the vendor's GitHub Security Advisory. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Oct 05, 2026
Stored cross-site scripting in phpMyFAQ 4.0.14 and 4.0.15 allows an unauthenticated attacker (PR:N in the assessed vector) to execute arbitrary JavaScript in an administrator's browser by registering a user account whose display name contains HTML entities, which phpMyFAQ decodes server-side and then renders without escaping in the admin user list. Exploitation is conditional: public self-registration must be enabled (security.enableRegistration = true) and an administrator must actually open the admin user list page (/admin/user/list), so the payload stays inert until viewed (UI:R), giving an overall CVSS of 6.1. A working proof-of-concept with step-by-step reproduction is published in the vendor's GitHub security advisory, but there is no evidence of active exploitation and the issue is not listed in CISA KEV; version 4.0.16 contains the fix.
RemediationAI
Upgrade to phpMyFAQ 4.0.16, which is the vendor-released fix for this issue, and confirm the change is present: phpmyfaq/assets/templates/admin/user/users.twig must render the display name as {{ user.display_name }} rather than {{ user.display_name|raw }} (commit 61829e83411f7b28bc6fd1052bfde54c32c6c370), alongside the companion commit 8211d1d25951b4c272443cfc3ef9c09b1363fd87; full details are in GHSA-jv8r-hv7q-p6vc. If upgrading immediately is not possible, the highest-value compensating control is to disable public self-registration by setting security.enableRegistration = false, which removes the attacker's ability to seed the payload - the trade-off is that legitimate users can no longer sign themselves up and must be provisioned manually. Administrators can further reduce exposure by restricting network access to the admin user list endpoint /admin/user/list (for example IP allow-listing or placing the admin panel behind a VPN/reverse-proxy auth layer), understanding that this only limits which admins can trigger the payload and does not stop execution once the page is opened. Setting session cookies with HttpOnly and SameSite flags does not prevent the script from running but does blunt session-theft and cross-site request forgery follow-on impact, and CSRF tokens should be rotated after any suspected admin visit to the affected page. Because a public proof-of-concept is documented in the advisory, treat any administrator who viewed the user list on a vulnerable instance as potentially compromised and review admin activity accordingly.
Affected Packages
Source: OSV (Open Source Vulnerabilities)
Affects your stack
Affects 1 package in composer
Checking this CVE against your own stacks and servers is part of the Basic plan and up.
Technical ContextAI · show details
The root cause is CWE-79 (Improper Neutralization of Input During Web Page Generation), realized through a three-stage chain in the phpMyFAQ PHP/Twig stack. First, the attacker-controlled display_name (real name) field is stored in the database, typically as HTML entities such as <img src=x onerror=alert(1)>. Second, phpmyfaq/src/phpMyFAQ/User/UserData.php decodes that value with html_entity_decode(), a backward-compatibility behavior that converts the stored entities back into live markup. Third, the admin users table template phpmyfaq/assets/templates/admin/user/users.twig renders the decoded value through the Twig |raw filter ({{ user.display_name|raw }}), explicitly bypassing Twig's automatic contextual escaping, so the decoded string becomes active HTML/JavaScript in the administrator's session. The fix in commit 61829e83411f7b28bc6fd1052bfde54c32c6c370 removes the |raw filter so Twig escapes the output, with a companion commit 8211d1d25951b4c272443cfc3ef9c09b1363fd87. The affected Composer package is thorsten/phpmyfaq, vulnerable in the range >= 4.0.14, < 4.0.16; NVD's CPE coverage is broad (cpe:2.3:a:phpmyfaq:phpmyfaq:*:*:*:*:*:*:*:*) and additionally records 4.1.0:rc, while the vendor advisory scopes the confirmed vulnerable releases to 4.0.14 and 4.0.15 based on code inspection. Note that this is distinct from earlier phpMyFAQ advisories that centered on the email field; here the exploitable path is the display_name field plus server-side entity decoding.
Know when Phpmyfaq gets its next vulnerability
- Watch products and get an email when something new is published
- Check this CVE against your own stack and servers
- Exploit and PoC references, threat intelligence from 22 sources
No credit card · 7-day full trial
Severity by source
AV:N/AC:L/PR:N/UI:R/S:C/C:L/I:L/A:N
Unauthenticated attacker stores payload via public registration (PR:N), but a separate admin must view the list (UI:R), executing code in a different security context (S:C) with Low C/I and no availability impact.
Primary rating from NVD.
CVSS VectorNVD
DescriptionNVD
phpMyFAQ is an open source FAQ web application. Versions 4.0.14 and 4.0.15 have a stored cross-site scripting (XSS) vulnerability that allows an attacker to execute arbitrary JavaScript in an administrator’s browser by registering a user whose display name contains HTML entities. When an administrator views the admin user list, the payload is decoded server-side and rendered without escaping, resulting in script execution in the admin context. Version 4.0.16 contains a patch for the issue.
Threat Intelligence Overview
How this decision was reached
The engine reads each signal below and applies a fixed list of rules from top to bottom. The first rule that matches sets the recommended action – like a statement, every line is shown.
What every action level means
SSVC AssessmentENISA
Priority Score
Attack Technique
Cross-Site Scripting occurs when an application accepts untrusted data and sends it to a web browser without proper validation or encoding.
Affected Products (CPE)NVD
Duplicate-email registration handling in phpMyFAQ 4.0.7 through 4.0.13 (and 4.0-nightly-2025-10-03 and earlier) lets una
Insufficient Session Expiration in GitHub repository thorsten/phpmyfaq prior to 3.2.2. Rated critical severity (CVSS 9.8
Authentication Bypass by Capture-replay in GitHub repository thorsten/phpmyfaq prior to 3.1.12. Rated critical severity
Weak Password Requirements in GitHub repository thorsten/phpmyfaq prior to 3.1.12. Rated critical severity (CVSS 9.8), t
Weak Password Requirements in GitHub repository thorsten/phpmyfaq prior to 3.1.8. Rated critical severity (CVSS 9.8), th
Unauthenticated SQL injection in phpMyFAQ before 4.1.2 allows remote attackers to extract credentials, admin tokens, and
In phpMyFAQ before 2.9.9, there is Cross-Site Request Forgery (CSRF) in admin/stat.ratings.php. Rated high severity (CVS
In phpMyFaq before 2.9.9, there is CSRF in admin/ajax.config.php. Rated high severity (CVSS 8.8), this vulnerability is
In phpMyFAQ before 2.9.9, there is Cross-Site Request Forgery (CSRF) for modifying a glossary. Rated high severity (CVSS
In phpMyFAQ before 2.9.9, there is Cross-Site Request Forgery (CSRF) in admin/stat.main.php. Rated high severity (CVSS 8
phpMyFAQ is an open source FAQ web application for PHP 8.1+ and MySQL, PostgreSQL and other databases. Rated high severi
phpMyFAQ is an open source FAQ web application for PHP 8.1+ and MySQL, PostgreSQL and other databases. Rated high severi
NVD
CVE.org
EPSS
GitHub
Exploit-DB