网易首页 > 网易号 > 正文 申请入驻

一个冷门类型混淆漏洞CVE-2017-0213的技术分析

0
分享至

1. 引言

CVE-2017-0213 是一个比较冷门的COM 类型混淆 (Type Confusion)漏洞。巧妙的利用该漏洞,可以实现本地的提权。该漏洞由著名的Google Project zero 发现。漏洞信息原文可参见【1】

然而原文对漏洞的描述有些过于任性,尽管笔者熟悉好几国英文J,反复读了好几遍还是觉得云山雾罩。因此决定亲自分析下,和读者共同分享一下。

2. 技术分析 2.1 DCOM 简介

这个漏洞要从DCOM 谈起了。相信大家对Windows的组件对象模型(COM) 都已经非常熟悉了。而DCOM可能相对来说要陌生一些。DCOM是 分布式的COM, 类似于CORBA, 也就是说调用的COM 可以在远程主机上。

DCOM的详细信息可参见

https://msdn.microsoft.com/en-us/library/cc226801.aspx

在COM模型中,我们知道所有的COM 接口都要继承 IUnkown 接口。通过QueryInterface函数,可以查询任意接口。

而在DCOM模型中,对应于IUnknown的接口为IRemunkown 和IRemUnkown2 两个远程接口。

相应的,QueryInterface对应的方法为:

IRemUnknown::RemQueryInterface([in] REFIPIDripid,

[in] unsigned long cRefs,

[in] unsigned short cIids,

[in, size_is(cIids)] IID* iids,

[out, size_is(,cIids)] PREMQIRESULT* ppQIResults

)

IRemUnknown2::RemQueryInterface2([in]REFIPID ripid,

[in] unsigned short cIids,

[in, size_is(cIids)] IID* iids,

[out, size_is(cIids)] HRESULT* phr,

[out, size_is(cIids)] PMInterfacePointerInternal* ppMIF

)

两者的主要区别在于返回的对象类型上。

IRemUnknown::RemQueryInterface 通过最后一个参数[out,size_is(,cIids)] PREMQIRESULT* ppQIResults 来返回对象。

看一下PREMQIRESULT的定义

typedef struct tagREMQIRESULT {

HRESULT hResult;

STDOBJREF std;

} REMQIRESULT;

typedef [disable_consistency_check]REMQIRESULT* PREMQIRESULT

STDOBJREF 通常包含OXID,IPID, OID 这些信息。

而 IRemUnknown2::RemQueryInterface2

通过最后又一个参数PMInterfacePointerInternal 来返回对象.

而 PMInterfacePointerInternal 的定义

typedef [disable_consistency_check]MInterfacePointer* PMInterfacePointerInternal;

