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

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

缺陷编号:wooyun-2015-0119309

漏洞标题:美团网APP存在远程命令执行漏洞

相关厂商:美团网

漏洞作者: ali

提交时间:2015-06-10 10:23

修复时间:2015-09-08 17:42

公开时间:2015-09-08 17:42

漏洞类型:远程代码执行

危害等级:高

自评Rank:20

漏洞状态:厂商已经确认

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

Tags标签:

4人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

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

简要描述:

美团网2个远程命令执行漏洞,通过浏览恶意网站就会受到远程命令执行漏洞攻击

详细说明:

一,com.meituan.android.base.hybrid.HybridWebViewActivity对外导出:

<activity
android:name="com.meituan.android.base.hybrid.HybridWebViewActivity"
android:launchMode="0"
android:screenOrientation="1"
android:configChanges="0x000000A0"
>
<intent-filter
>
<action
android:name="android.intent.action.VIEW"
>
</action>
<category
android:name="android.intent.category.DEFAULT"
>
</category>
<category
android:name="android.intent.category.BROWSABLE"
>
</category>
<data
android:scheme="imeituan"
android:host="www.meituan.com"
android:path="/hybrid/web"
>
</data>
</intent-filter>
</activity>


导出MeituanHotelWebviewBridge这个js接口:

protected void onCreate(Bundle arg6) {
super.onCreate(arg6);
this.webView.addJavascriptInterface(new com.meituan.android.base.hybrid.h(this), "MeituanHotelWebviewBridge");
this.webView.getSettings().setUserAgentString(this.webView.getSettings().getUserAgentString()
+ String.format(" %s/%s", "iHotel", BaseConfig.versionName));
}



进入super.onCreate查看之前的操作:

public void onCreate(Bundle arg3) {
super.onCreate(arg3);
if(this.getIntent().getData() != null) {
String v0 = this.buildQueryUrl(this.getIntent().getData());
if(!TextUtils.isEmpty(((CharSequence)v0))) {
this.url = v0;
}
}
if(TextUtils.isEmpty(this.url)) {
this.finish();
}
else {
if(!TextUtils.isEmpty(this.title)) {
this.getSupportActionBar().setTitle(this.title);
}
if(this.getIntent().hasExtra("share")) {
this.topic = this.getIntent().getSerializableExtra("share");
}
this.loadUrl(this.url);
this.bus.a(this);
}
}


获取数据并构造相应的url进行加载,进入buildQueryUrl函数查看细节:
private String buildQueryUrl(Uri arg4) {
String v0_1;
if(arg4 == null || (TextUtils.isEmpty(arg4.getQueryParameter("url")))) {
v0_1 = "";
}
else {
Uri$Builder v0 = Uri.parse(arg4.getQueryParameter("url")).buildUpon();
if(!TextUtils.isEmpty(arg4.getQueryParameter("ieic"))) {
v0.appendQueryParameter("ieic", arg4.getQueryParameter("ieic"));
}
if(!TextUtils.isEmpty(arg4.getQueryParameter("ct_poi"))) {
v0.appendQueryParameter("ct_poi", arg4.getQueryParameter("ct_poi"));
}
if(!TextUtils.isEmpty(arg4.getQueryParameter("msid"))) {
v0.appendQueryParameter("msid", arg4.getQueryParameter("msid"));
}
v0_1 = v0.toString();
}
return v0_1;
}
获取url参数,并再根据url中的参数构造url,因此我们构造下面的html即可进行远程代码执行漏洞攻击:

html.png


由于HybridWebViewActivity在menifest定义了android.intent.category.BROWSABLE属性,因此可以通过浏览器唤起HybridWebViewActivity组件,达到远程命令执行漏洞攻击。
浏览恶意网页即可受到远程命令执行漏洞攻击:

meituanwebview.png


二,com.meituan.android.base.ui.CommonWebViewActivity对外导出:

