漏洞詳情
CVE-2020-11512分析
首先看到在插件的目錄plugins\idx-broker-platinum\idx\initiate-plugin.php文件下的277行的idx_update_recaptcha_key函數(shù)中接收了POST參數(shù)idx_recaptcha_site_key數(shù)據(jù),在279行被update_option函數(shù)調用
注:在當前賬戶權限下,執(zhí)行修改初始化信息只可以用這個驗證,返回信息只有一個1,如果不是1說明修改失敗 在在當前用戶全下載通過Wordpress IMPress for IDX Broker可以越權操作IMPress for IDX Brokerc插件的初始化信息,通過xss漏洞獲取管理員敏感信息。
下面我們看下update_option函數(shù)對該數(shù)據(jù)的操作,該函數(shù)是對wordpress中的options參數(shù)的進行更新數(shù)據(jù),我們看到上面對options的傳入?yún)?shù)為idx_recaptcha_site_key,即更新該參數(shù)的值
在390行我們看到執(zhí)行了update參數(shù),更新了數(shù)據(jù)庫中的數(shù)據(jù)
我們在update_option函數(shù)中調用了wp_protect_special_option對option參數(shù)名進行html過濾,卻沒有對value進行過濾,引發(fā)了xss漏洞
下面我們看下函數(shù)idx_update_recaptcha_key的調用位置,在initiate-plugin.php文件下的34行hook在wp_ajax_idx_update_recaptcha_key tag上,
我們在admin-ajax.php頁面中159行中獲取到action參數(shù),使用is_user_logged_in判斷了用戶權限后,直接將action參數(shù)拼接到do_action函數(shù)中進行執(zhí)行,而is_user_logged_in只是判斷用戶是否存在,沒有進行權限判斷。
CVE-2020-11512利用
通過user1用戶(訂閱者權限)發(fā)送數(shù)據(jù)包:
- POST /wordpress/wp-admin/admin-ajax.php HTTP/1.1
- Host: localhost
- User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:76.0) Gecko/20100101 Firefox/76.0
- Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
- Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
- Connection: close
- Cookie: wordpress_bbfa5b726c6b7a9cf3cda9370be3ee91=user1%7C1591004988%7CPrKGAmfSsNxfsQ9QAGID3aK8sMmvLnJtimfdGugoqCN%7C2850d94c57420c45398bd86aa49445eb60914036c0482cd3ebc755de5a8b1239; wordpress_test_cookie=WP+Cookie+check; wordpress_logged_in_bbfa5b726c6b7a9cf3cda9370be3ee91=user1%7C1591004988%7CPrKGAmfSsNxfsQ9QAGID3aK8sMmvLnJtimfdGugoqCN%7Cc1e4006d123d6f33199624e0a514319b21b93859faa5af2a60fc0ceda066fb73; wp-settings-time-2=1590832197
- Upgrade-Insecure-Requests: 1
- Content-Type: application/x-www-form-urlencoded
- Content-Length: 0
- action=idx_update_recaptcha_key&idx_recaptcha_site_key=a22212322123"><svg onload=alert(/~xss~/)>'
此時管理員對該插件進行設置操作:
CVE-2020-9514漏洞分析
從\wp-content\plugins\idx-broker-platinum\idx\wrappers.php文件中idx_ajax_create_dynamic_page函數(shù)中202行看到函數(shù)通過post_title參數(shù)中獲取到了title數(shù)據(jù),211行獲取到了wrapper_page_id參數(shù),在214和215行更新了數(shù)據(jù)庫,并在218行針對給定的id進行更新元字段。
繼續(xù)看236行的idx_ajax_delete_dynamic_page函數(shù),接收到post參數(shù)wrapper_page_id,然后進行刪除該數(shù)據(jù)操作
我們找一下這兩個函數(shù)的調用位置:
好了,可以看到這兩個函數(shù)全部掛鉤在wp_ajax開頭的鉤子上,利用上面的越權操作即可操作
CVE-2020-9514漏洞利用
首先添加一個Wrapper頁面
下面使用user1用戶進行create操作:
首先在頁面中獲取上面創(chuàng)建的id值:6
操作如下:
發(fā)現(xiàn)該頁面數(shù)據(jù)已改變,并且由user1修改
同樣執(zhí)行刪除操作
發(fā)現(xiàn)已經(jīng)無了:
防御
通過查看對比補丁信息,新的版本使用current_user_can函數(shù)判斷當前用戶的權限,并驗證nonce機制防御CSRF攻擊。