漏洞概要
关注数(24)
关注此漏洞
漏洞标题:利用某漏洞进行支付宝支付密码劫取
提交时间:2015-01-06 09:00
修复时间:2015-02-20 09:02
公开时间:2015-02-20 09:02
漏洞类型:xss跨站脚本攻击
危害等级:高
自评Rank:15
漏洞状态:厂商已经确认
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类里做统一处理。
漏洞回应
厂商回应:
危害等级:高
漏洞Rank:15
确认时间:2015-01-06 15:26
厂商回复:
感谢您对阿里巴巴安全的支持
最新状态:
暂无
漏洞评价:
评论
-
2015-01-06 15:40 |
f4ck ( 实习白帽子 | Rank:42 漏洞数:7 | 有些人很牛B,一个漏洞能刷成N个。)
-
2015-01-06 16:09 |
李旭敏 ( 普通白帽子 | Rank:469 漏洞数:71 | ฏ๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎...)
-
2015-01-06 16:10 |
乐乐、 ( 普通白帽子 | Rank:853 漏洞数:189 )
................................
-
2015-01-06 23:22 |
Aphxg ( 路人 | Rank:6 漏洞数:2 )
二哥威武 天下无敌,我想这个世界上再也没有人是二哥的对手了,三界五行之中无仙无佛可以阻拦二哥,祝二哥早日一统天下。吾皇万岁万岁 万万岁。
-
2015-01-07 13:58 |
hkAssassin ( 普通白帽子 | Rank:358 漏洞数:66 | 我是一只毛毛虫。)
为什么关注的这么少。难道都是土豪,不怕支付密码被二哥弄走!
-
2015-01-07 20:27 |
晏子 ( 路人 | Rank:6 漏洞数:4 | 无)
-
2015-01-13 13:18 |
px1624 ( 普通白帽子 | Rank:1036 漏洞数:175 | px1624)
这个漏洞没有提醒关注?看来是先匿名发了,然后才取消匿名了,要么就是乌云bug了
-
2015-01-23 16:24 |
LaiX ( 普通白帽子 | Rank:128 漏洞数:39 | 承接 建站、仿站、维护、反黑客、代码审计...)
-
2015-02-04 20:51 |
动后河 ( 实习白帽子 | Rank:51 漏洞数:13 | ☭)
-
2015-02-07 15:51 |
lopo ( 路人 | Rank:4 漏洞数:2 | 不一样的烟火)
-
2015-02-07 18:11 |
夏殇 ( 路人 | Rank:30 漏洞数:21 | 不忘初心,方得始终。)
-
2015-02-07 18:56 |
laoyao ( 路人 | Rank:14 漏洞数:5 | ด้้้้้็็็็็้้้้้็็็็...)
-
2015-02-07 23:21 |
noob ( 实习白帽子 | Rank:81 漏洞数:18 | 向各位大神学习,向各位大神致敬)
-
2015-02-17 07:46 |
Davidoff ( 路人 | Rank:1 漏洞数:1 | 品牌创立人季诺·大卫杜夫(Zino Davidoff...)
-
2015-02-20 09:31 |
一只猿 ( 普通白帽子 | Rank:463 漏洞数:89 | 硬件与无线通信研究方向)
-
2015-02-20 10:16 |
xsser ( 普通白帽子 | Rank:254 漏洞数:18 | 当我又回首一切,这个世界会好吗?)
-
2015-02-20 14:45 |
动后河 ( 实习白帽子 | Rank:51 漏洞数:13 | ☭)
-
2015-03-03 10:41 |
Stardustsky ( 路人 | Rank:4 漏洞数:3 | ……)
-
2015-07-22 15:02 |
土夫子 ( 普通白帽子 | Rank:173 漏洞数:41 | 逆流而上,顺势而为)