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"
},
...
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任意用户的朋友列表和部分支付卡详细信息的更多相关文章
- 微信小程序案例:获取微信访问用户的openid
在微信开发项目中,获取openid是项目常遇的问题,本文通过主要讲解实现在微信小程序中如何获取用户的openid,案例实现非常简单 具体实现方法是通过登录接口获取登录凭证,然后通过request请求微 ...
- 通达OA任意用户登录 漏洞复现
0x00 漏洞简介 通达OA国内常用的办公系统,使用群体,大小公司都可以,其此次安全更新修复的高危漏洞为任意用户登录漏洞.攻击者在远程且未经授权的情况下,通过利用此漏洞,可以直接以任意用户身份登录到系 ...
- WEB安全系列之如何挖掘任意用户登录漏洞
WEB安全系列之如何挖掘任意用户登录漏洞 0x01 前言 每周两篇文章打卡.坏蛋100块钱都不给我,好坏好坏的. 0x02 什么是任意用户登录漏洞 几乎每个网站都有自己的会员系统 ...
- 【漏洞分析】dedecms有前提前台任意用户密码修改
0x00 前言 早上浏览sec-news,发现锦行信息安全发布了一篇文章<[漏洞分析] 织梦前台任意用户密码修改>,看完之后就想着自己复现一下. 该漏洞的精髓是php的弱类型比较,'0. ...
- 通达OA任意用户登录漏洞复现
前言 今年hw挺火爆的,第一天上来就放王炸,直接搞得hw暂停 昨天晚上无聊,复现了一下通达oa的洞,也有现成的exp可以使用,比较简单 0x00 漏洞概述 通达OA是一套国内常用的办公系统,此次发现的 ...
- 通达OA 前台任意用户登录漏洞复现
漏洞描述 通达OA是一套办公系统.通达OA官方于4月17日发布安全更新.经分析,在该次安全更新中修复了包括任意用户登录在内的高危漏洞.攻击者通过构造恶意请求,可以直接绕过登录验证逻辑,伪装为系统管理身 ...
- [典型漏洞分享]YS忘记密码机制设计存在缺陷,导致任意用户口令均可被修改【高】
记录了安全测试过程中发现的一些典型的安全问题 YS忘记密码机制存在缺陷,可导致任意用户口令被修改[高] 问题描述: YS网站提供用户密码修改功能,当用户忘记密码时可通过该功能找回密码,但该修改密码的流 ...
- [转帖]挖洞经验 | 获取Facebook Marketplace卖家精确地理位置信息
挖洞经验 | 获取Facebook Marketplace卖家精确地理位置信息 https://www.freebuf.com/vuls/202820.html 知识就是力量 5000刀的一个漏洞. ...
- 代码审计-DedeCMS-V5.7前台任意用户密码重置
0x01 漏洞影响 该漏洞允许攻击者修改任意前台用户密码. 0x02 漏洞利用条件 1,开启会员模块 2,攻击者拥有一个正常的会员账号 3,目标没有设置安全问题 0x03 漏洞分析 漏洞文件:/mem ...
随机推荐
- oracle之随机数
一.首先创建一个测试表 select * from DIM_IA_TEST1 生成随机数 select t.*,rownum rn from (select * from DIM_IA_TEST1 ...
- 16、Python面向对象进阶
一.对象的继承 Python中支持一个类同时继承多个父类 class Parent1: pass class Parent2: pass class Sub1(Parent1, Parent2): p ...
- 记录一次群答问:jmeter正则提取器轻松提取一个及多个值
图截得比较完整,电脑端浏览器放大倍数看吧^_^,手机端可以点击图片然后放大看. 一个正则提取问题 前几天,在Q群和微信群里被同时@,咨询这样一个问题:服务器返回:name="tom" ...
- 强大的接口调试工具-Postman图文详解
前言 在前后端分离开发时,后端工作人员完成系统接口开发后,需要与前端人员对接,测试调试接口,验证接口的正确性可用性.而这要求前端开发进度和后端进度保持基本一致,任何一方的进度跟不上,都无法及时完成功能 ...
- LeetCode 886. Possible Bipartition
原题链接在这里:https://leetcode.com/problems/possible-bipartition/ 题目: Given a set of N people (numbered 1, ...
- BZOJ 4500: 矩阵 带权并查集
这个思路挺巧妙的 ~ 定义一行/列的权值为操作后所整体增加的值. 那么,我们会有若干个 $a[x]+b[y]=c$ 的限制条件. 但是呢,我们发现符号是不能限制我们的(因为可加可减) 所以可以将限制条 ...
- CLR调试时的sos.dll/clr.dll/mscorwks.dll/mscordacwks.dll等动态库的版本对应
大家都知道,在调试托管代码时,一定会加载到sos/clr/mscorwks/mscordacwks这些动态库,才能够很好的完成我们的调试工作,那么他们的版本对应关系是怎样的呢,特别是clr.dll/m ...
- 8-网页,网站,微信公众号基础入门(使用Python程序实现微信token验证)
https://www.cnblogs.com/yangfengwu/p/11062034.html 设置一下IP白名单: 填写自己的服务器的IP地址 是不是不可以哈,有多少人都会入这个坑.... ...
- html5有哪些新特性?如何处理html5新标签的浏览器兼容问题?如何区分html和html5?
h5新特性: 语义化标签:<hrader></header> .<footer></footer>.<nav></nav>.&l ...
- JS中的浅拷贝与深拷贝
浅拷贝与深拷贝的区别: 浅拷贝: 对基本类型和引用类型只进行值的拷贝,即,拷贝引用对象的时候,只对引用对象的内存地址拷贝,新旧引用属性指向同一个对象,修改任意一个都会影响所有引用当前对象的变量. 深拷 ...