!!!写完之后网页崩溃了,然后草稿找回的内容还不对!!!
Write-up地址:Add comment on a private Oculus Developer bug report
漏洞起源于作者Sarmad Hassan (Juba Baghdad)对Oculus网站漏洞(非安全漏洞)提交功能的测试。
首先对该功能进行分析:
1. 用户有两种提交漏洞的方式:公有和私有
2. 公有漏洞:任意人都可以评论或者回复评论
3. 私有漏洞:除了提交者和支持团队,没有人可以评论
4. 用户的仪表板中不会出现其他用户的私有漏洞
很明显,正常情况下用户不会接触到其他用户的私有漏洞,而也正是该部分功能值得我们进行突破。
通过对公有漏洞功能进行测试,分析私有漏洞功能可能存在的问题。
作者创建了一个公有漏洞并评论,在回复该评论时拦截了发出的请求:
POST /graphql?locale=user HTTP/1.1 Host: graph.oculus.com access_token=My-Acces-Token&variables={“input”:{“client_mutation_id”:”1",”comment_parent_id”:”556190998150906",”external_post_id”:”548709645565708",”message”:”what ever”}}&blablabla
可以发现两个有趣的参数名(这里作者应该是把两个ID搞混了,我这里是按照作者PoC视频解释的):
1. comment_parent_id: 评论的ID
2. external_post_id: 漏洞ID(漏洞ID可以从URL中获得https://developer.oculus.com/bugs/bug/your-bug-ID/)
很自然的,作者想到可以对这两个ID进行替换:
一种情况是替换external_post_id,从而可以在其他用户的私有漏洞下评论,但是没有成功。
另一种情况是替换comment_parent_id,从而可以在其他用户私有漏洞的评论下进行回复,而该测试成功了。其实这里注意到,external_post_id还是攻击用户本来的漏洞ID,只是由于comment_parent_id变成了被攻击用户的私有评论ID,就可以实现攻击。
一个小问题:
攻击者怎样获得其他用户私有漏洞的评论ID?这确实是一个问题,如果是针对某一特定用户,可能需要其他手段,但是攻击者仍然可以采用暴力的方式枚举ID,实现随机的攻击。
1. 对于测试的特性,有必要分析它各方面的功能,以及各类不同用户的权限。
2. 从正常权限出发,分析突破受限的权限
3. 某些程度上,漏洞就意味着逻辑上存在问题,所以不要按照正常的逻辑分析漏洞可能的方向,而要打破思维的限制