文件上传限制绕过新技术解析

本文详细分析了Outlook Web中文件上传限制的绕过技术,通过对比附件上传与直接粘贴SVG文件的不同处理机制,揭示了contentEditable属性导致的安全漏洞,并展示了如何利用SVG文件执行iframe嵌入和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的执行过程

第一步:复制(Ctrl+C)

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

  1. 操作系统将文件放入剪贴板
  2. 剪贴板API保存相关信息(包括原始文件字节、元数据甚至MIME类型)

第二步:在Outlook Web中粘贴(Ctrl+V)

在邮件正文中按Ctrl+V时:

  • 浏览器检查剪贴板数据
  • 由于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域内加载,对用户显示为微软官方页面。

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 设计