挖洞经验 | 获取Facebook Marketplace卖家精确地理位置信息

https://www.freebuf.com/vuls/202820.html

知识就是力量 5000刀的一个漏洞.

本文分享的writeup是与Facebook Marketplace销售系统相关的用户信息泄露漏洞,通过该漏洞可以获取到发布商品卖家的精确到经纬度和邮编等具体地理位置信息。漏洞上报一波三折,经历拒绝后再次被Facebook接收,最终Facebook给予的奖励为$5,000美金。以下是作者的漏洞发现分享。

Facebook Marketplace简介

Facebook Marketplace是Facebook于2016年10月在移动端推出的一个P2P(个人对个人)的商品拍卖和交易功能,允许用户在其上购买和销售物品。

点击Facebook底部的Marketplace按钮进入,在界面中用户可以像网络商城那样直接以商品名字、种类和售价等分类来搜索某商品,Facebook会自动为用户显示最靠近用户身边的Facebook卖家,并显示该卖家的报价和商品信息。在找到心仪商品之后,用户便可以直接用Messenger来与该卖家联络。而如果你是卖家,你也可以直接在Marketplace中添加商品、报价、地点等相关消息。与一般拍卖网站不同的是,其内置的地点工具可以调整中你正在查看的地区,或变更为其它城市。目前,Facebook Marketplace服务仅在某些国家开放。

发现漏洞的原因

Facebook Marketplace上线后,有些卖家会在上面销售一些被盗商品,所以我有时会协助调查Facebook Marketplace中的一些被盗商品,在分析其相关的可追回技术可行性过程中,我发现了其中存在的一个漏洞,利用该漏洞可以发现卖家的一些敏感数据,获取其包含经纬度的精确地理位置。

以我要卖掉的下图这辆7000欧的山地自行车拍卖销售页面分析入手,经测试,我发现Facebook Marketplace中与地理位置相关的数据信息相对具体,它包含在销售商品返回的广告中,其相关的响应消息为JSON格式内容,而这种卖家商品的地理位置又可以通过Facebook Marketplace进行设定。

为此,我觉得有些疑惑,为什么Facebook Marketplace呈现在用户页面上的商品地理位置又非常简单呢?这看来值得深究一番。

深入分析

于是,我又登录进入Facebook Marketplace应用,把这辆7000欧的山地自行车,用其中的地图位置选择工具设置了一个随机地址,看看有什么反应:

哦,看到没,在右下角之处,有一行小而灰色的字,Facebook Marketplace声称为了保护卖家隐私,位置信息仅只是大概位置(“Location is approximate to protect the seller’s privacy”),哟,还不错。

好吧,退出Facebook Marketplace看看这次请求包中的位置数据是什么,注意此时我是一个未授权的普通用户。在销售页面中,我开启了Chrome的浏览器网络监控功能,当我点击了这辆山地车的相关信息之后,可以在网络数据包中看到很多关于该商品的位置信息,查看后,我发现是Facebook的API – facebook.com/api/graphql 在响应时泄露了一些地理位置信息,如下:

其中竟然包含了商品发布的精确地理位置信息,有经纬度数据、城市、国家、邮编,如下:

"location": {

   "latitude": 54.9942235,

   "longitude": -1.6041244,

   "reverse_geocode": {

         "city": "Newcastle upon Tyne",

         "state": "England",

         "postal_code": ""

   },

   "reverse_geocode_detailed": {

      "city": "Newcastle upon Tyne",

      "state": "England",

      "postal_code": "NE2 2DS"

   }

}

经纬度!?哦,足够了!打开谷歌地图,输入其中的经纬度信息进行查找,当然,就发现了我在商品后台设置的具体地理位置了!

由于卖家很少会去刻意伪造销售商品的实际地理位置,而这种精确到米的地理位置和城市及邮编信息泄露,再结合交易过程涉及的卖家真实姓名,恶意攻击者或其它别有用心者可以利用它来准确确定卖家的具体住址。

这算是安全漏洞或问题吗?

由于卖家必须在商品发布过程中标明确切的个人位置信息,而Facebook Marketplace又声称会保护用户隐私,会做地理位置模糊化显示给浏览者。就像我设置山地车的销售位置时,拖动地图选择的圆圈后,Facebook Marketplace表明只会显示大概位置,当然,很少有卖家会刻意伪造这种地理位置信息。

另外,当我想用Facebook Marketplace提交一些具体精确的地理位置时,Facebook提供的位置或地址选择项中根本没有一些更准确或更近的位置可以选择,就算输入完整邮编或地址都不行。

所以,这种就互相矛盾了,那么,这就算是一种安全问题了。

这难道是Facebook的预期行为?

我本以为Facebook会从地图选择圆圈中随机分配到其中的一个位置,或者像某些Web应用一样会捕捉到最近的大概位置。我也期望Facebook只显示邮编的前三四个数字。但事实,当Facebook采取措施防止这些信息泄露时,以上模糊化的大概位置显示貌似是他们采取的方法。但是,现在当我试图在Facebook Marketplace添加一个销售商品时,Facebook甚至会去抓拍与其位置相关的当地一个公园图片,完全说不通。

漏洞上报

