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

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

缺陷编号:wooyun-2015-0117320

漏洞标题:逆向分析易付宝Android版用户帐号密码及手势密码清除(附Demo验证)

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

漏洞作者: Nicky

提交时间:2015-05-31 17:51

修复时间:2015-08-30 20:58

公开时间:2015-08-30 20:58

漏洞类型:用户敏感数据泄漏

危害等级:高

自评Rank:20

漏洞状态:厂商已经确认

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

Tags标签:

4人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

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

简要描述:

易付宝是苏宁云商旗下的一家独立的第三方支付公司,2012年获得了中国支付清算协会和中国金融认证中心颁发的“中国电子支付业最具潜力奖”。在苏宁易购的注册会员,同步拥有易付宝账户,可以在苏宁易购上直接给易付宝账户充值,付款时可用易付宝直接支付。用户对易付宝账户激活后,即可享受信用卡还款、水电煤缴费等各种应用服务。目前,易付宝注册会员数超过3000万,年交易量近二百亿元,已和全国20多家主流银行建立了深入的战略合作关系,线上支付覆盖全国100多张银行卡,成为金融机构在电子支付领域最为信任的合作伙伴之一。

详细说明:

审核来个闪电吧。。。
1.易付宝Android客户端最新版使用了SQLite数据库本地加密储存用户帐号密码及手势密码;
相关数据库文件位于/data/data/com.suning.mobile.epa/databases/目录下的
db_gesture(手势密码)
SUNINGEPA.DB(用户帐户信息)

S50531-153225.jpg


2.其加密内容如下:

sn1.png


sn2.png


3.先反编绎其APK安装包,分析登录密码的相关加密方法的入口位于
com.suning.mobile.epa.d.e类下的

sn3.png


4.继续跟踪ac.b(arg5.c())),发现传入的明文密码(arg5),使用进入com.suning.mobile.epa.utils.ac.b()方法进行加密:

sn4.png


经过分析这里用的是PBE算法加密,PBE——Password-based encryption(基于密码加密)。其特点在于口令由用户自己掌管,不借助任何物理媒体;采用随机数(这里我们叫做盐)杂凑多重加密等方法保证数据的安全性。如上就混杂了MD5与DES加密,是一种简便的加密方式。
5.但再分析发现这里加密用的salt是固定的(安全的做法是使用随机数生成):

sn5.png


6.这样我们在知道加密算法与密钥后,完全可以写出解密算法。关键代码如下:

public static byte[] a(byte[] arg4, String arg5, byte[] arg6) throws BadPaddingException, IllegalBlockSizeException, InvalidKeySpecException, NoSuchAlgorithmException {
Key v0 = ac.d(arg5);
PBEParameterSpec v1 = new PBEParameterSpec(arg6, 50);
Cipher v2 = null;
Log.i("ss","arg4"+arg4+" arg5"+arg5+" arg6"+arg6);
try {
v2 = Cipher.getInstance("PBEWITHMD5andDES");
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (NoSuchPaddingException e) {
e.printStackTrace();
}
try {
v2.init(2, v0, ((AlgorithmParameterSpec)v1));
} catch (InvalidKeyException e) {
e.printStackTrace();
} catch (InvalidAlgorithmParameterException e) {
e.printStackTrace();
}
return v2.doFinal(arg4);


7.此外,对于手势密码功能,其配置位于db_gesture文件中的table_gesture_password表
其中有处isGesturePasswordBeenActivated参数的值决定了手势密码的开与关(0为关闭1开启)
8.这样我们可以通过修改此文件来实现清除手势密码

漏洞证明:

具体漏洞利用见demo,黑客完全可以写出更WS的木马来盗取易付宝用户的帐号密码或者清除手势密码,这个漏洞对于支付类应用来说很严重。

sn6.png


链接: http://pan.baidu.com/s/1kT3mtN5 密码: 7zn5

修复方案:

使用更强的加密算法

版权声明:转载请注明来源 Nicky@乌云


漏洞回应

厂商回应:

危害等级:高

漏洞Rank:20

确认时间:2015-06-01 20:57

厂商回复:

感谢提交,已经转交相关部门处理,稍后送上1000元礼品卡。

最新状态:

暂无