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

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

缺陷编号:wooyun-2016-0190773

漏洞标题:京东手机APP下个单彻底丧失账号控制权(需中间人环境)

相关厂商:京东商城

漏洞作者: 猎豹移动安全中心

提交时间:2016-03-30 19:37

修复时间:2016-05-15 18:50

公开时间:2016-05-15 18:50

漏洞类型:设计缺陷/逻辑错误

危害等级:高

自评Rank:20

漏洞状态:厂商已经确认

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

Tags标签:

4人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

2016-03-30: 细节已通知厂商并且等待厂商处理中
2016-03-31: 厂商已经确认,细节仅向厂商公开
2016-04-10: 细节向核心白帽子及相关领域专家公开
2016-04-20: 细节向普通白帽子公开
2016-04-30: 细节向实习白帽子公开
2016-05-15: 细节向公众公开

简要描述:

使用京东购物App下单,可能被黑客攻击,京东账户的登录密码、绑定手机和支付密码等都可以被攻击者更换,从而彻底丧失账户的控制权。

详细说明:

1. 京东部分连接使用了https,但是未校验证书,造成可以中间人攻击。
2. 京东在https中使用了明文传输支付密码
3. 当用户使用一次全球购之后,用户信息会绑定身份证号,虽然加密了,但是可以破解
4. 在用户支付页面源码内隐藏了用户完整的银行卡号,而不是前后几位。
综合上述四个条件,利用京东更改绑定手机的逻辑,可以更改绑定手机。
对于开通了金融相关的用户,更换绑定手机需要:1.支付密码。 2.身份证号码。 3.银行卡号码。
对于未开通金融的用户,只需要支付密码就可以更改绑定手机。
利用上述条件,加上网络监听盗取token,可以打开用户更换绑定手机界面进行更改绑定手机。
更改绑定手机后,可以利用新绑定的手机修改账号密码,直接登录账号。
登录账号后,可以修改支付密码和白条绑定电话(如果有的话)
至此,京东账号彻底拿下。除了白条还款人是原来用户外,其他所有皆不属于原用户。而且京东没有任何找回账号途径,只能尝试联系京东厂商重置账号。
=========================补充细节================================
在Android中,开发者可以自由实现SSL通信,然而很多企业出于业务性能的考虑以及安全意识的欠缺,软件在实现https通信时忽略了证书校验或证书校验不严格,致使用户的敏感数据在传输过程中有可能遭受中间人攻击而泄露。
Android中SSL通信的不安全实现一般来源于下面5处:
1.自定义TrustManager,接管了系统原有的证书校验,checkServerTrusted()函数却是空实现。
2.自定义hostnameVerifier,verify()函数却总是返回true。
3.使用AllowAllHostnameVerifier进行实例化,信任任意的hostname。
4.使用不安全的SSLSocketFactory来禁用所有的SSL安全校验。
5.WebView遇到证书错误直接使用proceed()函数忽略继续。
我们对京东金融、手机京东和京东钱包最新版本进行了安全审计,其中京东金融和手机京东存在严重的安全问题。
京东金融:
漏洞代码有6处,分三类:
一类是自定义TrustManager,checkServerTrusted()函数却是空实现。两处分别位于:
com.loopj.android.http.MySSLSocketFactory$1
com.loopj.android.http.SSLSocketFactoryEx$1
另一类是使用AllowAllHostnameVerifier实例化,信任任意hostname。两处分别位于:
com.loopj.android.http.AsyncHttpClient->getDefaultSchemeRegistry
com.loopj.android.http.MySSLSocketFactory->getFixedSocketFactory
第三类是WebView忽略证书错误漏洞。两处分别位于:
com.jd.jrapp.widget.JDWebView$1->onReceivedSslError
com.jd.jrapp.activity.web.WebActivity$MyJDWebViewClient-> onReceivedSslError

手机京东:
漏洞代码有一处,位于:com.jd.lib.now.Step3Activity->d函数中。
该函数使用了AllowAllHostnameVerifier进行实例化,使用https的请求全部忽略主机名校验。

针对手机京东的攻击流程分析:
演示视频:
http://v.youku.com/v_show/id_XMTUxNzI1NDQ2NA==.html 密码:CheetahMobile
攻击环境:
在无线局域网中,用户使用白条进行一次购物下单,使用ARP欺骗完成中间人攻击。
攻击思路:
由于漏洞的存在,所有通过https传输的敏感数据都可以被中间人截获。攻击者需要拿到用户的支付密码、历史收件人、sid、身份证号、银行卡号,便可以修改绑定的手机号和登录密码。
攻击细节:
1.https通道传输的支付密码是明文的,而http通道仅仅对支付密码做了一次简单的md5。

1.png


2.历史收件人、身份证号可以通过一次下单即可拿到。如下图右侧的响应包中,identityCard便是加密后的身份证号,通过逆向手机京东APP,很容易便可提取解密算法。Name字段便是收件人。
相关请求http://order.m.jd.com/client.action?functionId=getAddressByPin

2.png


3.sid和银行卡号
sid可以很容易在cookie中获取
利用银行卡支付接口,替换获取的sid,便可以打开如下页面。点击银行卡,更新卡信息,编辑,会出现更新银行卡信息页面。乍一看各种信息都有打码,无法利用,但是完整信息却在网页源码里以hidden形式出现。


3.png


4.至此所有信息获取完毕,然后利用sid和修改手机号的接口,更换用户绑定的手机号。这是sid的第二个用途。相关接口:
https://msc.jd.com/phone/loginpage/wcoo/index?sid=3a15cafbf295f6bdaaca44a4cb0c8f2w&source=2&businessType=0&returnUrl=
点击原手机不能接受验证码,输入捕获的支付密码,银行卡号和身份证号即可成功改换。

4.png


5.接下来修改用户登录密码,点击忘记密码,新绑定的手机接收验证码,输入捕获的历史收件人即可成功修改。

漏洞证明:

http://v.youku.com/v_show/id_XMTUxNzI1NDQ2NA==.html?firsttime=0
密码:CheetahMobile

修复方案:

1. 所有连接使用https,并严格校验证书
2. 取消明文传输的支付密码
3. 服务器取消下发完整的身份证号码和银行卡号码。
总结:客户端问题非常多,最好还是请个牛逼点的安全架构吧。

版权声明:转载请注明来源 猎豹移动安全中心@乌云


漏洞回应

厂商回应:

危害等级:高

漏洞Rank:10

确认时间:2016-03-31 18:40

厂商回复:

综合评估给予高风险,如有疑问我方会有专人跟进处理,感谢支持京东安全!

最新状态:

暂无