【CVE-2025-6058】WPBookit 插件任意文件上传漏洞
字数 1541 2025-09-01 11:26:11
WPBookit 插件任意文件上传漏洞分析 (CVE-2025-6058)
1. 漏洞概述
漏洞名称: WPBookit 插件任意文件上传漏洞
CVE编号: CVE-2025-6058
影响版本: WPBookit 插件所有版本至1.0.4(包括1.0.4)
漏洞类型: 文件上传漏洞
威胁等级: 高危
漏洞影响: 远程代码执行 (RCE)
发现时间: 2025年7月18日
2. 漏洞描述
WPBookit 是一款用于WordPress的在线预订和预约管理插件。该插件中的image_upload_handle()函数缺少文件类型验证,导致攻击者可以通过添加新的预订类型的路由(add_booking_type)上传任意文件。成功利用此漏洞的攻击者能够在受影响网站的服务器上上传恶意文件(如PHP webshell),进而可能导致远程代码执行。
3. 漏洞复现
3.1 环境准备
- WordPress 安装
- WPBookit 插件(版本 ≤1.0.4)
3.2 漏洞检测
- 探测目标是否使用WPBookit插件
- 确认插件版本是否为1.0.4或更早版本
3.3 利用步骤
- 构造恶意请求,通过
add_booking_type路由上传文件 - 请求参数设置:
action=wpb_ajax_postroute_name=add_booking_type
- 上传webshell文件(如PHP文件)
注意:虽然上传后可能显示"fail to upload media"的错误信息,但实际上文件已经成功上传。
- 访问上传的webshell,默认路径为:
/wp-content/uploads/[当前年份]/[当前月份]/shell.php
4. 漏洞分析
4.1 漏洞路径
漏洞主要存在于以下文件路径:
core/admin/classes/class.wpb-admin-routes-handler.php
core/admin/classes/controllers/class.wpb-booking-type-controller.php
4.2 代码分析
-
路由处理:
- 当
action参数为wpb_ajax_post且route_name为add_booking_type时,请求会被路由到class.wpb-booking-type-controller.php处理
- 当
-
文件上传处理:
- 使用
$_FILES超全局数组接收上传文件 - 关键漏洞点:
image_upload_handle()函数中,先移动文件(move_uploaded_file),然后才验证文件是否为有效的媒体文件
- 使用
-
漏洞本质:
- 验证逻辑顺序错误(先上传后验证)
- 缺乏有效的文件类型白名单验证
- 缺乏文件扩展名检查
5. 修复方案
5.1 官方修复
官方在后续版本中修复了此漏洞,主要修复措施包括:
- 增加了文件类型的白名单验证
- 增加了文件扩展名验证
- 调整了验证逻辑顺序(先验证后上传)
5.2 临时缓解措施
如果无法立即升级插件,可采取以下措施:
- 禁用WPBookit插件
- 在服务器端限制上传目录的执行权限
- 添加Web应用防火墙(WAF)规则,拦截可疑的文件上传请求
- 监控
/wp-content/uploads/目录下的可疑文件
6. 漏洞利用防御
-
输入验证:
- 实施严格的文件类型和扩展名白名单
- 验证文件内容而不仅仅是文件头
-
安全配置:
- 确保上传目录不可执行
- 限制上传文件的大小
- 对上传文件重命名(避免使用用户提供的文件名)
-
权限控制:
- 限制文件上传功能的使用权限
- 实施CSRF保护
7. 参考链接
- 官方修复补丁:[插件更新日志]
- CVE详细描述:[CVE-2025-6058]
- WordPress插件目录:[WPBookit插件页面]
8. 总结
CVE-2025-6058是一个典型的文件上传漏洞,由于验证逻辑顺序错误和缺乏足够的文件类型检查导致。这类漏洞危害性高,可导致服务器被完全控制。开发人员应遵循"先验证后处理"的原则,对所有用户上传的文件实施严格的安全检查。