漏洞概要 关注数(24) 关注此漏洞
缺陷编号:wooyun-2015-090187
漏洞标题:利用某漏洞进行支付宝支付密码劫取
相关厂商:阿里巴巴
漏洞作者: gainover
提交时间:2015-01-06 09:00
修复时间:2015-02-20 09:02
公开时间:2015-02-20 09:02
漏洞类型:xss跨站脚本攻击
危害等级:高
自评Rank:15
漏洞状态:厂商已经确认
漏洞来源: http://www.wooyun.org,如有疑问或需要帮助请联系 [email protected]
Tags标签: 无
漏洞详情
披露状态:
2015-01-06: 细节已通知厂商并且等待厂商处理中
2015-01-06: 厂商已经确认,细节仅向厂商公开
2015-01-16: 细节向核心白帽子及相关领域专家公开
2015-01-26: 细节向普通白帽子公开
2015-02-05: 细节向实习白帽子公开
2015-02-20: 细节向公众公开
简要描述:
之前发过一个劫持登录密码的,这次发一个劫持支付密码的。
支付宝一些需要使用支付密码的页面上存在安全缺陷,导致恶意攻击者可以通过构建恶意页面来劫持到受害者的支付密码。
详细说明:
1. 我们可以看到在支付宝的一些功能页面上,会调用以下FLASH文件:https://i.alipayobjects.com/e/201309/17IDNJfn8n.swf。比如这个页面:https://yebprod.alipay.com/yeb/purchase.htm,当然还有其他好多页面会调用,这里不一一列举了。
2. 接着我们来分析分析这个FLASH文件。
embed方法:
接着看Engine类:
代码进入Kernel类
调用了ReceiverProxy类
-------------------------------------------------------------
到了这里,可以看到,最终建立了一个LocalConnection,并且allowDomain("*"),且LocalConnection的client属性指向了Engine。
这意味着,我们可以自行编写一个FLASH,来远程调用 Engine 类的 所有 public 的方法。
如果 Engine里所暴露出来的方法,存在安全缺陷,比如调用了ExternalInterface.call,且参数可控,那么必然形成安全问题。
经过分析,我们发现,receive 方法满足这一点。
receive在一定条件下会进入调用以下代码。
其中this.onReceived的定义可以在 Trinity 类的定义中看到。
-------------------------------------------------------------
因此,我们可以自行编写一个FLASH文件,即可远程调用支付宝的FLASH中Engine类的receive方法,从而在支付宝页面上执行XSS代码。
于是,编写FLASH代码如下:
以上代码,会不停的向 _group send 命令, 一旦发现 _group 这个LocalConnection,就会调用其receive函数。FLASH文件已上传至:https://xsst.sinaapp.com/poc/LocalConn2.swf
打开以上FLASH文件(注意,FLASH页面不能关闭),然后再打开 https://yebprod.alipay.com/yeb/purchase.htm 页面(需登录),就会发现会弹出提示框“demo”。
-------------------------------------------------------------
这样一来,我们实际上可以在这些敏感的页面下执行任意JS代码,比如将密码控件替换为普通文本框(普通用户无法察觉),从而实现劫持密码。
但上面的流程,显然存在一个局限性,就是需要一直打开https://xsst.sinaapp.com/poc/LocalConn2.swf 这一FLASH文件。
咋一想,似乎有点鸡肋,实则不然。
因为一般的支付流程, 用户先是停留在“电商”或其它“非支付页面”上,而后进入支付流程时,支付宝页面被打开,但“电商”或其它“非支付页面”依然处于打开状态。
因此,如果“电商”或其它“非支付页面”存在漏洞,使得我们可以向页面内嵌入https://xsst.sinaapp.com/poc/LocalConn2.swf,那么用户的支付密码被劫持的可能性大大增加,并且这类场景确实是十分常见的。
下面我以“搜狐视频”作为这类场景的一个实例来进行说明,具体见“漏洞证明部分”。
漏洞证明:
1. 搜狐视频存在XSS漏洞,导致我们可以在搜狐视频的页面下执行XSS。我们首先通过 http://xsst.sinaapp.com/poc/alipay.poc.htm 向 搜狐视频植入恶意代码,从而嵌入https://xsst.sinaapp.com/poc/LocalConn.swf
2. https://xsst.sinaapp.com/poc/LocalConn2.swf 这个FLASH,会不断的向 _group 这个LocalConnection发送请求。
3. 最终搜狐视频用户,在充值进入支付宝支付页面时, 上一步骤里的XSS代码将被执行,支付页面里被注入//xsst.sinaapp.com/poc/alipay.js文件。
4. //xsst.sinaapp.com/poc/alipay.js 为了做演示,将密码控件框替换成普通密码框,劫持用户密码。
可以看到密码被劫持
5. 当然好多个地方的页面,用到了支付密码的均受到了影响。
-------------------------------------------------------------
最后,我也录制了一个演示视频。
http://v.youku.com/v_show/id_XODY1NDEzMjM2.html
密码:wooyunalipay
修复方案:
1. localconnection本身也是一个存在安全隐患的点,尽量避免使用localconnection.allowDomain("*")
2. ExternalInterface.call 的参数如果是可控的,在进入前一定要过滤一下。 可以考虑在该FLASH的AJBridgeLite类里做统一处理。
版权声明:转载请注明来源 gainover@乌云
漏洞回应
厂商回应:
危害等级:高
漏洞Rank:15
确认时间:2015-01-06 15:26
厂商回复:
感谢您对阿里巴巴安全的支持
最新状态:
暂无