文件上传绕过新技术:Outlook Web安全漏洞深度解析

本文详细分析了Outlook Web中通过复制粘贴操作绕过文件上传限制的安全漏洞,包含技术原理分析、漏洞利用演示(iframe嵌入和XSS攻击)以及完整的攻击测试流程,为安全研究人员提供有价值的参考。

文件上传绕过新技术

本文重点介绍文件上传绕过技术。

引言

在对Outlook Web进行安全研究期间,我遇到了一个异常行为,最终发现了一个安全漏洞。本文将解释我是如何发现这个问题、如何分析它以及它为什么会发生。该漏洞目前正在由微软处理,但发现和分析它的过程对其他安全研究人员可能很有用。本文主要关注如何绕过文件上传限制。

漏洞发现过程

最初,我想测试Outlook Web如何处理不同类型的文件。因此,我创建了一个test.svg文件,并通过两种不同的方式将其附加到电子邮件中:

第一种方法:附加文件(作为附件上传)

  • 当我将SVG文件作为附件上传时,微软使其可供下载。
  • 但在某些情况下,上传此类文件会被阻止。

第二种方法:复制/粘贴(Ctrl+C,Ctrl+V)文件到邮件正文

在这种情况下,文件不是作为下载提供,而是直接显示在邮件正文中!

这意味着SVG内容被嵌入到电子邮件中,没有任何安全过滤,并在接收方加载。

这种行为的差异对我来说似乎很不寻常,值得深入调查。

技术分析:为什么会发生这种情况?

Outlook Web中contentEditable和designMode的作用

Outlook Web对邮件编辑区域使用contentEditable功能。此功能允许将HTML内容直接插入邮件正文。

当我附加SVG文件时,微软的服务器会处理该文件并对其应用安全规则。

但是,当我复制粘贴SVG时,其内容作为邮件HTML正文的一部分插入,并且没有对其应用任何安全过滤器!

这意味着微软仅对附加文件应用安全限制,但对粘贴内容不执行相同的检查。

什么是contentEditable及其工作原理?

contentEditable是HTML中的一个属性,允许用户直接编辑任何HTML元素,类似于文本编辑器。

当您按下Ctrl+C和Ctrl+V时浏览器中会发生什么?

步骤1:复制(Ctrl+C)

当您从计算机选择文件(例如test.svg)并按Ctrl+C时,会发生以下情况:

  1. 操作系统将文件放入剪贴板 在Windows和macOS中,当您按下Ctrl+C时,与test.svg相关的数据存储在系统的剪贴板API中。 这些数据可以包括原始文件字节、元数据,甚至其MIME类型(例如image/svg+xml)。

  2. 剪贴板API保存信息 浏览器可以使用剪贴板API检查剪贴板中的内容。 根据数据类型,浏览器可以从剪贴板检索文本、图像甚至完整文件。

步骤2:粘贴(Ctrl+V)到Outlook Web

当您在邮件正文中按Ctrl+V时,会发生几个重要的事情:

场景1:粘贴到contentEditable字段(Outlook Web)

由于Outlook Web使用contentEditable,浏览器会检查复制的数据:

  • 浏览器查询剪贴板API:“剪贴板中是否有文件或HTML内容?”
  • 如果有文件(如test.svg),浏览器检查是否允许将该文件类型直接粘贴到contentEditable字段中。
  • 由于SVG是基于文本的文件(基于XML),浏览器可能将其内容视为HTML文本而不是文件。

因此,浏览器将test.svg的内容直接插入邮件正文——就像用户粘贴了HTML代码段一样!

这就是允许SVG中的任何恶意代码被执行的原因!

如何利用这种行为?

通过利用这种意外行为,我能够在SVG文件中嵌入代码,从而实现多种类型的攻击。我将展示两个示例:

a) SVG中的iframe

一个限制是它不会使用IP或HTTP加载地址,所以我必须购买一个域名并在以下地址托管一个虚假测试页面:https://yamikaza.com/fake.html

以下是嵌入的SVG代码:

1
2
3
4
5
6
7
<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>

此代码导致虚假页面在domain attachment.outlook.live.net内加载,这可能对用户显示为官方Microsoft页面。

b) 在SVG中执行JavaScript(XSS)

1
2
3
4
5
6
<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>

此代码证明可以在domain attachment.outlook.live.net上执行JavaScript。虽然此域无法访问outlook.live.com的cookie,但仍可以在此子域内运行JavaScript代码。

我是如何测试此攻击的?

  1. 保存恶意SVG文件
  2. 使用Ctrl+C和Ctrl+V将其粘贴到邮件正文中
  3. 发送电子邮件
  4. 右键单击图像并复制其URL

此链接由Outlook自动生成,并准备好发送给受害者进行利用。

结论

这项研究证明了上传文件和粘贴内容之间的差异如何导致安全漏洞。安全研究人员应始终调查意外行为,因为即使是最小的差异也可能导致重大的安全问题。

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计