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

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

缺陷编号:wooyun-2014-059796

漏洞标题:e乐充公交卡充值支付漏洞(可实现不花钱充值)

相关厂商:北京亿阳汇智通科技股份有限公司

漏洞作者: 大头鬼

提交时间:2014-05-07 18:23

修复时间:2014-08-05 18:24

公开时间:2014-08-05 18:24

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

危害等级:高

自评Rank:20

漏洞状态:已交由第三方合作机构(cncert国家互联网应急中心)处理

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

Tags标签:

4人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

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

简要描述:

支付宝钱包公交卡充值(e乐充公交卡)支付漏洞:公交卡充值成功后实现支付金额完美退款

详细说明:

1.应用介绍:
e乐充公交卡是亿阳信通旗下子公司亿阳汇智通公司发布的中国首款NFC手机支付APP软件,集公交卡手机充值,余额查询,NFC支付功能为一身。
支付宝钱包8.1.0.43001版本开始支持NFC为公交卡一卡通充值,其最终是调用e乐充公交卡应用,使用支付宝钱包来支付完成金额充值。
e乐充公交卡作为支付宝的一个服务(独立的应用服务),在支付宝客户端上提供下载安装。
测试版本:
apk : com.boco.alipay.activity, 8, 1.0.08, e乐充公交卡
apkmd5: 96a320dd7f311b0fddd9b4223bd10012
证书 :
certmd5: d5eb2cba5245554667e2a38518a4e27d
issuer: C=CH, ST=Beijing, L=Beijing, O=BOCO_HZT, OU=BOCO_HZT, CN=SJYKT
subject: C=CH, ST=Beijing, L=Beijing, O=BOCO_HZT, OU=BOCO_HZT, CN=SJYKT
2.漏洞分析:
支付宝客户端加入了e乐充公交卡服务,e乐充公交卡是调用支付宝接口进行支付,支付成功后,根据返回的支付结果,提示贴公交卡(支付结果为成功),此时服务器端会通过手机的NFC接口向公交卡进行读写数据操作,完成公交充值功能。但成功充值后,可二次利用支付宝的支付结果,来影响软件的交易流程,再次充值,来使e乐充公交卡应用产生交易异常,退还第一次支付的金额到支付宝账号中。
漏洞详情:

2.png


上截图为支付宝下载的e乐充公交卡apk反编译后的代码截图,图中的Pay方法中调用的是支付宝接口来执行支付操作,Pay函数的返回值str为支付结果。
例如,支付成功时的str值为:
resultStatus={9000};memo={};result={partner="20881xxxxxxx"&seller_id="208811xxxxxx"&out_trade_no="13140xxxxxx"&subject="北京亿阳汇智通科技股份有限公司"&body="北京市政公交一卡通充值"&total_fee="1.0"&notify_url="https%3A%2F%2Fwww.hzt360.com%2Fbservice%2FalipayBackgroundResponseOfPay"&service="mobile.securitypay.pay"&payment_type="1"&_input_charset="utf-8"&success="true"&sign_type="RSA"&sign="D7ek+Ozo2PzuceSxjOamgH5wDyKcl7RIDhk3qDdID1aAr1jFh9fw+UufW+72PHiz2ibn+GDwkJuPInqSBgdHPPHuimqjDBO5xNx6MQSGeTUe0li8lkJkPxvyGUs0bhmgT39hfcchA/jDabxcpwFdNFj5/IBmfiATi8XMoi6Hemc="}
例如,支付取消时的str值为:
resultStatus={6001};memo={操作已经取消。};result={}
最终,客户端根据Pay函数的返回值str做判断是否成功(包括信息签名校验、resultStatus的值),支付成功则提示将公交卡贴在手机后部,完成对公交卡数据的读写充值操作。但在公交卡数据读写过程中出现异常时,可以通过给出的异常提示对话框,点击撤销按钮,此时会将刚才支付的金额返还给对应的支付宝账号。
经过分析测试发现,可对第一次支付宝支付成功时Pay函数返回的字符串信息进行二次利用,再此进行公交卡充值支付操作,但在支付界面不做真正的支付,而是取消支付,让取消后的Pay函数返回值为第一次支付宝支付成功时Pay函数值,此时客户端判断此次支付成功,提示用户将公交卡贴在手机后部,完成对公交卡数据的读写充值操作,这时数据的读写会产生异常,客户端变弹出提示对话框,点击撤销按钮,此时服务器端会将第一次支付的金额退还到原支付宝账户上,即可实现免费公交卡充值。

漏洞证明:

3.漏洞利用:
①获取第一次支付宝支付成功时Pay函数的返回值,这个可通过Hook来实现。
②通过Hook Pay函数,修改Pay函数的返回值,使得在取消支付时Pay函数的返回值为第一次支付宝支付成功时Pay函数的返回值。
③再次充值支付操作,在支付界面取消支付,撤销充值。
截图如下:

a.png


原始账户金额截图

b.png


公交卡充值支付宝支付30元后账户余额截图
Hook Pay函数后修改返回值,再次充值支付操作,但在支付界面取消支付:

QQ截图20140507171817.png


取消支付截图
此时提示贴卡,进行数据读写,但贴卡后显示交易异常,此时点击撤销按钮:

-交易异常.png


贴卡异常截图

.png


充值金额退回提示截图

zzz.png


支付宝账单信息

1111.png


e乐公交卡充值记录

222.png


e乐公交卡充退记录

44444.png


修复方案:

版权声明:转载请注明来源 大头鬼@乌云


漏洞回应

厂商回应:

危害等级:高

漏洞Rank:12

确认时间:2014-05-10 00:27

厂商回复:

最新状态:

暂无