微软获知该bug存在90天后,Windows 10漏洞可能绕过Windows锁定策略并导致任意代码执行仍未修复。
在启用了用户模式代码完整性(UMCI)的系统上,可以利用.NET错误绕过针对COM类实例的Windows锁定策略检查,Google Project Zero团队的安全研究员James Forshaw。
这个问题在Windows 10S上被重现,但据说它会影响所有启用了UMCI的Windows 10版本。
安全研究人员解释说,这个漏洞的存在方式是当.NET COM对象被实例化时,WLDP COM Class锁定策略的行为。
该策略包含一个8到50个COM对象的硬编码列表,这些对象可以让开发脚本引擎实例化。因此,即使有人能够在一个允许的COM CLSID下注册一个现有的DLL,一个好的实现应该检查传递给DllGetObject 的CLSID是否符合所述内部列表,并防止攻击。
安全研究人员发现,当一个.NET COM对象被实例化时,传递给DllGetClassObject 的CLSID 仅用于在HKCR中查找注册信息,CLSID被抛弃,并创建.NET对象。
因此,攻击者可以添加注册表项(包括HKCU),以在允许的CLSID之一下加载任意COM可见类。
“这对类策略有直接影响,因为它允许攻击者添加注册表项(包括HKCU),该注册表项可以在允许的CLSID之一下加载任意COM可见类。因为.NET不关心.NET类型是否具有特定的GUID,您可以使用它来引导任意代码执行,“研究人员指出。
为了成功利用攻击者,攻击者可以使用诸如Forshaw的DotNetToJScript这样的工具,这是一款免费工具,允许用户生成一个引导任意.NET程序集和类的JScript。
Forshaw还发布了两个文件的概念验证:一个.INF来建立注册表和一个.SCT。后者是一个使用DotNetToJScript将不可信的.NET程序集加载到内存中以显示消息框的示例,但它可以用于更多。
1月19日,微软向微软报告了这个漏洞,当时该公司承认了这个漏洞。根据Project Zero的政策,供应商可以在90天内将缺陷修复,然后才能公开,而且微软没有达到这个问题的最后期限。
然而,这个错误并不重要,这是它公开发布的主要原因之一。
“这个问题在周二的补丁中并没有修复,因此这个问题已经过了最后期限。此问题仅影响启用了Device Guard的系统(例如Windows 10S),并且仅作为在此类计算机上获得持久代码执行的方式。这不是一个可以远程利用的问题,也不是一种特权升级,“安全研究人员解释说。
为了滥用此漏洞,攻击者需要在受影响的计算机上立足以安装所需的注册表项。操作系统中的远程代码执行缺陷可能会被滥用。
考虑到.NET框架中已知的Device Guard旁路尚未修复并且仍然可用,但安全漏洞的严重程度要低于所有已知绕过路径的情况下的严重程度。