作者:墨云科技VLab Team
原文鏈接:https://mp.weixin.qq.com/s/mlLVIVM4bpQbOV8dVXaJSA

漏洞簡述
WooCommerce 一款基于 WordPress 的開源電子商務插件。時至今日已變成全球最流行的電商系統,它是為使用WordPress的小型或大型在線商人而設計的。該插件于2011年9月27日發布,以其易于安裝和定制以及免費的基礎產品而迅速流行。WooCommerce在WordPress擁有5百萬+的用戶量。
漏洞分析
根據官方發布的安全更新通告來看,該漏洞影響了大概90多個版本的插件,然后去官方源碼庫查看代碼提交記錄,發現在
woocommerce/tags/5.3.1/packages/woocommerce-blocks/src/StoreApi/Utilities/ProductQueryFilters.php
存在sql注入點,在修復后,會調用
wc_sanitize_taxonomy_name
以及
esc_sql
來防止注入。

根據該文件的路徑去反向推一下訪問地址,首先全局搜索該邏輯所在的函數名
get_attribute_counts
在哪里進行了調用。

然后打開該文件
wp-content/plugins/woocommerce/packages/woocommerce-blocks/src/StoreApi/Routes/ProductCollectionData.php
發現當前文件中有
get_path()
方法,其所對應的就是接口的訪問路徑,然后拼接到url中即可,最終該文件的訪問地址為:
http://wp.local:8888/wp-json/wc/store/products/collection-data
接著繼續找漏洞調用點
get_attribute_counts
在哪里進行了調用,發現在
get_route_response
中對該漏洞函數進行了調用。

根據閱讀代碼發現,需要給定相對應的請求參數
calculate_attribute_counts
才會進入該判斷,根據在
get_collection_params
中對
calculate_attribute_counts
參數的定義,可以直接反推出來訪問的地址:

可以看到其接收的參數類型為數組類型,直接在上面反推出來的當前文件訪問地址后面加數組訪問參數即可給
$request['calculate_attribute_counts']
賦值.
http://wp.local:8888/wp-json/wc/store/products/collection-data?calculate_attribute_counts[][taxonomy]=product_type
接下來就是構造poc了,在對官方修復的文件中的86行進行深入分析,
wp-content/plugins/woocommerce/packages/woocommerce-blocks/src/StoreApi/Utilities/ProductQueryFilters.php
對其調用的
wc_sanitize_taxonomy_name
函數進行查找,全局搜索發現存在的位置為:
wp-content/plugins/woocommerce/includes/wc-formatting-functions.php
其內容為:
/**
* Sanitize taxonomy names. Slug format (no spaces, lowercase).
* Urldecode is used to reverse munging of UTF8 characters.
*
* @param string $taxonomy Taxonomy name.
* @return string
*/
function wc_sanitize_taxonomy_name( $taxonomy ) {
return apply_filters( 'sanitize_taxonomy_name', urldecode( sanitize_title( urldecode( $taxonomy ) ) ), $taxonomy );
}
可以看到其返回的結果的核心是調用
sanitize_title
方法,該方法在官方解釋如下,

在返回結果后,并未對結果進行二次處理,在下面直接調用sql語句拼接了進去,

發現其最終導致的問題點,其根本原因是自行封裝的函數只調用了
sanitize_title
函數,該函數雖然能過濾一些字符,但是對于最終查詢sql語句之前卻未調用
esc_sql
函數,從而導致SQL注入。

時間線
- 2021年7月13日WooCommerce接收到漏洞報送
- 2021年7月14日WooCommerce修復該漏洞
- 2021年7月15日WooCommerce官方發布文章通告
- 2021年7月15日VLab實驗室監測到漏洞通告
- 2021年7月16日VLab實驗室完成該漏洞復現
影響版本
- WooCommerce(3.3-5.5.0)
- WooCommerce Blocks(2.5-5.5.0)
修復建議
登錄WordPress后臺,將相關插件更新至最新版。
本文由 Seebug Paper 發布,如需轉載請注明來源。本文地址:http://www.bjnorthway.com/2023/
暫無評論