网站建设、公众号开发、微网站、微商城、小程序就找牛创网络 !

7*24小时服务专线: 152-150-65-006 023-68263070 扫描二维码加我微信 在线QQ

漏洞公告团结互助,让我们共同进步!

当前位置:主页 > 技术资讯 > 网络安全 > 漏洞公告 >

我们的优势: 10年相关行业经验,专业设计师量身定制 设计师一对一服务模式,上百家客户案例! 企业保证,正规流程,正规合作 7*24小时在线服务,售后无忧

Windows CVE-2020-1313漏洞分析和利用:影响Windows 10和Windows Server Core产品

文章来源:重庆网站建设 发布时间:2020-08-13 15:46:12 围观次数:
分享到:

摘要:由于服务中的代码在对调用函数进行身份验证时遇到问题,因此它容易受到特权升级攻击,即,任何用户都被提升为本地系统权限。该漏洞将影响Windows 10和Windows Server Core产品。

  Windows Update Orchestrator服务是DCOM服务,Windows系统中的其他组件需要使用此服务来安装下载的Windows更新。但是,由于服务中的代码在对调用函数进行身份验证时遇到问题,因此它容易受到特权升级攻击,即,任何用户都被提升为本地系统权限。该漏洞将影响Windows 10和Windows Server Core产品。


漏洞分析


  UniversalOrchestrator服务(9C695035-48D2-4229-8B73-4C70E756E519),其代码在usosvc.dll中实现,并将在NT_AUTHORITY\SYSTEM权限下运行。如果有权访问BUILTIN\Users,则可以对其进行配置。即使此服务实现的COM枚举功能已被阻止,仍可以通过标准COM API调用访问IUniversalOrchestrator接口(c53f3549-0dbf-429a-8297-c812ba00742d)。下面给出了三种暴露的方法:

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.

计划任务的入口点将添加到注册表中:

blob.png

  指定的命令可以在晚上(大约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

  接下来,开始对上述方法进行逆向工程分析,发现了本文中描述的漏洞。


修复漏洞


  Microsoft已通过在2020年6月在漏洞补丁中添加CoImpersonateClient API调用来解决此问题。


在部署漏洞补丁之前,该方法的实现代码如下:

blob.png

部署漏洞补丁后,该方法的实现代码如下:

blob.png

  实际上,身份伪装是在处理请求的开始时完成的,因此用于更新注册表的API调用是在调用者的安全上下文中执行的。如果调用者没有对HKEY_LOCAL_MACHINE的高级访问权限,则将不会执行USO API方法。

本文由 重庆网站建设 整理发布,转载请保留出处,内容部分来自于互联网,如有侵权请联系我们删除。

相关热词搜索:Windows CVE-2020-1313 漏洞分析和利用 Windows Server Core

上一篇:Grafana CVE-2020-13379漏洞分析:重定向和URL参数注入漏洞的综合利用可以在任何Grafana产品实例中实现未经授权的服务器端请求伪造攻击SSRF
下一篇:密码重置帐户劫持漏洞:分析Mail.ru子域名网站cups.mail.ru

热门资讯

鼠标向下滚动