一個DoS漏洞可拿下WordPress站點?
簡介
WordPress CMS平台上發現一個簡單但很嚴重的應用級DoS漏洞,攻擊者利用該漏洞可以用很小的帶寬來達到網路級DDoS攻擊的效果,達到拿下WordPress站點的目的。
漏洞編號CVE-2018-6389,影響過去9年發布的所有WordPress版本,包括最新的WordPress穩定版Version 4.9.2。但廠商拒絕修復該漏洞。
以色列的安全研究人員Barak Tawily發現該漏洞位於load-scripts.php文件處,load-scripts.php是WordPress CMS的內置腳本,用來處理用戶定義的請求。
對於那些不了解的開發者,load-scripts.php文件是admin用戶來改善網站性能和加快載入速度的,使用的方法是把多個JS文件融入到一個單獨請求中。
為了讓load-scripts.php在admin登錄前就工作在管理登錄頁面(wp-login.php),WordPress作者並沒有保持任何的認證,這就導致了該頁面可以被任何人訪問。
WordPress DoS攻擊
依靠已安裝的插件和模塊,load-scripts.php文件可以通過傳遞name到load參數來選擇性的調用必須的JS文件,這些name是以「,」隔開的,就像下面的鏈接:
https://your-wordpress-site.com/wp-admin/load-scripts.php?c=1&load=editor,common,user-profile,media-widgets,media-gallery
當網站載入時,load-scripts.php會根據URL中的每個name去尋找對應的JS文件,並把其中的內容添加到一個單獨的文件,然後發送回用戶的web瀏覽器。
WordPress DoS攻擊原理
研究人員說,攻擊者可以通過把所有的參數傳遞給上面的URL來讓load-scripts.php來調用所有可能的JS文件,通過消耗更多的CPU和伺服器內存來讓目標網站運行變慢。
用戶可以用預先定義好的列表($wp_scripts)來發送請求,而這是load[]參數的一部分。如果請求的值存在,伺服器會用從用戶那裡獲取的補充值相關的預定義的路徑來執行I/O讀操作。
雖然訪客不能用一個簡單的請求來拿下整個網站,但是眼睛人員用一個Python POC腳本(doser.py)來向相同的URL發起大量的並發請求,這會大量消耗目標伺服器的CPU資源並讓伺服器宕機。
Hacker News驗證了DOS漏洞利用的真實性,成功地拿下了中等VPS伺服器上運行的demo WordPress站點。這再次證明了load-scripts.php不需要任何的認證,匿名用戶也可以進行上述操作。當伺服器的請求達到500左右的時候,伺服器就不再響應了,返回502/503/504錯誤。但是來自一個機器的40Mbps的連接是不足以讓運行在處理能力和內存比較高配的伺服器上的demo WordPress站點宕機的。
有更大帶寬和殭屍主機的攻擊者可以利用該漏洞來攻擊更大、更主流的WordPress站點。
補丁?
截止目前,還沒有補丁發布。該漏洞大概影響29%的web站點,將上百萬的網站至於黑客的面前,同時會讓合法的用戶得不到正常的服務。對於那些不能提供預防應用層攻擊的DDOS保護的網站,研究人員做了一個WordPress站點的副本,可以預防此類漏洞。
研究人員建議用戶不要安裝此類修改過的CMS,即使這種CMS的來源是可信的。研究人員也發布了bash腳本來修復該漏洞。
if [[ -f wp-login.php &&-f wp-admin/load-scripts.php &&-f wp-admin/includes/noop.php ]]
then
sed -i "1 s/^.*$/
sed -i -e "s/^require( ABSPATH . WPINC . "/script-loader.php" );$/require( ABSPATH . "wp-admin/admin.php" );/g" wp-admin/load-scripts.php
sed -i -e "s/^require( ABSPATH . WPINC . "/script-loader.php" );$/require( ABSPATH . "wp-admin/admin.php" );/g" wp-admin/load-styles.php
echo"""
/**
* Noop functions for load-scripts.php and load-styles.php.
*
* @package WordPress
* @subpackage Administration
* @since 4.4.0
*/
function get_file( $path ) {
if ( function_exists("realpath") ) {
$path = realpath( $path );
}
if ( ! $path || ! @is_file( $path ) ) {
return "";
}
return @file_get_contents( $path );
}"""> wp-admin/includes/noop.php
echo"Successfuly patched."
else
echo"Please run this file from WordPress root directory."
fi
附POC視頻


※因配置錯誤,25000個Jenkins伺服器泄漏了大量敏感數據
※新的移動惡意軟體利用分層混淆瞄準俄羅斯銀行
TAG:嘶吼RoarTalk |