GCP - Understanding Domain-Wide Delegation

支持 HackTricks

这篇文章是 https://www.hunters.security/en/blog/delefriend-a-newly-discovered-design-flaw-in-domain-wide-delegation-could-leave-google-workspace-vulnerable-for-takeover 的介绍,更多细节请访问该链接。

理解域范围委托

Google Workspace 的域范围委托允许身份对象,无论是来自 Google Workspace Marketplace 的 外部应用 还是内部的 GCP 服务账户代表用户访问 Workspace 中的数据。这个功能对于与 Google API 或需要用户模拟的服务交互的应用至关重要,通过自动化任务提高效率并减少人为错误。使用 OAuth 2.0,应用开发者和管理员可以在不需要单个用户同意的情况下,授予这些服务账户访问用户数据的权限。 Google Workspace 允许创建两种主要类型的全局委托对象身份:

  • GWS 应用程序: 来自 Workspace Marketplace 的应用程序可以设置为委托身份。在进入市场之前,每个 Workspace 应用程序都经过 Google 的审核,以减少潜在的滥用风险。虽然这并不能完全消除滥用的风险,但显著增加了此类事件发生的难度。

  • GCP 服务账户: 了解更多关于 GCP 服务账户的信息

域范围委托:内部机制

这就是 GCP 服务账户如何代表 Google Workspace 中的其他身份访问 Google API 的方式:

  1. 身份创建 JWT: 身份使用服务账户的私钥(JSON 密钥对文件的一部分)来签署 JWT。此 JWT 包含有关服务账户、要模拟的目标用户以及请求的 REST API 的 OAuth 访问范围的声明。

  2. 身份使用 JWT 请求访问令牌: 应用程序/用户使用 JWT 向 Google 的 OAuth 2.0 服务请求访问令牌。请求还包括要模拟的目标用户(用户的 Workspace 电子邮件)和请求访问的范围。

  3. Google 的 OAuth 2.0 服务返回访问令牌: 访问令牌代表服务账户在指定范围内代表用户行事的权限。此令牌通常是短期有效的,必须定期刷新(根据应用程序的需要)。理解 JWT 令牌中指定的 OAuth 范围对结果访问令牌的有效性和影响至关重要。例如,拥有多个范围的访问令牌将在多个 REST API 应用程序中保持有效。

  4. 身份使用访问令牌调用 Google API: 现在拥有相关的访问令牌,服务可以访问所需的 REST API。应用程序在其发送到 Google API 的 HTTP 请求的 "Authorization" 头中使用此访问令牌。这些 API 使用令牌来验证被模拟的身份并确认其拥有必要的授权。

  5. Google API 返回请求的数据: 如果访问令牌有效且服务账户具有适当的授权,Google API 将返回请求的数据。例如,在下图中,我们利用 users.messages.list 方法列出与目标 Workspace 用户关联的所有 Gmail 消息 ID。

支持 HackTricks

Last updated