當前位置:
首頁 > 新聞 > 如何用0day漏洞黑掉西部數據NAS存儲設備

如何用0day漏洞黑掉西部數據NAS存儲設備


我們以入侵和破解設備為樂,今天,要向大家展示的是近期我們對西部數據(Western Digital )網路存儲設備(NAS)的漏洞發現和入侵利用過程。點擊閱讀原文觀看入侵視頻。


漏洞發現


去年年中,我打算入手一台支持硬體解碼的NAS存儲來搭建Plex流媒體服務平台,經過一番比較,在一位朋友的推薦下,我選擇了西部數據(Western Digital )的MyCloud PR4100,該存儲設備完全滿足我所有的功能需求。把該設備添加進網路之後,可以通過一個Web界面訪問登錄,由於我對使用設備有安全潔癖,所以在登錄開啟SSH連接之後,我開始對其網頁服務功能進行了安全審計,並發現了以下存在漏洞:


登錄驗證繞過漏洞



很驚訝,我很快發現了一個用cookie和PHP session進行登錄檢查的bug。雖然使用cookie認證並不都是壞事,但該設備的使用方式存在問題,請看以下腳本:


/lib/login_checker.php



function login_check()

{


$ret = 0;

if (isset($_SESSION["username"]))


{


if(isset($_SESSION["username"]) && $_SESSION["username"] != "")


$ret = 2; //login, normal user


if ($_SESSION["isAdmin"] == 1)


$ret = 1; //login,admin


}



else if (isset($_COOKIE["username"]))


{


if (isset($_COOKIE["username"])&& $_COOKIE["username"] != "")


$ret = 2; //login, normaluser


if ($_COOKIE["isAdmin"] == 1)


$ret = 1; //login,admin


}


return $ret;


}


代碼包含一個名為 「login_check」的函數,後台PHP腳本通過調用該函數對預登錄用戶進行認證校驗。函數代碼顯示,可以通過兩種方式進行認證,一種是session方式的

「username」

「isAdmin」判斷,另一種是cookie方式的判斷。由於cookie由用戶執行產生,所以攻擊者同樣可以構造滿足腳本調用的惡意請求。上述代碼認證方式可以歸納為以下方式:



當存在「username」 變數且不為空時,用戶作為正常許可權用戶登錄;


當存在「isAdmin」變數且不為空時,用戶作為管理員登錄;


這意味著,只要使用php腳本進行登錄驗證時,攻擊者就可以構造特殊cookie變數繞過驗證。


補丁更新導致新的漏洞



然而,就在我的研究過程中,該存儲設備的一個固件更新釋出對上述bug的修復補丁。但更不可思議的是,該補丁卻導致了另外一種方式的驗證繞過漏洞。以下是更新後的登錄驗證腳本:


/var/www/web/lib/login_checker.php



function login_check()


{


$ret = 0;


if (isset($_SESSION["username"]))


{


if(isset($_SESSION["username"]) && $_SESSION["username"] != "")


$ret = 2; //login, normal user


if ($_SESSION["isAdmin"] == 1)


$ret = 1; //login,admin


}


else if (isset($_COOKIE["username"]))


{


if(isset($_COOKIE["username"]) && $_COOKIE["username"] != "")


$ret = 2; //login, normal user


if ($_COOKIE["isAdmin"] == 1)


$ret = 1; //login, admin


if(wto_check($_COOKIE["username"]) === 0) //wto check fail


$ret = 0;


}


return $ret;


}


?>


更新後的代碼第40行,增加了對用戶驗證的

「wto_check()」

方法,用戶名和IP地址都是該方法的參數。當前登入用戶保持操作狀態,則返回1,超時則返回0。「wto_check()」實現代碼如下:


/var/www/web/lib/login_checker.php



/*


return value: 1: Login, 0: No login


*/


function wto_check($username)


{


if (empty($username))


return 0;


exec(sprintf("wto -n "%s" -i "%s" -c",escapeshellcmd($username), $_SERVER["REMOTE_ADDR"]), $login_status);


if ($login_status[0] === "WTO CHECK OK")


return 1;


else


return 0;


}


/*ret: 0: no login, 1: login, admin, 2: login, normal user */


上述代碼第11行中,用戶名和IP地址被初始化為wto變數參數,而問題就出在用來處理整個命令字元串的方法「

escapeshellcmd

()」,該方法不會對-n參數中配對的引號進行轉義,這就給了攻擊者重新構造或繞過驗證的可能,因此,我們可以添加新的參數繞過驗證並執行任意用戶登錄。



Freebuf百科:

escapeshellcmd()

對字元串中可能會欺騙shell命令執行任意命令的字元進行轉義。 此函數保證用戶輸入的數據在傳送到 exec()或 system()函數,或者執行操作符之前進行轉義。反斜線()會在以下字元之前插入: #&;`|*?~<>^()[]{}$, x0A 和 xFF。 而" 和 " 僅在不配對的時候被轉義,在 Windows 平台上,所有這些字元以及 % 都會被前綴 ^ 來轉義。(詳細請參考 php.net相關說明)


這裡,最好使用Escapeshellarg方法函數,Escapeshellarg()會將任何引起參數或命令結束的字元進行轉義,如單引號「』」會被轉義為「』」,雙引號「」」會被轉義為「」」,分號「;」會被轉義為「;」,這樣escapeshellarg會將參數內容限制在一對單引號或雙引號裡面,轉義參數中所包含的單引號或雙引號,使其無法對當前執行進行截斷,實現防範命令繞過或注入攻擊的目的。


命令注入漏洞


