新浪微博android客户端本地提权漏洞分析

漏洞概要

缺陷编号: WooYun-2015-111534

漏洞标题: 新浪微博android客户端本地提权

相关厂商: 新浪

漏洞作者: 小荷才露尖尖角

提交时间: 2015-05-01 18:53

公开时间: 2015-07-31 08:07

漏洞类型: 权限提升

危害等级: 中

自评Rank: 10

漏洞状态: 厂商已经确认

漏洞来源: http://www.wooyun.org


漏洞详情

披露状态:

2015-05-01: 细节已通知厂商并且等待厂商处理中
2015-05-02: 厂商已经确认,细节仅向厂商公开
2015-05-05: 细节向第三方安全合作伙伴开放
2015-06-26: 细节向核心白帽子及相关领域专家公开
2015-07-06: 细节向普通白帽子公开

简要描述:

新浪微博某特性导致本地拒绝服务和权限提升

详细说明:

测试版本:新浪微博android客户端v5.2.80

0x01 简介

新浪微博android客户端实现了一个小型的HTTP Server,在手机本地地址的tcp9527端口监听,向该端口发送特定的HTTP请求时可返回部分敏感信息,启动未导出的Activity,造成拒绝服务,甚至允许本地攻击者获得一个GUI shell,以新浪微博客户端的用户权限执行任意命令。

0x02 漏洞分析

在com.sina.weibo.utils.weibohttpd.PushDaemon中可见新浪微博实现了一个小型的HTTP Server,该Server在原生层实现(加载libweibohttp.so),但HTTP请求解析在com.sina.weibo.utils.weibohttpd.a/b/c三个类中处理。

com.sina.weibo.utils.weibohttpd.a:

对HTTP请求的referer进行检查,并拆分字符串。referer不能匹配以下猥琐字符

weisuo.png

com.sina.weibo.utils.weibohttpd.b:

实现login命令查询,当HTTP请求为

code 区域

时返回当前登录用户的信息。

com.sina.weibo.utils.weibohttpd.c:

(1)实现query命令查询,当HTTP请求为

code 区域

可返回指定packagename的已安装应用信息,当packagename为com.sina.weibo时返回更为详尽的信息。

(2)实现si命令,发送intent。当HTTP请求为

code 区域

时,设置指定的intent,并传入startActivity函数。

见如下代码片段

code 区域

由于这里的intent主要是传入startActiviy,需要用户干预,危害并不大。但当packagename指定为com.sina.weibo自身,componentname指定为com.sina.weibo的activity时,可以启动新浪微博的任意activity,包括受保护的未导出activity,对安全造成影响。

漏洞证明:

1、查询当前登录用户信息

login_info.png

2、查询已安装应用信息(新浪微博)信息

packageinfo.png

3、启动未导出的Activity

(1)本地拒绝服务

大多数未导出activity启动时由于缺少参数,抛出异常,造成本地拒绝服务。

dos.png

(2)打开短信登录activity(5.2.0版本有效,新版本已删除)

smscodelogin.png

点击attack后进入这个页面

sms.png

该页面允许通过手机号和验证码登录。输入一指定用户的手机号,点击获取验证码后,随便输入验证码点击确认,用burp抓包使用intruder bruteforce,可以对6位验证码进行暴力破解尝试。测试中发现可以尝试1200次,然后服务端ban掉,因此有1200/1000000的暴力破解成功概率。

(3)打开工程模式,获取一个GUI Shell

启动com.sina.weibo.exlibs.NewProjectModeActivityPreLoading,可以得到新浪微博的工程模式设置

engmode.png

eng.png

注意图中的Run: api.weibo.cn,点击后可以得到一个GUI Shell,可以新浪微博用户的权限执行任意命令。

id.png

查看app私有目录下的文件

ls.png

可惜新浪微博一般为root权限运行,否则这就是一个好的root提权漏洞。当然不排除一些第三方ROM将新浪微博集成以高权限用户执行,造成更大的危害。

修复方案:

1、对HTTP请求进行检查,防止通过socket接口查询敏感信息和启动未导出的Activity

2、本地应用通信尽量不要采用socket这种方式,以防滥用。

原文链接:http://www.wooyun.org/bugs/wooyun-2015-0111534    作者:小荷才露尖尖角