Grahql查询漏洞所引起的敏感信息泄露

iso60001  1869天前

22.png

大家好,我是Pratik Yadav,目前在Crypto Buying Site担任安全工程师(同时我也是计算机工程专业的大四学生),很感谢公司给我提供了一份全职工作,即使我还没有完全毕业。

漏洞详情

为了发现这个漏洞,我花了不少时间学习graphql基础知识,并阅读了可以找到的所有漏洞报告。在某次渗透测试的过程中,当我检查目标的子域时,我发现其中一个子域stg.target.com使用了graphql而不是Rest-API

你可以在这里阅读更多关于graphql的信息。简单来说,GraphQL是一种用于API的查询语言,GraphQL对你的API中的数据提供了一套易于理解的完整描述,使得客户端能够准确地获得它需要的数据,而且没有任何冗余,一个请求就可获得多个指定资源,目前已有大量国际公司使用该语言构建自己的网站。

33.png

需要说明的是,在我这个案例中,用户可通过目标应用转账给他们的家人或朋友或任何用户。而我发现的这个漏洞只需要受害者的电子邮件地址即可触发。

漏洞发现流程

1.首先,我通过Burp的代理时刻监控数据流,并尽量执行所有敏感操作,比如将钱从一个帐户发送到另一个帐户。

2.在检查了所有敏感操作的相关请求后,我的注意力还是集中到转移钱的请求上。

3.在转移钱之前,应用会先验证目标用户是否已经是注册用户,这是通过Graphql查询实现的。

44.jpg

4.从上面的截图的请求回应中可以看出,有一个__typename:Auth_User字段。

5.因此,思考一段时间后,我决定找到涉及__typename:Auth_user的所有字段。

6.利用我所学习的graphql知识,我构建了如下查询语句,它会找出所有的typename和相关字段值。

https://api.stg.target.com/graphq?query={__schema{types{name,fields{name}}}}

55.jpg

所以我检查了typename:Auth_user的所有字段,注意到其中两个字段addressLine1addressLine2,貌似是很敏感的信息。

7.因此,我替换了原始请求中的status,使用了addressLine1代替,然后正如预期的那样,服务器返回了测试帐户地址。

66.jpg

因此,只要电子邮件地址,你就可以窃取任何人的任何敏感信息

类似地,我用balancewallet_address等一系列敏感字段进行了替换,均返回了其他用户的敏感信息。

披露流程

1.我大约在凌晨1点(印度标准时间)向他们报到了漏洞。

2.他们在看到了我提供的视频证据后,立即下线了该子域名。

3.最后,他们给了我四位数美元的奖金(这是我目前得到的最高奖金)。

感谢你的阅读!

参考:https://graphql.cn/learn/

本文由白帽汇整理并翻译,不代表白帽汇任何观点和立场
来源:https://medium.com/@pratiky054/graphql-bug-to-steal-anyones-address-fc34f0374417

最新评论

woc  :  看看人家原文的图片多么清晰,再看看这里的图片,啥都看不清。
1867天前 回复
昵称
邮箱
提交评论