随着微信微博等社会化媒体的火热,第三方登录迅速成为一种快捷注册的方式,社会化分享也成为一种知识快速传播的渠道。在移动端,几乎大多数应用都接入了第三方登录或者分享组件,尤其是微信、QQ、微博三大巨头。这三者都提供了开放平台和SDK来帮助开发者接入这些功能,然而这些真的安全吗?
一、漏洞发现
先说说场景吧,由于业务要求,需要对分享控件做了一次大的升级和重构,然后发现我们分享组件使用的是第三方的ShareSDK(专门封装分享API的组件,大部分童鞋应该都听说过),这本来也没什么问题。
然后,重构过程中遇到一个难以理解的事情,在工程assets目录下面有一个名为ShareSDK.xml的文件,在打开这个文件之后,我震精了,喝到口的咖啡全喷到了键盘上,文件内容是这样的:
第三方开放平台的应用注册信息都是明文写在这个文件中的,包括重要的AppId和AppSecret(图内容来自是ShareSDK官方demo)。这个时候,第一个考虑的问题还仅仅是隐私暴露,并没有考虑到安全漏洞方面。
当然,接下来就去看这样设计的原因,原来是ShareSDK内部调用第三方应用授权分享需要这些应用注册信息,为了方便开发者接入,所以采用这种文件静态注册的方式。
作为一个开发者老司机,无论是直觉上还是开发原则上,都隐隐觉得这种方式是有严重问题的。为什么呢?因为assets目录在打包过程中是原封不动地打进APK包内的,任何人不需要任何反编译工具就能直接从APK包内提取出来。那么,如果直接提取出来放到另一款应用中是不是意味着……
想到这里,已经惊出一身冷汗了,世纪大坑!世纪大坑!世纪大坑啊!
接下来就是验证的过程,步骤非常简单。
1、找到一款接入ShareSDK组件的应用,将其安装包APK内的ShareSDK.xml解压提取出来。
2、直接将项目的ShareSDK.xml替换为上一步的文件。
3、调用分享
验证结果:除了微信相关的不能分享,QQ和新浪都分享成功了,并且显示分享内容来自XX应用,XX应用就是我们提取的那款应用了。
二、漏洞原因
当然,如果仅仅是这样,只能说是小漏洞,波及范围并不广。可惜事与愿违,市场上90%以上的应用都在受灾范围内,原因后面分析。
为了帮助理解,我们先来谈一谈社会化分