背景
CVE-2021-40444為微軟MHTML遠端命令執行漏洞,攻擊者可通過傳播Microsoft Office文件,誘導目標點選文件從而在目標機器上執行任意程式碼。該漏洞最初的利用思路是使用下載cab並釋放、載入inf檔案的形式執行惡意程式碼。獨立安全研究員Eduardo B.在github公開了一種新的“無CAB”的漏洞利用方法及其POC。公眾號之前釋出的研判文章中已對在野利用中出現的新的Cabless利用鏈以及RAR檔案隱藏載荷的巧妙方法進行了分析。本篇將進一步探究該利用鏈的技術本質,並在復現攻擊場景的前提下嘗試對利用鏈進行改進。
基於URL Scheme的Cabless利用鏈
與基於cab的攻擊方式一樣,新攻擊鏈依然需要在Office文件中插入惡意htmlfile OLE物件,當目標使用者點選文件後會請求訪問遠端html頁面,而html頁面中通過ActiveX控制元件呼叫".wsf:../" URL Scheme連結,最終呼叫wcript.exe執行RAR中嵌入的wsf指令碼。
'.wsf:../../../Downloads/?.wsf'
URL Scheme也叫URL protocol,它的作用是通過連結啟動對應的本地程式,格式為[scheme]://[host]/[path]?[query]。檔案字尾名可同樣用作scheme,呼叫相關檔案型別繫結的程式。’?[query]’的存在則可利用URL Scheme與程式在處理路徑時不同的行為,達到忽略真實字尾名,繞過副檔名校驗的目的。在之前的攻擊鏈中曾使用”.cpl”連結呼叫系統rundll32.exe程式將inf檔案作為cpl檔案載入執行。
目前公開的配合RAR的Cabless利用鏈的POC有兩個利用條件,一是猜測到WINRAR的儲存位置,預設其位於使用者目錄的Downloads資料夾下,否則無法獲取wsf指令碼位置;二是明確wscript.exe執行的當前路徑(例如Documents目錄),否則無法構造正確的路徑。下面將從不同的利用場景考慮,思考更靈活的URL Scheme構造方式。
基於不同利用場景的利用鏈改進
配合RAR的Cabless利用鏈在實際執行時有兩種可能,使用者直接在WinRAR中開啟DOCX檔案,以及先解壓再開啟,對這兩條攻擊路徑進行分別的探究。
直接在WINRAR中開啟DOCX檔案
當使用者直接在WINRAR中開啟壓縮包中的DOCX檔案時的程式樹如下:
WinRAR的當前路徑為RAR檔案所在資料夾。
Word的當前路徑為C:\Users\user\Documents,RAR中的DOCX檔案被釋放到%TEMP%臨時資料夾中。
wscript.exe被觸發執行後的當前路徑為WinRAR的路徑(也就是壓縮包所在的資料夾)。
".wsf:"被用於Url Scheme喚起wscript.exe,而在被喚起後又被當作普通目錄名去解析。’.wsf:’後的兩個’.’可替換為其他內容,不影響執行,但是如果去掉這兩個字元會在引數傳遞給wscript.exe時吞掉一個“../”導致找不到檔案。這是因為wscript.exe解析路徑的時候會將“.wsf:aa”整體當作一個host看待,後面拼接“../”就抵消了這層目錄關係,相當於當前目錄。
基於以上測試可知,當DOCX檔案在WinRAR中直接執行時雖然DOCX檔案釋放於臨時目錄,但wscript.exe的當前目錄即是RAR檔案所在的目錄。由此我們可以構造此情況下100%可用的URL Scheme(直接從當前路徑讀取RAR檔案):
'.wsf:aa/../exp.rar1?.wsf'
先解壓DOCX檔案再開啟
這種情況其實更復雜,也是公開的POC針對的場景,對應程式樹:
直接點選解壓後的DOCX檔案開啟時,Word的當前路徑為DOCX檔案所在路徑,wscript.exe的路徑也將保持一致。
值得注意的是,在一些情況下Word會將當前路徑設定為C:\Users\Document,這可能是公開POC中構造路徑的依據。但無論當前路徑是什麼,攻擊者都必須成功獲取(猜測)到RAR所在的資料夾。
漏洞修復
微軟在9月的補丁中已將MHTML中使用URL Scheme的問題修復,在ieframe.dll中加入了一個新的校驗函式IsValidSchemeName:
該函式將對URL Scheme進行校驗,諸如”.cpl”、“.wsf”這種以副檔名啟動應用程式的方式由於以字元“.”開頭無法通過該校驗函式的判斷。
總結
本文主要分析了CVE-2021-40444的Cabless利用鏈中存在的路徑問題以及對之前技術研判內容進行補充。通過分析CVE-2021-40444新利用鏈,可以看到該漏洞的根本原因是Office文件可以通過MHTML協議請求訪問遠端HTML頁面從而執行JavaScript程式碼,並最終通過Url Scheme啟動本地應用程式執行投遞的惡意程式碼,而中間投遞惡意程式碼的方式是可以替換的。同時也給了作為初學者的筆者很多啟發,在分析漏洞時需加入對根本問題的思考:在攻擊鏈中哪些部分是必不可少的,哪些是可以替換的。必不可少的部分作為漏洞根本問題要更深入地分析,而可以替換的部分要嘗試去挖掘可替換的新利用鏈。而對於防守方,把握漏洞本質與漏洞利用必經之路,方能以不變應萬變徹底控制各種漏洞利用變體。