Grahql查询漏洞所引起的敏感信息泄露
大家好,我是Pratik Yadav,目前在Crypto Buying Site担任安全工程师(同时我也是计算机工程专业的大四学生),很感谢公司给我提供了一份全职工作,即使我还没有完全毕业。
漏洞详情
为了发现这个漏洞,我花了不少时间学习graphql基础知识,并阅读了可以找到的所有漏洞报告。在某次渗透测试的过程中,当我检查目标的子域时,我发现其中一个子域stg.target.com
使用了graphql
而不是Rest-API
。
你可以在这里阅读更多关于graphql的信息。简单来说,GraphQL是一种用于API的查询语言,GraphQL对你的API中的数据提供了一套易于理解的完整描述,使得客户端能够准确地获得它需要的数据,而且没有任何冗余,一个请求就可获得多个指定资源,目前已有大量国际公司使用该语言构建自己的网站。
需要说明的是,在我这个案例中,用户可通过目标应用转账给他们的家人或朋友或任何用户。而我发现的这个漏洞只需要受害者的电子邮件地址即可触发。
漏洞发现流程
1.首先,我通过Burp的代理时刻监控数据流,并尽量执行所有敏感操作,比如将钱从一个帐户发送到另一个帐户。
2.在检查了所有敏感操作的相关请求后,我的注意力还是集中到转移钱的请求上。
3.在转移钱之前,应用会先验证目标用户是否已经是注册用户,这是通过Graphql查询实现的。
4.从上面的截图的请求回应中可以看出,有一个__typename:Auth_User
字段。
5.因此,思考一段时间后,我决定找到涉及__typename:Auth_user
的所有字段。
6.利用我所学习的graphql知识,我构建了如下查询语句,它会找出所有的typename和相关字段值。
https://api.stg.target.com/graphq?query={__schema{types{name,fields{name}}}}
所以我检查了typename:Auth_user
的所有字段,注意到其中两个字段addressLine1
和addressLine2
,貌似是很敏感的信息。
7.因此,我替换了原始请求中的status
,使用了addressLine1
代替,然后正如预期的那样,服务器返回了测试帐户地址。
因此,只要电子邮件地址,你就可以窃取任何人的任何敏感信息
类似地,我用balance
、wallet_address
等一系列敏感字段进行了替换,均返回了其他用户的敏感信息。
披露流程
1.我大约在凌晨1点(印度标准时间)向他们报到了漏洞。
2.他们在看到了我提供的视频证据后,立即下线了该子域名。
3.最后,他们给了我四位数美元的奖金(这是我目前得到的最高奖金)。
感谢你的阅读!
本文由白帽汇整理并翻译,不代表白帽汇任何观点和立场
来源:https://medium.com/@pratiky054/graphql-bug-to-steal-anyones-address-fc34f0374417
最新评论