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

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

缺陷编号:wooyun-2014-057171

漏洞标题:如家酒店Android客户端程序支付漏洞进敏感信息泄漏

相关厂商:如家酒店集团

漏洞作者: 路人甲

提交时间:2014-04-15 15:57

修复时间:2014-07-14 15:57

公开时间:2014-07-14 15:57

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

危害等级:中

自评Rank:9

漏洞状态:厂商已经修复

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

Tags标签:

4人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

2014-04-15: 细节已通知厂商并且等待厂商处理中
2014-04-15: 厂商已经确认,细节仅向厂商公开
2014-06-09: 细节向核心白帽子及相关领域专家公开
2014-06-19: 细节向普通白帽子公开
2014-06-29: 细节向实习白帽子公开
2014-07-14: 厂商已经修复漏洞并主动公开,细节向公众公开

简要描述:

1.如家酒店官方版Android客户端程序的集成支付宝支付功能存在漏洞,原因是支付信息硬编码并且应用代码没有经过混淆和反重打包保护
2.客户端程序中支付成功的回调地址所在Web服务器存在目录遍历漏洞

详细说明:

1.掌上如家App集成了支付宝支付功能,支付所需的商家ID,商户签名私钥都硬编码在代码中并且直接是明文

public class PartnerConfig
{
public static final String ALIPAY_PLUGIN_NAME = "alipay_plugin_20120428msp.apk";
public static final String PARTNER = "2088011831474463";
public static final String RSA_ALIPAY_PUBLIC = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDjYGtHCa4IUMruec0EElEwnqRb0XP2MlcUNQuT ptuUP+7DB6o4kZn70wNFYD/sdt3ovsc9JeAVbVgRxYo3E+oYqoBuxOvGLDKWo/27/3Dr79cbk/Se o2RTNHcwHA75bmDC5QApxZKlnAF5nUWfi8keT5ODBm7lyP778kJ79CktGQIDAQAB";
public static final String RSA_PRIVATE = "MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBANA6mEftVKQXspVuALBjaCdxh666jnwXVE06SDY70hyzUtrcm/IXaXRZZD44URXSh6Hb0Waxl+/ajtXhD3c3xyFBIuGxL9lpWph79B37dVFUUpbI3aZo8PD3HJDXj3Yfl/jRrcGI8ZiuHX/Bwnx9O3psXEpCi9ZJWZ0VG71LaCAvAgMBAAECgYByVLnoRFeFAb38bjnSn8JAZgWp2qUBXY3cGXQs0wu61ntX0GmPs2sjhzGTODjNUptGM/v19u0FtWtX5Asp2mZqzg9gfZfnPNKzxBbV0azV9wVgHQe2+OwI/1+YAScqbthDvSsFz0d6lLBYx4c10YVxmg/jAAOUYkNlqMcF6kWdgQJBAPKKbSGKrLco7mD29CeE1Y3tdG58J/daY4AuSty6bMhZOcyunMO0YsYERJA9IQRDDjlApIoZ5EhIcrfhcuDzCj0CQQDbyLqWTSahKbE6cac0yddhHvcUxqirZDoPoJcFMksXQR5BVaHLZ7ZVEYJHt7A2ah1vFb/Js0Bj7bVgNfl5g7bbAkAmUInW36JTOOsXdEuzpn9Z8WYQQhrKL4RCbo2y+txOdhH0bK0lGWz1HR17r7x0gOdRUg3sJxTx+kftFndgY+R9AkAMvzqbJwRbioh95EOXWzGDr4ETEmaL8jcv2teHdKBIS/2OOoI0wuIfUvGkaTHuJf9pBvDlqODOKuY/G0JJ2urLAkEA5BvmwjhSrUndj4AYGGplKJnRZYAP5QH9Mb7ysE2n+dKPpxULJ9Ys1bV7HodmCDSyxLTqulj3hTmMhJwyF2/hdg==";
public static final String SELLER = "2088011831474463";
}


2.在预定房间并进行到支付宝支付界面时,传入的支付金额未做验证。通过数据流分析方法找到支付金额传入的源,通过修改该处的值,可以修改实际支付金额

public void onClick(View paramView)
{
if ((isAlipay) || (isHomeInnPay))
{
if (paramView.getId() == 2131034246)
getActivity().getIntent().putExtra("payment_pay_price", intent.getIntExtra("first_day_price", 0));
while (true)
{
((PaymentOperateActivity)getActivity()).switchContent(18874371);
return;
getActivity().getIntent().putExtra("payment_pay_price", intent.getIntExtra("total_price", 0));
}
}
noSupportAlert.show();
}


3.提供给支付宝的支付成功回调URL所在Web服务器存在目录遍历漏洞,并且可通过页面http://api.homeinns.com/AlipayNew/Query/export_trade_account_report/Default.aspx
查询如家酒店的支付宝订单

漏洞证明:

1.对于漏洞1,可以利用的途径是篡改商户ID和私钥,改成攻击者在支付宝上注册的商户ID和私钥,从而将现金转入攻击者账号,但未论证攻击。但是在支付宝提供的Demo代码中,将商户ID和私钥设置为如家的,金额正常转入到如家支付宝账号。

TM截图20140415151841.png


2.对于漏洞2,通过反编译App并且修改支付金额参数传入的相关代码,并且重打包应用。安装到手机后,证实该漏洞可以利用

public void onClick(View paramView)
{
if ((isAlipay) || (isHomeInnPay))
{
if (paramView.getId() == 2131034246)
getActivity().getIntent().putExtra("payment_pay_price", 1);
while (true)
{
((PaymentOperateActivity)getActivity()).switchContent(18874371);
return;
getActivity().getIntent().putExtra("payment_pay_price", 1);
}
}
noSupportAlert.show();
}


Screenshot_2014-04-10-16-02-19.png


3.对于漏洞3的证明,如下图:

TM截图20140415153532.png


修复方案:

漏洞修复建议:
1.对掌上如家客户端的代码进行混淆,加大逆向分析难度;
2.支付宝支付参数不要硬编码,支付订单的签名功能可以放在服务器端完成;
3.对客户端程序进行安全加固,启动时检测应用是否被重打包
4.Web服务器进行安全配置,拒绝目录遍历

版权声明:转载请注明来源 路人甲@乌云


漏洞回应

厂商回应:

危害等级:高

漏洞Rank:20

确认时间:2014-04-15 17:07

厂商回复:

感谢关注!关于漏洞2,我们还有人工流程,可以进行一定的检查。

最新状态:

2014-06-10:漏洞已修复。