根据MSDN的解释 (https://msdn.microsoft.com/en-us/library/cc226826.aspx)

MInterfacePointer is an NDR-marshaled structure that MUST contain a hand-marshaled OBJREF.

MInterfacePointer是一个NDR装组(marshal)的对象引用。

不难看出,IRemUnknown::RemQueryInterface 只是返回了对象的部分信息,而IRemUnknown2::RemQueryInterface2返回了整个对象的信息。

2.2 漏洞分析

CVE-2017-0213的问题出现在 IRemUnknown2::RemQueryInterface2的 代码中。

代码调用CStdMarshal::Finish_RemQIAndUnmarshal2来完成对返回对象解组(Unmarshal)。

对于每一个MInterfacePointer指针,函数 CStdMarshal::UnmarshalInterface 对其进行解组,即从 IStream的数据中解组出相应的接口。问题出现在这里 ,解组的时候,解组代理是根据IStreamde数据中的OBJREF(IID) 来解组的,而并非 IRemUnknown2::RemQueryInterface2 中指定的 IID 。也就是说,这里没有对OBJREF 的IID 和IRemUnknown2::RemQueryInterface2中指定的IID 进行一致性检查。,如果在 IStream中的IID 和调用 IRemUnknown2::RemQueryInterface2 时指定的IID 不一致的时候,就会发生类型混淆。

2.3 漏洞利用

类型混淆的漏洞通常可以通过内存损坏的方式来进行利用.然而漏洞发现者在利用时,并未采用内存损坏的方式来进行漏洞利用。按照漏洞发现者的说法,内存损坏的利用方式需要对内存进行精心布局,即便如此 ,在Windows 10上也可能会触发CFG(Control Flow Guard)。

漏洞发现者另辟其径,采用了一种基于LoadTypeLibrary来利用的方法。

背景知识:

如果将COM 接口注册PSOAInterface或者PSDispatch后,oleaut32.dll 会查找注册的Type Library信息(存放在注册表中),如果找到的话,将调用LoadTypeLibrary 来加载 Type Library. TypeLibrary在加载的时候,有个很有趣的行为: 首先会按GUID查找,如果查找失败的话,会按文件名来查找。如果按文件名查找也失败的话,这时会按照Moniker 来查找。这时,我们只需将包含scriptlet的Moniker注入到一个Type Library 文件中。就可以执行这段scriptlet。漏洞发现者采用的ScriptLet如下图所示。

现在我们知道,可以利用这个漏洞来成功加载JS, 从而达到执行任意文件的目的。

那么如何来利用这个漏洞来进行提权呢? 我们注意到,BITS 服务运行在 SYSTEM 完整性等级(IntegrityLevel)上。如果调用其

IBackgroundCopyJob::SetNotifyInterface(IUnknown *pNotifyInterface)

并传入一个精心构造的COM 接口,引发类型混淆,便可利用该漏洞来加载一个TypeLibrary。 这里,漏洞利用程序选择了COM 接口 IID_ITMediaControl(GUID {C445DDE8-5199-4BC7-9807-5FFB92E42E09}),其TypeLibGUID为 {21D6D480-A88B-11D0-83DD-00AA003CCABD}, 注册的DLL为 tapi3.dll。那么如何才能达到加载自己定义的tapi3.dll的目的呢?Tapi3.dll位于 %system32%目录下,覆盖此文件显然不可能。漏洞利用程序使用了这样一个技巧:利用NtCreateSymbolicLink重定向C:\ 到当前目录 。在当前目录下创建windows\system32\tapi3.dll即可。具体过程可参见漏洞利用源代码【2 】

最后上一张成功利用的截图。Windows 7 SP1 下成功弹出一个admin权限的cmd窗口。

“天下漏洞,唯冷不破”。CVE-2017-0213的无论从挖掘和利用,感觉都有些剑走偏锋,正属于这种比较冷门的一类。这种漏洞似乎难以通过fuzzing的方式来发现。通常这种漏洞的发现,需要对Windows的代码非常熟悉。而从漏洞的利用的角度来看,思路亦是非常巧妙。从这个漏洞的发现到利用,可见漏洞发现者在Windows 操作系统方面的造诣非同一般。

4. 参考文献

1. https://bugs.chromium.org/p/project-zero/issues/detail?id=1107

2. https://github.com/WindowsExploits/Exploits/blob/master/CVE-2017-0213/Source/CVE-2017-0213.cpp

*本文作者:兰云科技银河实验室,转子请注明来自 FreeBuf.COM

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
华为韬(τ)定律,可能会载入史册

华为韬(τ)定律,可能会载入史册

创始人笔记
2026-05-26 21:45:41
扔吸管女子暴怒原因曝光,警方已对其拘留五日罚款五百

扔吸管女子暴怒原因曝光,警方已对其拘留五日罚款五百

映射生活的身影
2026-05-26 02:21:04
许家印第二!又一“大佬”跑路被抓,诈骗989亿,超5万人血本无归

许家印第二!又一“大佬”跑路被抓,诈骗989亿,超5万人血本无归

牛牛叨史
2025-02-10 18:02:09
稻城亚丁景区截断省道由财政出资维护,观光费如今开始打折

稻城亚丁景区截断省道由财政出资维护,观光费如今开始打折

映射生活的身影
2026-05-26 17:30:19
秦启光任重庆市酉阳县委书记

秦启光任重庆市酉阳县委书记

中国经济网
2026-05-26 09:28:05
那些看起来"没事"的女人,其实早就耗空了

那些看起来"没事"的女人,其实早就耗空了

月亮打烊了发
2026-05-26 00:07:26
山西矿难3天,荒唐的一幕发生,央媒发声,原因太令人愤怒

山西矿难3天,荒唐的一幕发生,央媒发声,原因太令人愤怒

每一次点击
2026-05-26 07:54:25
乌克兰复仇反攻莫斯科!摧毁俄罗斯关键的弗托罗沃能源枢纽

乌克兰复仇反攻莫斯科!摧毁俄罗斯关键的弗托罗沃能源枢纽

项鹏飞
2026-05-25 19:55:49
小S分享归宁宴上的大S, 大S穿旗袍戴水晶吊坠,拿相机笑容灿烂

小S分享归宁宴上的大S, 大S穿旗袍戴水晶吊坠,拿相机笑容灿烂

素素娱乐
2026-05-26 20:52:22
你认可吗!手机系统流畅度最新排名:OPPO继续第一、小米澎湃OS升至第3

你认可吗!手机系统流畅度最新排名:OPPO继续第一、小米澎湃OS升至第3

快科技
2026-05-26 16:26:50
曝央视要价太高!抖音放弃世界杯分销版权 小红书赌博拿下2项权益

曝央视要价太高!抖音放弃世界杯分销版权 小红书赌博拿下2项权益

风过乡
2026-05-26 06:38:15
已致204死! 世界杯或引爆疫情? 新病毒外溢10国, 死亡率最高90%!

已致204死! 世界杯或引爆疫情? 新病毒外溢10国, 死亡率最高90%!

北国向锡安
2026-05-26 09:59:27
中小学生2026年入学将迎来“大调整”!教育部新规,9月1日将实行

中小学生2026年入学将迎来“大调整”!教育部新规,9月1日将实行

妍妍教育日记
2026-05-26 10:45:03
我在非洲干废品回收,娶了一对姐妹,年赚三百万,如今感觉快疯了

我在非洲干废品回收,娶了一对姐妹,年赚三百万,如今感觉快疯了

千秋文化
2026-05-01 19:00:05
不到三年,他说这样的事情发生了七次,最近这次,孩子吓坏了,他也吓坏了

不到三年,他说这样的事情发生了七次,最近这次,孩子吓坏了,他也吓坏了

北青网-北京青年报
2026-05-26 12:03:39
研究表明:性生活次数不达标,不管男女容易早衰且癌症风险增高!

研究表明:性生活次数不达标,不管男女容易早衰且癌症风险增高!

番外行
2026-05-11 08:49:20
乌克兰通过法律程序,将“俄乌战争”,命名为“乌克兰独立战争”

乌克兰通过法律程序,将“俄乌战争”,命名为“乌克兰独立战争”

我心纵横天地间
2026-01-22 18:41:25
世界正在发生一个极其恶心的变化!印度最终可能会成为地球大患

世界正在发生一个极其恶心的变化!印度最终可能会成为地球大患

世界圈
2026-05-04 16:42:27
顶不住了?王健林传噩耗,抛售万达仅开胃菜,王思聪的话有人信了

顶不住了?王健林传噩耗,抛售万达仅开胃菜,王思聪的话有人信了

花小猫的美食日常
2026-05-27 00:40:30
中国看得清清楚楚:访问印度,鲁比奥一句话点评中印,此人太阴了

中国看得清清楚楚:访问印度,鲁比奥一句话点评中印,此人太阴了

观史搜寻着
2026-05-27 01:30:17
2026-05-27 03:19:00
FreeBuf
FreeBuf
互联网安全新媒体
5548文章数 1757关注度
往期回顾 全部

头条要闻

武契奇获授"友谊勋章":父母特意打电话 我们都哭了

头条要闻

武契奇获授"友谊勋章":父母特意打电话 我们都哭了

体育要闻

上赛季差点降入英甲,下赛季要踢英超了

娱乐要闻

台媒贴脸!S妈被问大S嗑药当场沉默

财经要闻

中国铝行业爆单 下一个“煤炭”大周期?

科技要闻

中国AI要向外卷,而不只是做第二个OpenAI

汽车要闻

涉水加强 福特烈马亚马逊限量版上市 售价39.98万

态度原创

本地
手机
时尚
教育
公开课

本地新闻

用云锦的方式,打开江苏南京

手机要闻

荣耀600系列线下上手:体验之后,说说真实感受

蓝色系穿搭太适合夏天了!快来看看这些穿搭示范,美得不重样

教育要闻

不是知错了,是怕了!家长投诉老师,被老师起诉,哭着求老师谅解

公开课

李玫瑾:为什么性格比能力更重要?

无障碍浏览 进入关怀版