<activity
android:name="com.meituan.android.base.ui.CommonWebViewActivity"
android:launchMode="0"
android:screenOrientation="1"
android:configChanges="0x000000A0"
>
<intent-filter
>
<action
android:name="android.intent.action.VIEW"
>
</action>
<category
android:name="android.intent.category.DEFAULT"
>
</category>
<category
android:name="android.intent.category.BROWSABLE"
>
</category>
<data
android:scheme="imeituan"
android:host="www.meituan.com"
android:path="/web/"
>
</data>
<data
android:scheme="imeituan"
android:host="www.meituan.com"
android:path="/web"
>
</data>
<data
android:scheme="iMeituan"
android:host="www.meituan.com"
android:path="/web/"
>
</data>
<data
android:scheme="iMeituan"
android:host="www.meituan.com"
android:path="/web"
>
</data>
</intent-filter>
</activity>


导出Android这个js接口:

this.webView.addJavascriptInterface(new BaseWebViewActivity$MyJavaScriptInterface(this), "Android");


进入onCreate查看之前的操作:

public void onCreate(Bundle arg3) {
super.onCreate(arg3);
if(this.getIntent().getData() != null) {
String v0 = this.buildQueryUrl(this.getIntent().getData());
if(!TextUtils.isEmpty(((CharSequence)v0))) {
this.url = v0;
}
}
if(TextUtils.isEmpty(this.url)) {
this.finish();
}
else {
if(!TextUtils.isEmpty(this.title)) {
this.getSupportActionBar().setTitle(this.title);
}
if(this.getIntent().hasExtra("share")) {
this.topic = this.getIntent().getSerializableExtra("share");
}
this.loadUrl(this.url);
this.bus.a(this);
}
}


获取数据并构造相应的url进行加载,进入buildQueryUrl函数查看细节:

private String buildQueryUrl(Uri arg4) {
String v0_1;
if(arg4 == null || (TextUtils.isEmpty(arg4.getQueryParameter("url")))) {
v0_1 = "";
}
else {
Uri$Builder v0 = Uri.parse(arg4.getQueryParameter("url")).buildUpon();
if(!TextUtils.isEmpty(arg4.getQueryParameter("ieic"))) {
v0.appendQueryParameter("ieic", arg4.getQueryParameter("ieic"));
}
if(!TextUtils.isEmpty(arg4.getQueryParameter("ct_poi"))) {
v0.appendQueryParameter("ct_poi", arg4.getQueryParameter("ct_poi"));
}
if(!TextUtils.isEmpty(arg4.getQueryParameter("msid"))) {
v0.appendQueryParameter("msid", arg4.getQueryParameter("msid"));
}
v0_1 = v0.toString();
}
return v0_1;
}


获取url参数,并再根据url中的参数构造url,因此我们构造下面的html即可进行远程代码执行漏洞攻击:

html1.png


由于CommonWebViewActivity在menifest定义了android.intent.category.BROWSABLE属性,因此可以通过浏览器唤起CommonWebViewActivity组件,达到远程命令执行漏洞攻击。
浏览恶意网页即可受到远程命令执行漏洞攻击:

meituanwebview1.png

漏洞证明:

如上

修复方案:

1, addJavascriptInterface存在高危远程代码执行漏洞,应尽量避免使用,API 17中用@JavascriptInterface 代替addjavascriptInterface;移除系统webkit内置的危险接口searchBoxJavaBridge_,accessibility,accessibilityTraversal"
2, 不要将com.meituan.android.base.ui.CommonWebViewActivity和com.meituan.android.base.hybrid.HybridWebViewActivity导出

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


漏洞回应

厂商回应:

危害等级:中

漏洞Rank:5

确认时间:2015-06-10 17:41

厂商回复:

感谢白帽子的报告,我们会在最新的下个版本中修复该漏洞。稍后会和洞主联系,邮寄礼物。

最新状态:

暂无