Windows CVE-2020-1313漏洞分析和利用:影响Windows 10和Windows Server Core产品
摘要:由于服务中的代码在对调用函数进行身份验证时遇到问题,因此它容易受到特权升级攻击,即,任何用户都被提升为本地系统权限。该漏洞将影响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.
计划任务的入口点将添加到注册表中:
指定的命令可以在晚上(大约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调用来解决此问题。
在部署漏洞补丁之前,该方法的实现代码如下:
部署漏洞补丁后,该方法的实现代码如下:
实际上,身份伪装是在处理请求的开始时完成的,因此用于更新注册表的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
热门资讯

自动发现IDOR(越权)漏洞的方法:使用BurpSuite中的Autozie和Autorepeater插件来检测和识别IDOR漏洞,而无需手动更改每个请求的参数
牛创网络: "自动发现IDOR(越权)漏洞的方法:使用BurpSuite中的Autozie和Autorepeater插件来检测和识别IDOR漏洞,而无需手动更改每个请求的参数
2020-01-30 14:04:47 )1621( 亮了
人机验证(Captcha)绕过方法:使用Chrome开发者工具在目标网站登录页面上执行简单的元素编辑,以实现Captcha绕过
牛创网络: " 人机身份验证(Captcha)通常显示在网站的注册,登录名和密码重置页面上。 以下是目标网站在登录页面中排列的验证码机制。 从上图可以
2020-01-26 12:44:09 )1483( 亮了
Nginx反向代理配置及反向代理泛目录,目录,全站方法
牛创网络: "使用nginx代理dan(sui)是http响应消息写入服务地址或Web绝对路径的情况。 写一个死的服务地址是很少见的,但它偶尔也会发生。 最棘手的是写入web绝对路径,特别是如果绝对路径没有公共前缀
2019-06-17 10:08:58 )804( 亮了
前端开发技术之ES6快速入门(一)
牛创网络: "说了这么多,我们现在就说下“三个点”的应用把,我们知道函数的参数是一个集合(arguments)并不是一个真正的数组。那么我们怎么才能在这个arguments中加一项呢??
2019-04-27 23:06:32 )752( 亮了
Sudo漏洞(CVE-2019-18634):在某些配置下,它可能允许低特权用户或恶意程序在Linux或macOS系统上以root用户身份执行命令。
牛创网络: "Sudo是常用的实用程序之一,预装在macOS设备和几乎所有UNIX或Linux操作系统上的重要命令,为用户提供了不同的特权,可在不切换操作环境的情况下运行应用程序或命令。
2020-02-05 11:49:49 )656( 亮了
微软发布KB4551762安全更新:Windows 10(SMBv3) 预授权RCE漏洞CVE-2020-0796
牛创网络: "微软发布KB4551762安全更新:Windows 10(SMBv3) 预授权RCE漏洞CVE-2020-0796。
2020-03-13 18:28:16 )645( 亮了
论网络营销对企业发展中的作用
牛创网络: "网络营销是指运营商基于电子信息技术,以计算机网络为媒介和手段进行的各种营销活动(包括网络研究,网络新产品开发,网络推广,网络分发,网络服务等)的总称。
2019-05-21 10:08:08 )600( 亮了
Kali Linux即将推出的2020.1版安全模型重大改革——默认非root用户
牛创网络: "Kali Linux团队在Twitter上宣布:“新的一年是进行重大改变的好时机,因此,我们宣布在即将发布的2020 1版本中,Kali安全模型也将进行重大改革——默认非root用户。”
2020-01-08 10:17:18 )592( 亮了
Apereo CAS 4.X反序列化漏洞:存在于登录的execution参数,漏洞分析及复现
牛创网络: "Apereo CAS 4 X反序列化漏洞:存在于登录的execution参数,漏洞分析及复现。
2020-02-10 12:34:11 )589( 亮了
微擎安装使用技巧-微擎安装的时候页面显示空白是怎么回事?
牛创网络: "我们在公众号开发中,有时候会用到微擎,那我们来看一下微擎安装的时候页面显示空白是怎么回事吧
2019-06-08 15:34:16 )523( 亮了