本文中,作者通过发现Shazam应用APP深度链接(deeplink)运行机制中存在的一个漏洞,利用其中的开放重定向和js接口安全问题,可实现对Shazam应用APP用户的特定信息获取。Shazam是苹果公司旗下软件,其应用能根据取样片段识别出对应的歌曲、电影、广告和电视节目(听音识曲),该应用可支持Windows、macOS和智能手机。
漏洞说明
2018年底,我发现了Shazam应用APP的一个漏洞,攻击者可以构造一个URL链接让受害者执行点击,即可获取到受害者的精确地理位置。该漏洞影响非常严重,将近1亿Shazam用户受此影响,攻击者利用漏洞构造的一条链接,在受害者点击之后,除可获取受害者的精确地理位置之外,还能实现对受害者手机设备某些特定功能的访问。
其实,经过进一步的精心设计,该漏洞完全可以形成一个“零点击漏洞”(zero click vulnerability),但苹果和谷歌却根据他们的众测规定拒绝了该漏洞,可是,漏洞最终却被修复了。
我当时给Shazam安全团队上报漏洞的时间是2018年12月(即Shazam被苹果收购的三个月后),我被引导直接向security@apple.com进行漏洞情况上报,经过一番协调反复,漏洞最终于2019年3月26日修复。之后,又经过8个月,苹果才认定该漏洞有效,但却声称该漏洞不在他们的众测规定范围内,不予支付漏洞赏金。另外,Google Play应用商店安全项目也回复我说该漏洞中泄露的用户数据影响不大,不予奖励。
该漏洞最终给予的漏洞编号为CVE-2019-8791和CVE-2019-8792,影响Android 和 iOS手机上的Shazam应用。CVE-2019-8791的官方描述是:Shazam APP在URL解析时存在问题,攻击者可以通过构造特定URL链接实现开放重定向(open redirect);CVE-2019-8792的官方描述是:攻击者可以通过构造特定URL链接实现任意JS代码执行。
漏洞情况
Shazam在整个APP应用中用到了深层链接deeplink作为导航操作,我发现了一个特殊的导出深层链接,它负责在webview控件中加载网站,该深层链接无需对其参数数值进行验证,允许嵌入外部资源。而且,它其中的webview控件包含了一些js接口,通过这些js接口可与Android 或 iOS 手机API通信,从而检索出用户手机中包含地理数据在内的一些特定信息内容。
该深层链接样式为shazam://launchurl?url=,其中的url参数可以是一个网站或是一个js格式脚本。一旦其中的webview控件加载后,Shazam APP将会附加运行一个名为WebViewJavascriptBridge的js接口,该接口可通过窗口对象访问到。
经对Shazam APP反编译,并分析了其中的js接口,我发现了两个方法函数setMessageHandler 和 sendMessage。可以通过重写setMessageHandler函数,捕获到通过sendMessage函数发出请求的响应。setMessageHandler函数包含了type 和 data两个参数组成的JSON对象。经过一番研究测试,我很快写出了一段POC代码:
代码语言:javascript复制<html>
<script>
window.WebViewJavascriptBridge.setMessageHandler(function(e) {
alert(JSON.stringify(e));
})
</script>
<button onclick="window.WebViewJavascriptBridge.sendMessage(JSON.stringify({type:'aboutBridge',data:{}}));">Device Info</button>
<br><br>
<button onclick="window.WebViewJavascriptBridge.sendMessage(JSON.stringify({type:'location',data:{}}));">GPS</button><br><br>
</html>
漏洞利用流程
1、攻击者向受害者发送构造好的URL链接; 2、受害者点击链接并加载打开了Shazam APP应用; 3、Shazam APP应用加载webview控件并执行攻击者嵌入的Payload; 4、受害者地理位置等其它信息即被攻击者窃取,发送到攻击者控制的服务器中。
漏洞影响
通过简单的URL链接构造,攻击者即可利用Shazam APP应用隐蔽简单地窃取受害者相关信息。对恶意攻击者或正义执法者来说,该漏洞不失为一个好的利用手段。但对用户来说,这却是涉及到上亿用户的隐私问题,因此,我选择了漏洞上报,但遗憾的是最终却不符合他们所谓的众测范围和规定,无所谓了,修复就好,我将继续深挖研究。