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

本文详细披露了一个已修复的Google Classroom安全漏洞,攻击者可通过修改API请求中的Google Drive文件ID,结合特定操作流程,非法获取其他用户的云端文件所有权。文章包含完整的技术细节和复现步骤。

泄露所有用户的Google Drive文件

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

本篇将介绍几年前我发现的一个有趣漏洞,该漏洞允许攻击者获取其他用户Google Drive文件的访问权限。Google Drive是一项文件共享服务,用户可上传Word文档、PDF等各类文件并与其他用户共享。若文件为私有或未共享给当前用户,访问时将显示"拒绝访问"错误。

今天我将展示如何在不被授权的情况下访问他人的Google Drive文件。需要说明的是,该漏洞已被修复,Google漏洞奖励计划为此支付了丰厚奖金。

漏洞复现

在开始之前,需要先了解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的成员后,漏洞即可完全利用。

完整攻击流程:

  1. 创建Google Classroom班级,将目标用户添加为成员(学生/教师均可),并在班级中创建作业
  2. 将自己控制的另一个账号添加为班级学生并登录
  3. 以学生身份提交作业时,修改API请求中的Google Drive文件ID为目标用户的文件ID
  4. 提交作业后即可获得目标文件的完全访问权限

(附漏洞演示视频)

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

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