当前位置:WooYun >> 漏洞信息

漏洞概要 关注数(24) 关注此漏洞

缺陷编号:wooyun-2015-0118462

漏洞标题:通过苏宁易购客户端控制目标手机可以远程实现

相关厂商:江苏苏宁易购电子商务有限公司

漏洞作者: 小手冰凉

提交时间:2015-06-05 17:23

修复时间:2015-09-03 17:56

公开时间:2015-09-03 17:56

漏洞类型:远程代码执行

危害等级:高

自评Rank:20

漏洞状态:厂商已经确认

漏洞来源: http://www.wooyun.org,如有疑问或需要帮助请联系 [email protected]

Tags标签:

4人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

2015-06-05: 细节已通知厂商并且等待厂商处理中
2015-06-05: 厂商已经确认,细节仅向厂商公开
2015-06-08: 细节向第三方安全合作伙伴开放
2015-07-30: 细节向核心白帽子及相关领域专家公开
2015-08-09: 细节向普通白帽子公开
2015-08-19: 细节向实习白帽子公开
2015-09-03: 细节向公众公开

简要描述:

苏宁易购客户端漏洞合集,远程命令执行,信息窃取,用户克隆等
把这些漏洞合起来就能指哪打哪,控制指定目标的手机了

详细说明:

0x00 背景&测试环境
老是提交一些撞库漏洞都给小厂商而且感觉技术含量不高,这次打算找个应用好好研究研究,看到一个经常提供1000礼品卡给力的厂商-苏宁易购,果断下载安卓客户端走起。发现了一些问题综合起来最后达到的效果就是发送给好友一个苏宁的链接(m.suning.com),对方打开如果对方装有苏宁易购客户端就能够控制对方,包括克隆对方的账号,获得对方手机信息,发短信等等。。
目标 苏宁易购最近客户端(suning_10287.apk)
环境 未root安卓4.2机器和4.2模拟器
0x01 私有短网址生成过程过滤不严
苏宁有自己的短网址生成方式,在用户分享商品时就会触发,会按照用户的id和商品网址生成短网址,过程中会检测网址中是否包含”suning.com“,包含就可以生成,否则拒绝。这种检测方式很容易绕过url结尾加上#suning.com就可以
测试地址:http://m.suning.com/dl/qJeA5UsD.html
请求数据包精简后如下:

POST /getShortUrl.do HTTP/1.1
Accept-Encoding: default
Content-Length: 83
Content-Type: application/x-www-form-urlencoded
Host: m.suning.com
Connection: Keep-Alive
url=http://www.wooyun.org/whitehats/%E5%B0%8F%E6%89%8B%E5%86%B0%E5%87%89#suning.com


建议修改成首先获得域名,然后匹配域名后缀。
ps: 某讯在https检测时也用了类似的方式。。。。。
0x02 Intent接口过滤不严
苏宁易购客户端提供以下Intent接口

捕获.PNG


这个接口提供的一个功能就是使用苏宁内嵌的浏览器打开指定网址,这里依然没有对目标网址进行过滤。
这个接口调用方式如下

suning://m.suning.com/index?adTypeCode=1002&adId=http://m.suning.com/


测试地址:http://31.220.48.93:28214/sn/jm.html 使用安装有苏宁易购的手机浏览器打开这个网址就会跳转到苏宁然后打开乌云,如图

捕获.PNG


建议修复同上
0x03 用户可被克隆
正常用户登录后,数据区会产生比较多的数据,经过反测试发现

shared_prefs\EbuyPreferences.xml

这个文件包含用户的所有信息,如果能获得用户的这个文件就能克隆用户。测试方式,在A机器上登录用户,复制出EbuyPreferences.xml文件。在B机器上打开一次苏宁易购,然后用刚才的EbuyPreferences.xml覆盖同名文件,再打开苏宁易购就已经是A的身份了,修改昵称发现操作正常,确定有权限。
修复的话匹配机器码或者mac都可以。
谁有权限跑到别人手机里去复制文件?就算能在别人手机复制文件,但是没root权限也不能跨应用读文件,这个似乎不好利用,别急,继续看。
0x04 远程命令执行
这个漏洞确实比较早了,具体看这里http://drops.wooyun.org/papers/548。在android 4.2之后就需要在被js调用的方法上强制增加@JavascriptInterface 否则不能调用,但是android同时存在一个妥协的办法就是如果程序允许在低版本的androd API上运行,则不用遵守@JavascriptInterface这个规则,以为这远程命令执行漏洞依然存在。
苏宁易购的客户端就属于后者,所以存在远程命令执行的潜在可能,但是需要找到传递给js的object才可以确定。经过反编译查找后发现如下类

com.suning.mobile.ebuy.host.webview.SNNativeClientJsApi


在部分webview中这个类传递给了js,name为“SNNativeClient”。同时还存在其他几个就不在一一赘述。而这个webview正是0x02中我们可控网址的那个webview,这样就构成了命令执行的必要因素了。
测试:在浏览器中访问http://31.220.48.93:28214/sn/ls_0.html 就能跳转到苏宁并列出sd卡的目录如图

捕获.PNG


有了命令执行就能够发短信(利用方式https://github.com/jjkakakk/ajihttpd/blob/master/sms.html)读文件等等,而这些命令的执行权限正好是苏宁易购本身,所以正好能够配合0x03读取用户数据文件
修复方式,使用android的机制,增加JavascriptInterface声明,提高版本。
有了这四个漏洞就能实现前面说的指哪打哪了,这里我们演示远程用户克隆。
根据0x04构造能够读取

shared_prefs\EbuyPreferences.xml

直接通过nc发送到远程机器的exp,安卓中默认有nc。
exp:http://31.220.48.93:28214/sn/rd_1.html(注意修改代码中的目标ip和端口)
在根据0x02构造跳转页面:http://31.220.48.93:28214/sn/rd_0.html
再根据0x01生成苏宁网址:http://m.suning.com/dl/qJdHtSu1.html
将http://m.suning.com/dl/qJdHtSu1.html发送给目标用户,对方打开后收到用户数据文件,然后根据0x03替换后成功克隆账户,如图

捕获.PNG


所有html代码和python代码附后
ps:看你还敢不敢随便打开别人发你的链接了!

漏洞证明:

如上

修复方案:

如上

版权声明:转载请注明来源 小手冰凉@乌云


漏洞回应

厂商回应:

危害等级:高

漏洞Rank:20

确认时间:2015-06-05 17:55

厂商回复:

先行确定,转交移动客户端部门,稍后给出礼品卡奖励金额。

最新状态:

暂无