大多數的西部數據MyCloud設備Web界面,實際上是由CGI腳本來實現的,這些腳本中大部分二進位文件都存在著相同的功能模式,如從請求包中獲取post/get/cookie值,然後應用這些值執行相關命令。然而,大多數情況下,這些命令會使用到用戶提交的一些未經安全處理的惡意數據。例如,以下設備中存在的代碼:


php/users.php



15 $username = $_COOKIE["username"];


16 exec("wto -n"$username" -g", $ret);


代碼把包含cookie值的全局變數數組$_COOKIE命名為」$username」,之後,該」$username」作為後續「exec()」命令執行的調用參數。因為沒有任何過濾措施,可以這樣更改一下,把username值設為:



username=$(touch /tmp/1)


那麼執行命令將會變為:



wto -n "$(touch /tmp/1)" -g


很容易就執行了用戶的自定義命令。


由於命令行參數被雙引號封裝,在執行「$(COMMANDHERE)」語法時,命令「touch /tmp/1」先於wto前就已經執行,並把返回結果作為-n參數。這種web介面對內置腳本的交互調用模式,明顯會導致命令注入漏洞。而且,使得注意的是,所有通過web端構造的命令都會被以root許可權執行。


其它Bug


除了以上兩個高危漏洞之外,該設備在web服務方面還存在其它一些嚴重Bugs,比如以下文件中正常登錄驗證行為被錯誤地注釋掉:



6 //include("../lib/login_checker.php");



7//



8///* login_check() return 0: no login, 1: login, admin, 2: login, normal user*/



9//if (login_check() == 0)



10//{



11// echo json_encode($r);



12// exit;



13//}


而以下上傳功能文件可以針對設備系統,執行無需用戶驗證的,任意目錄位置的任意文件上傳:


addons/upload.php



2 //if(!isset($_REQUEST["name"])) throw newException("Name required");



3//if(!preg_match("/^[-a-z0-9_][-a-z0-9_.]*$/i", $_REQUEST["name"])) throw newException("Name error");



4//



5//if(!isset($_REQUEST["index"])) throw new Exception("Index required");



6//if(!preg_match("/^[0-9]+$/", $_REQUEST["index"])) throw new Exception("Indexerror");



7//



8//if(!isset($_FILES["file"])) throw new Exception("Upload required");



9//if($_FILES["file"]["error"] != 0) throw new Exception("Upload error");




10



11$path = str_replace("//","/",$_REQUEST["folder"]);



12$filename = str_replace("\","",$_REQUEST["name"]);



13$target = $path . $filename . "-" .$_REQUEST["index"];



14



15//$target = $_REQUEST["folder"] .$_REQUEST["name"] . "-" . $_REQUEST["index"];





16



17move_uploaded_file($_FILES["file"]["tmp_name"], $target);



18



19



20//$handle = fopen("/tmp/debug.txt", "w+");



21//fwrite($handle, $_FILES["file"]["tmp_name"]);



22//fwrite($handle, "
");



23//fwrite($handle, $target);



24//fclose($handle);





25



26// Might execute too quickly.



27sleep(1);


除此之外,我們還發現了另外一個個遠程命令執行漏洞(RCE)和身份驗證命令執行漏洞,在此就不作公開。由於這些漏洞在此之前,沒人發現或爆料過,可以算是西部數據NAS設備的0day漏洞。


漏洞總結



1 x 登錄驗證繞過漏洞


1 x 任意文件上傳漏洞


1 x 無需用戶驗證的遠程代碼執行漏洞


1x 身份驗證命令執行漏洞


漏洞影響範圍


涉及西部數據以下型號系列的NAS設備



My Cloud


My Cloud Gen 2


My Cloud Mirror


My Cloud PR2100


My Cloud PR4100


My Cloud EX2 Ultra


My Cloud EX2


My Cloud EX4


My Cloud EX2100


後續的補丁更新和相關情況,請繼續關注我們的Twitter @exploiters


*參考來源:exploiteers,freebuf小編clouds編譯,轉載請註明來自Freebuf.com。


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

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


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

直播閱讀神器SqlMap源碼(第一集)
朝鮮使用先進工具監視公民的數字生活
聊聊身份欺詐和竊取那些事

TAG:FreeBuf |

您可能感興趣

坐擁20TB容量 西部數據My Book Duo又創存儲記錄
正確使用OSS Lifecycle機制節約數據存儲費用
西部數據推出iNAND 7250A嵌入式存儲設備
西部數據推出My Passport Ultra USB存儲驅動器
西部數據收購雲存儲服務公司 Upthere
西部數據推出HGST品牌Ultrastar? SS300
西部數據推出新款 My Book Duo 桌面存儲硬碟,容量高達 20TB
數據存儲篇之MongoDB 使用場景
【FB TV】一周「BUF大事件」:黑客泄露竊取的900Gb Cellebrite數據;Netgear路由器存在密碼繞過漏洞
西部數據宣布收購雲存儲公司Upthere
重磅,Science:DNA像硬碟一樣存儲數據
如何使用Python對Instagram進行數據分析?
墨西哥退稅網站MoneyBack泄露400GB客戶敏感數據
Android使用OKHTTP解析JSON數據
一份數據支持多種應用場景 CarbonData融合數據存儲方案技術揭秘
蘋果數據線缺貨不用愁 Ravpower 0.9m蘋果MFi數據線團購
西數數據升級充氦技術WD Red和WD Red Pro NAS硬碟內存至10TB
USB 3.1 Gen2成標配 西部數據首款移動SSD用料很足
西部數據推出首款My Passport攜帶型SSD