A stored cross-site scripting (XSS) vulnerability allows an attacker to execute arbitrary JavaScript in an administrator’s browser by registering a user whose display name contains HTML entities (e.g., <img ...>). 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.
Root cause is the following chain:
display_name (real name) is stored in DB (often as HTML entities, e.g., <img ...>).phpmyfaq/src/phpMyFAQ/User/UserData.php decodes display_name using html_entity_decode(...) (“for backward compatibility”).|raw:
phpmyfaq/assets/templates/admin/user/users.twig (users table uses {{ user.display_name|raw }})As a result, an entity-encoded payload becomes active HTML/JS when rendered in the admin user list.
Note: This report is about the display_name field + entity-decoding path. It is distinct from previously published issues focused on the email field.
Preconditions / configuration
security.enableRegistration = true).Steps
<img src=x onerror=alert(1)>http://127.0.0.1:8080/admin/user/listalert(1) triggers) and the payload is rendered as an actual <img> element.Stored XSS in the admin context can enable:
<img src=x onerror=alert(1)><img src="x" onerror="alert(1)">Confirmed by code inspection
html_entity_decode for display_name in UserData.php and {{ user.display_name|raw }} in users.twig.Confirmed by live reproduction
{
"cwe_ids": [
"CWE-79"
],
"github_reviewed": true,
"github_reviewed_at": "2025-12-29T22:12:35Z",
"nvd_published_at": "2025-12-29T16:15:43Z",
"severity": "MODERATE"
}