这无疑是一个安全漏洞了,我及时上报给了Facebook,并高亮显示了其中的邮编,但是却被Facebook拒绝了,他们认为这不是一个安全漏洞。不服气的我又继续分析了其中的相关参数,并再次更新上报,WTF,又被拒。好在我认识一个在Facebook工作的朋友,和他聊了聊,他把漏洞转给了某位内部人士进行了深入了解,最终,我的漏洞被接收了,一周后Facebook修复了漏洞并奖励了我$5,000美金。

[转帖]挖洞经验 | 获取Facebook Marketplace卖家精确地理位置信息的更多相关文章

  1. 使用LocationManager来获取移动设备所在的地理位置信息

    在Android应用程序中,可以使用LocationManager来获取移动设备所在的地理位置信息.看如下实例:新建android应用程序TestLocation. 1.activity_main.x ...

  2. 转:Google Project Zero挖洞经验整理

    https://www.sec-un.org/google-project-zero%E6%8C%96%E6%B4%9E%E7%BB%8F%E9%AA%8C%E6%95%B4%E7%90%86/ 1. ...

  3. [日志分析]Graylog2进阶之获取Nginx来源IP的地理位置信息

    如果你们觉得graylog只是负责日志收集的一个管理工具,那就too young too naive .日志收集只是graylog的最最基础的用法,graylog有很多实用的数据清洗和处理的进阶用法. ...

  4. 【挖洞经验】如何在一条UPDATE查询中实现SQL注入

    直奔主题 跟往常一样,在喝完我最爱的果汁饮料之后,我会习惯性地登录我的Synack账号,然后选择一个应用来进行渗透测试,此时我的“黑客之夜”便正式开始了. 我与很多其他的安全研究人员的习惯一样,我会在 ...

  5. 挖洞经验 | 绕过WAF限制利用php:方法实现OOB-XXE漏洞利用

    几个星期以前,作者在某个OOB-XXE漏洞测试中遇到过这样一种场景:目标应用后端系统WAF防火墙阻挡了包含DNS解析在内的所有出站请求(Outgoing Request),但最终,通过利用php:// ...

  6. 微信小程序实现城市定位:获取当前所在的国家城市信息

    微信小程序中,我们可以通过调用wx.getLocation()获取到设备当前的地理位置信息,这个信息是当前位置的经纬度.如果我们想获取当前位置是处于哪个国家,哪个城市等信息,该如何实现呢? 微信小程序 ...

  7. 挖洞入门_显错型SQL注入

    简介:在漏洞盒子挖洞已经有一段时间了,虽说还不是大佬,但技术也有所进步,安全行业就是这样,只有自己动手去做,才能将理论的知识变为个人的经验.本篇文章打算分享一下我在挖显错型SQL注入漏洞过程中的一些个 ...

  8. UnityGUI扩展实例:图片挖洞效果 Mask的反向实现

    转载自 https://www.taidous.com/forum.php?mod=viewthread&fid=211&tid=55259 我想大家在用uGUI做界面时,可能经常会碰 ...

  9. unity, 挖洞特效

    想模仿这个游戏的挖洞特效: 思路: 效果: 代码下载:http://pan.baidu.com/s/1kUN8goZ

随机推荐

  1. SonarQube 7.7默认数据库连接方法

    SonarQube7.7默认数据库为H2 embbed数据库 连接字符串:jdbc:h2:tcp://localhost:9092/sonar 用户名密码都为空

  2. [51nod 1830] 路径交

    问题描述 给定一棵n个点的树,以及m条路径,每次询问第L条到第R条路径的交集部分的长度(如果一条边同时出现在2条路径上,那么它属于路径的交集). 输入格式 第一行一个数n(n<=500,000) ...

  3. 安装caffe碰到的坑(各种.so未找到)

    ./include/caffe/common.hpp:4:32: fatal error: boost/shared_ptr.hpp: 没有那个文件或目录 所有类似于上面的错误,都可以用如下格式来解决 ...

  4. UVA 11988 Broken Keyboard (a.k.a. Beiju Text)(链表)

    题目代号:UVA 11988 题目链接:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&pa ...

  5. A - 地震预测

    A - 地震预测 怀特先生是一名研究地震的科学家,最近他发现如果知道某一段时间内的地壳震动能量采样的最小波动值之和,可以有效地预测大地震的发生. 假设已知一段时间的n次地壳震动能量的采样值为a1,a2 ...

  6. python学习之路(22)

    使用模块 Python本身就内置了很多非常有用的模块,只要安装完毕,这些模块就可以立刻使用. 我们以内建的sys模块为例,编写一个hello的模块: #!/usr/bin/env python # - ...

  7. 深入浅出mysql笔记---1、mysql下载安装

    深入浅出mysql笔记---1.mysql下载安装 一.总结 一句话总结: linux下rpm安装即可 1.linux的wget命令作用? 下载文件的工具:比如wget http://cn.wordp ...

  8. tp5 select

    tp5  select出来的数据 和tp3.2select出来的数据 不一样, tp5  select出来的数据  含有很多我们不需要的东西,让我们小菜鸟看的很痛苦 解决办法 $date是查询出来的结 ...

  9. word文档每章的页眉页脚设置

    1. 每章后面插入分隔符,下一页. 2. 编辑页眉,取消选中链接的上一页,然后编辑页眉即可.

  10. rosbag 那些事

    ..bag文件转.txt 将file_name.bag文件中topic_name话题的消息转换到Txt_name.txt文件中: rostopic echo -b file_name.bag -p / ...