泄露所有用户的Google Drive文件
大家好!好久不见。我决定撰写新的博客文章,分享多年来我在谷歌发现的一些顶级漏洞。希望未来几周能持续发布这个系列文章,敬请关注。
本文将要介绍的是几年前我发现的一个有趣漏洞,该漏洞允许你获取其他用户Google Drive文件的访问权限。对于不了解Google Drive的用户来说,这是一项文件共享服务,你可以上传Word文档、PDF文件或任何类型的文件,并与其他用户共享。如果文件是私有的或未与你共享,你将收到访问被拒绝的错误提示。
今天,我将展示如何在不被授权的情况下访问他人的Google Drive文件。
在开始之前,我需要说明该漏洞已被修复,并且谷歌VRP为此支付了丰厚的奖金。
概念验证
在介绍POC之前,我需要简要说明一下Google Classroom的背景。Google Classroom是谷歌为教师和学生提供的协作平台,访问地址为classroom.google.com。教师可以在上面发布公告、布置作业、批改论文等。
当教师在Google Classroom上发布作业时,学生会收到提交作业的页面。例如,学生提交作业给教师批改的页面如下:
学生在提交作业时能够附加文件。假设学生需要附加一篇课程论文,他们会将Google Drive中的DOC文件附加到作业中并点击提交。
问题就出现在这里。
当学生向教师提交作业时,Google Classroom有一个流程,会将提交的文档的所有权授予班级的教师。这显然是必要的,因为教师需要能够阅读学生提交的文档。
当学生将Google Drive文件附加到作业时,会发送以下API请求:
|
|
仔细观察,我们可以看到这个值:
"1h8tReWm8Cp6bsv24BwMlimFrJ3w1d7sdpxYHfUr1rgw"
这是学生提交的Google Drive文件的ID。当时没有进行适当的RBAC检查来验证你是否真正拥有附加到作业的Google Drive文件。
现在我们知道了可以附加任何Google Drive文件到作业中,但Google Classroom后端会授予我文件的访问权限吗?
在初次测试中,它并没有授予我访问权限。因此,我当时认为RBAC检查是正常工作的,最多只是UI层面的问题。当我仅修改上述请求中的ID时,无法获取我另一个账户的Google Drive文件访问权限。
绕过方法?
经过进一步挖掘,发现了一个完全可行的绕过方法。如果你将目标用户添加为你的Google Classroom的学生或教师,那么你现在就可以使用上述请求完全获取其Google Drive文件的访问权限。
具体流程如下:
-
将目标用户添加为你的Google Classroom的用户,并在班级中创建一个作业。
-
添加另一个你控制的账户作为学生加入班级,并登录该账户。
-
以你登录的学生账户提交作业,并修改此请求:
1 2 3
POST /v7/writesubmission?_reqid=4786040&rt=j HTTP/1.1 Host: classroom.google.com f.req=[[3],[[["18537069787",["46653220298",["41400909728"]]],[["18537069787",["46653220298",["41400909728"]]],null,null,null,[[null,null,"1h8tReWm8Cp6bsv24BwMlimFrJ3w1d7sdpxYHfUr1rgw",2,"application/vnd.google-apps.ritz"
将ID替换为你在步骤1中添加至班级的目标用户的Google Drive文件ID。
-
提交作业,你现在将能够访问其整个Google Drive文件并获得所有权。
就这样!这里还有一个视频演示:
(请注意背景音乐,因为谷歌VRP喜欢音乐,所以我通常会加上。)
如果你有任何问题,请随时在X上联系我: Cam (@SecretlyHidden1) / X