當前位置:
首頁 > 新聞 > 一個DoS漏洞可拿下WordPress站點?

一個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視頻


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 嘶吼RoarTalk 的精彩文章:

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

TAG:嘶吼RoarTalk |