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

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

缺陷编号:wooyun-2015-0145836

漏洞标题:橘子浏览器远程代码执行

相关厂商:百度

漏洞作者: 梧桐雨

提交时间:2015-10-10 18:14

修复时间:2016-01-11 15:32

公开时间:2016-01-11 15:32

漏洞类型:远程代码执行

危害等级:高

自评Rank:20

漏洞状态:厂商已经确认

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

Tags标签:

4人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

2015-10-10: 细节已通知厂商并且等待厂商处理中
2015-10-10: 厂商已经确认,细节仅向厂商公开
2015-10-13: 细节向第三方安全合作伙伴开放(绿盟科技唐朝安全巡航
2015-12-04: 细节向核心白帽子及相关领域专家公开
2015-12-14: 细节向普通白帽子公开
2015-12-24: 细节向实习白帽子公开
2016-01-11: 细节向公众公开

简要描述:

这几天在测试机装了百度软件,当然橘子软件也是送的,既然来了那当然不能放过啦~不过在推送你们的软件的时候是否能做下详细的安全测试呢?不然好怕怕的。。

详细说明:

为了保证是最新的,我又在123juzi.com下载了一份最新的,漏洞也是存在的。
具体可看:

juzi.png


版本1.0.9.1033
对橘子浏览器进行分析,发现exe里面藏着宝藏,都写满了html的逻辑!
对常用api分析,发现存在external对象。
其中有一些高危的敏感api,譬如:
window.external.ExtGetMostVisitedUrls(external.ExtGetSuperCode(window)) //查看最近打开最多的地址
获取ico图片路径
window.external.ExtGetUrlIconPath(external.ExtGetSuperCode(window),"http://baidu.com")
获取对应橘子浏览器机器的supercode:
external.ExtGetSuperCode(window)
上面这些都不是重点,重头戏下面来了:
跨域访问:
window.external.ExtGetOpenUrls(external.ExtGetSuperCode(window)) //获取当前打开页面url
橘子浏览器的特权域为:juzi:last history 以及http://baidu.com , http://123juzi.com。
以http://baidu.com为例,使用window.external.ExtGetOpenUrls(external.ExtGetSuperCode(window)) api
输出结果:

1024.jpg


完全是可以获取到你当前打开的所有url,以及title了。想着能否找一个命令执行呢?
花了1-2天的时间仔细寻找api,发现有这个api可以修改主页的八宫格,因为橘子浏览器的八宫格是在res://域的,允许调用WScript.Shell 执行任意系统的命令。
api如下:
window.external.ExtModifyNewTabItem(external.ExtGetSuperCode(window), 1, "http://wutongyu.info", "exe")
baidu.com域执行之后:
首页的第二个格子将会变成我的blog的地址。我又想起能用javascript协议来直接执行js命令,但是很不巧,这里过滤了javascript,黑盒了一下发现出现javascript,前面全部会加上一个http。即,如果你想执行javascript:alert(1),就会变成http://javascript:alert(1)。
这样自然没办法执行js,那么能否用空格呢?空格javascript:alert(1),还是一样,没办法绕过。也就是说,你的url里面不存在http://,他就会自动在前面帮你加上。
fuzz之后,发现javascript:alert(1)//http://这样的形式,浏览器不会帮你加上http://。即:
window.external.ExtModifyNewTabItem(external.ExtGetSuperCode(window), 1, " javascript:alert(1)//http://", "这是随便起的标题")
但是发现虽然不会给我们加http://,但是点击却是跳转到about:blank的,崩溃,难道没别的办法了吗?
这个时候我又回到阅读源码的阶段,想看看他是怎么过滤的:
功夫不负有心人,在exe里的 function filterUrl()函数里:具体如下:

function filterUrl(url)
{
if( url.indexOf("javascript:") == 0 || url.indexOf("vbscript:") == 0 || url.indexOf("jscript:") == 0 )
return "";
url = url.replace(/\\/g,"%5C");
url = url.replace(/</g,"%3C");
url = url.replace(/>/g,"%3E");
url = url.replace(/"/g,"%22");
url = url.replace(/'/g,"%27");
url = url.replace(/`/g,"%60");
return url;
}


原来他只是过滤javascript://协议,并没有区分大小写。我们可以用Javascript://绕过,来继续执行我们的命令。最后生成的code代码为:见测试代码
在baidu.com下执行:

123.jpg


之后,下次用户打开浏览器,打开八宫格的时候点击第二个,任意代码被执行:

calc.jpg


事实上,我们通过上面api,可修改所有八宫格的url,全部覆盖为我们的恶意javascript代码。

漏洞证明:

说了这么多,来个视频,更清晰一点。因为没找到好用baidu.com的xss,暂时用这个来替代一下!
如果你们有更好的baidu.com的反射型xss,直接触发的,那这个漏洞危害就更大了。。
链接: http://pan.baidu.com/s/1ntu3Gm9 密码: bgmf

修复方案:

增强过滤规则,最好只允许url为http/https/ftp等开头的链接,同时过滤你们此处的xss
完善api规则。

版权声明:转载请注明来源 梧桐雨@乌云


漏洞回应

厂商回应:

危害等级:高

漏洞Rank:20

确认时间:2015-10-10 20:16

厂商回复:

感谢提交

最新状态:

暂无