深入剖析CVE-2021-40444-Cabless利用鏈
背景
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啟動本地應用程式執行投遞的惡意程式碼,而中間投遞惡意程式碼的方式是可以替換的。同時也給了作為初學者的筆者很多啟發,在分析漏洞時需加入對根本問題的思考:在攻擊鏈中哪些部分是必不可少的,哪些是可以替換的。必不可少的部分作為漏洞根本問題要更深入地分析,而可以替換的部分要嘗試去挖掘可替換的新利用鏈。而對於防守方,把握漏洞本質與漏洞利用必經之路,方能以不變應萬變徹底控制各種漏洞利用變體。