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