Skip to main content

phpMyFAQ CVE-2025-68951

MEDIUM
Cross-site Scripting (XSS) (CWE-79)
2025-12-29 security-advisories@github.com
6.1
CVSS 3.1 · NVD
View

Attack ChainAIDerived

Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain

  1. Access
    Register account via public registration
  2. Delivery
    Set display_name to entity-encoded XSS payload
  3. Exploit
    Server stores and decodes value
  4. Execution
    Admin opens user list, |raw renders payload
  5. Impact
    Script 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.

This Month Plan within 30 days. Why: MEDIUM severity (CVSS 4.0-6.9).
Patch available 0.3% exploitation probability (EPSS)

Get an e-mail when this CVE is exploited, patched or re-scored. Free account.

Alert me

AnalysisAIv1 – 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

composer thorsten/phpmyfaq fix: 4.0.16

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 &lt;img src=x onerror=alert(1)&gt;. 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

NVD PRIMARY 6.1 MEDIUM
AV:N/AC:L/PR:N/UI:R/S:C/C:L/I:L/A:N
vuln.today AI 6.1 MEDIUM

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.

3.1 AV:N/AC:L/PR:N/UI:R/S:C/C:L/I:L/A:N
4.0 AV:N/AC:L/AT:N/PR:N/UI:P/VC:L/VI:L/VA:N/SC:L/SI:L/SA:N

Primary rating from NVD.

CVSS VectorNVD

Attack Vector
Network
Attack Complexity
Low
Privileges Required
None
User Interaction
Required
Scope
Changed
Confidentiality
Low
Integrity
Low
Availability
None

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

EPSS Score
0.3%
Top 81% exploitable
Prevalence
Low
niche open-source FAQ application, limited enterprise deployment footprint
Data Quality
4 sources
Confidence: Medium

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.

SignalValue
Severity MEDIUM
CISA KEV No
Public POC No
EPSS 0.3%
Patch available Yes
Active threat No
Deciding rule
MEDIUM severity (CVSS 4.0-6.9)
What every action level means
Emergency Immediate action required. Criteria: CRITICAL + in CISA KEV (actively exploited) without patch, OR CRITICAL + EPSS > 30% without patch, OR CRITICAL + active threat signals without patch.
Act Now Prioritize within 24-48h. Criteria: in KEV with patch available, OR CRITICAL + public POC, OR HIGH + EPSS > 10%, OR CRITICAL + active threat, OR any CRITICAL severity.
This Week Schedule remediation this week. Criteria: HIGH severity (CVSS 7.0-8.9). Patch within normal change window.
This Month Plan within 30 days. Criteria: MEDIUM severity (CVSS 4.0-6.9), lower exploitation probability. Include in regular patch cycle.
Monitor Track and reassess. Criteria: LOW severity (CVSS 0.1-3.9), minimal exploitation risk. No immediate action needed.

SSVC AssessmentENISA

SSVC Decision· derived
Scheduled
Exploitation· derived
None
System Exposure· derived
Open
Automatable· derived
No
Human Impact· derived
Medium

Priority Score

30
Low Medium High Critical
KEV: 0
EPSS: 0
CVSS: +30
PoC: 0
Weaponized: 0
Threat intel: 0
Gov advisory: 0

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

cpe:2.3:a:phpmyfaq:phpmyfaq:*:*:*:*:*:*:*:*
cpe:2.3:a:phpmyfaq:phpmyfaq:4.1.0:rc:*:*:*:*:*:*
CVE-2025-59943 CRITICAL POC
9.8 Oct 03

Duplicate-email registration handling in phpMyFAQ 4.0.7 through 4.0.13 (and 4.0-nightly-2025-10-03 and earlier) lets una

CVE-2023-5865 CRITICAL POC
9.8 Oct 31

Insufficient Session Expiration in GitHub repository thorsten/phpmyfaq prior to 3.2.2. Rated critical severity (CVSS 9.8

CVE-2023-1886 CRITICAL POC
9.8 Apr 05

Authentication Bypass by Capture-replay in GitHub repository thorsten/phpmyfaq prior to 3.1.12. Rated critical severity

CVE-2023-1753 CRITICAL POC
9.8 Mar 31

Weak Password Requirements in GitHub repository thorsten/phpmyfaq prior to 3.1.12. Rated critical severity (CVSS 9.8), t

CVE-2022-3754 CRITICAL POC
9.8 Oct 29

Weak Password Requirements in GitHub repository thorsten/phpmyfaq prior to 3.1.8. Rated critical severity (CVSS 9.8), th

CVE-2026-46364 CRITICAL POC
9.3 May 15

Unauthenticated SQL injection in phpMyFAQ before 4.1.2 allows remote attackers to extract credentials, admin tokens, and

CVE-2017-15730 HIGH POC
8.8 Oct 22

In phpMyFAQ before 2.9.9, there is Cross-Site Request Forgery (CSRF) in admin/stat.ratings.php. Rated high severity (CVS

CVE-2017-15808 HIGH POC
8.8 Oct 23

In phpMyFaq before 2.9.9, there is CSRF in admin/ajax.config.php. Rated high severity (CVSS 8.8), this vulnerability is

CVE-2017-15735 HIGH POC
8.8 Oct 22

In phpMyFAQ before 2.9.9, there is Cross-Site Request Forgery (CSRF) for modifying a glossary. Rated high severity (CVSS

CVE-2017-15734 HIGH POC
8.8 Oct 22

In phpMyFAQ before 2.9.9, there is Cross-Site Request Forgery (CSRF) in admin/stat.main.php. Rated high severity (CVSS 8

CVE-2024-28107 HIGH POC
8.8 Mar 25

phpMyFAQ is an open source FAQ web application for PHP 8.1+ and MySQL, PostgreSQL and other databases. Rated high severi

CVE-2024-27299 HIGH POC
8.8 Mar 25

phpMyFAQ is an open source FAQ web application for PHP 8.1+ and MySQL, PostgreSQL and other databases. Rated high severi

This site uses cookies essential for authentication and security. No tracking or analytics cookies are used. Privacy Policy