今天小編分享的互聯網經驗:WPS Office從路徑穿越到遠程代碼執行漏洞(CVE-2024-7262)分析與復現,歡迎閲讀。
漏洞概述
WPS Office 程式 promecefpluginhost.exe 存在不當路徑驗證問題,允許攻擊者在 Windows 上加載任意 Windows 庫檔案。該漏洞已被 APT-C-60 攻擊者利用,當用户打開 MHTML 格式的文檔時,只需單擊一個惡意制作的超鏈接,即可執行攻擊者指定的惡意庫檔案,實現遠程代碼執行。
影響範圍
WPS Office 版本 12.2.0.13110-12.2.0.16412
復現環境
作業系統:Win10 10.0.18363.592 WPS Office 版本:WPS Office 12.2.0.13110
分析過程
WPS 程式安裝後注冊了一個名為 ksoqing 的自定義 URL 協定,系統資料庫路徑為:計算機 HKEY_CLASSES_ROOTksoqingshellopencommand,其内容為 "C:Users【用户名】AppDataLocalKingsoftWPS Office12.2.0.13110office6wps.exe" /qingbangong "%1"。即訪問以 ksoqing 開頭的 URL 協定時,将啓動 wps.exe 程式,并傳遞 /qingbangong 參數,%1 則被替換為以 ksoqing 開頭的協定鏈接,一并作為 wps 啓動的參數。
此時 wps.exe 程式解析參數 /qingbangong,并将 ksoqing 鏈接内容一并發送到 C:Users【用户名】AppDataLocalKingsoftWPS Office12.2.0.13110office6wpscloudsvr.exe
wpscloudsvr.exe 中的 qingbangong.dll 解析自定義 URL 鏈接内容。當 type 參數為 ksolaunch 時,将啓動 launchname 參數指定的程式,參數使用 base64 編碼。
launchname 參數指定的程式啓動時,wpscloudsvr.exe 會将 URL 鏈接中的 cmd 參數使用 base64 解碼,然後傳遞給它。
如果 launchname 參數指定的是 promecefpluginhost.exe,該程式啓動後,将加載 ksojscore.dll,然後解析命令行中的 -JSCefServicePath。
這個參數可以指定一個檔案名,這個檔案會被 kso_qt::QLibrary::load 函數加載到内存執行。默認情況下,如果只是指定一個檔案名,會按照 DLL 搜索順序搜索和加載這個檔案,比如加載同 EXE 目錄下指定的 DLL 檔案。但是這個參數未做任何過濾,可以指定 ".." 包含目錄的路徑,存在路徑穿越漏洞,可以加載任意指定的 DLL 檔案,最終實現任意代碼執行。
使用路徑穿越的漏洞可以加載指定 DLL 檔案,但這還不夠。APT-C-60 攻擊者使用 MHTML 格式的 xls 電子表格檔案,利用其特性,實現下載遠程 DLL 檔案的目的。WPS 支持 MHTML 格式的文檔,這種文檔可以包含 HTML、CSS 和 JavaScript 等檔案,方便在浏覽器中顯示文檔。
文檔中可以使用 img 标籤,指定遠程 DLL 檔案。
當文檔被打開時,wps 使用 _XUrlDownloadToCacheFile 函數下載檔案到 temp 目錄下的 wpsINetCache 目錄中。
下載後的檔案名,使用的是下載鏈接(UNICODE 編碼)的 MD5 值。
最終配合上述路徑穿越漏洞,在 -JSCefServicePath 參數中指定下載的檔案名,實現遠程代碼執行。這裏還有一個小技巧,因為下載後的檔案名并沒有 .dll 後綴,而在加載的時候如果沒有指定 .dll 後綴,會自動補上該後綴再加載。為了避免在加載的時候找不到指定檔案導致失敗,在 -JSCefServicePath 參數中指定下載的檔案名時,需要在檔案名最後額外加個 "."。
漏洞復現
新建 xls 格式的文檔,添加超鏈接,超鏈接可任意,并另存為 MHTML 格式的文檔。
根據遠程 DLL 的下載鏈接,使用 poc.py 計算下載後的檔案名,并最終生成 ksoqing 協定鏈接。
将 ksoqing 鏈接替換導出的 MHTML 格式文檔中的超鏈接。
再根據遠程 DLL 的下載鏈接,添加 img 标籤,實現遠程下載 DLL 檔案。
開啓遠程 DLL 下載服務,然後打開 MHTML 文檔,點擊超鏈接,觸發漏洞。
參考鏈接
ddpoc 鏈接:
https://www.ddpoc.com/DVB-2024-8279.html
https://nvd.nist.gov/vuln/detail/CVE-2024-7262