GCP <--> Workspace Pivoting
学习并练习AWS Hacking:HackTricks 培训 AWS 红队专家 (ARTE)
学习并练习GCP Hacking:
HackTricks 培训 GCP 红队专家 (GRTE)
从 GCP 到 GWS
域范围委托基础知识
Google Workspace 的域范围委托允许一个身份对象,可以是来自 Google Workspace Marketplace 的外部应用,也可以是内部的GCP 服务账号,代表用户跨 Workspace 访问数据。
这基本上意味着,在一个组织的 GCP 项目中的服务账号可能能够冒充同一组织的 Workspace 用户(甚至来自不同组织)。
有关此工作原理的更多信息,请查看:
GCP - Understanding Domain-Wide Delegation窃取现有委托
如果攻击者窃取了对 GCP 的某些访问权限并且知道了公司一个有效的 Workspace 用户邮箱(最好是超级管理员),他可以枚举所有项目,枚举所有项目的 SAs,检查他可以访问哪些服务账号,并重复所有这些步骤以每个可以冒充的 SA。 有了他可以访问的所有服务账号列表和Workspace 邮箱列表,攻击者可以尝试用每个服务账号冒充用户。
请注意,在配置域范围委托时不需要 Workspace 用户,因此只需知道一个有效用户足以进行冒充。 但是,将使用被冒充用户的权限,因此如果是超级管理员,您将能够访问所有内容。如果没有任何访问权限,则这将是无用的。
这个简单的脚本将生成一个 OAuth 令牌作为被委托用户,然后您可以使用它来访问其他 Google API,无论是否使用 gcloud
:
这是一个工具,可以执行以下攻击步骤:
使用资源管理器 API 枚举 GCP 项目。
针对每个项目资源进行迭代,并使用 GetIAMPolicy 枚举初始 IAM 用户具有访问权限的 GCP 服务账户资源。
针对每个服务账户角色进行迭代,并查找具有目标服务账户资源上 serviceAccountKeys.create 权限的内置、基本和自定义角色。值得注意的是,编辑者角色本质上具有此权限。
为在 IAM 策略中找到相关权限的每个服务账户资源创建一个新的
KEY_ALG_RSA_2048
私钥。针对每个新服务账户创建一个
JWT
对象,该对象由 SA 私钥凭据和一个 OAuth 作用域组成。创建新 JWT 对象的过程将迭代所有现有的 OAuth 作用域组合,以便找到所有的委托可能性。列表 oauth_scopes.txt 已更新,其中包含我们发现用于滥用 Workspace 身份的所有相关 OAuth 作用域。_make_authorization_grant_assertion
方法揭示了声明一个目标 Workspace 用户(称为 subject)以在 DWD 下生成 JWT 的必要性。虽然这似乎需要一个特定用户,但重要的是要意识到DWD 影响域内的每个身份。因此,为任何域用户创建 JWT 会影响该域内的所有身份,与我们的组合枚举检查一致。简而言之,一个有效的 Workspace 用户足以继续前进。 可以在 DeleFriend 的 config.yaml 文件中定义此用户。如果目标 Workspace 用户尚未知晓,该工具通过扫描在 GCP 项目上具有角色的域用户来自动识别有效的 Workspace 用户。需要注意的是 JWT 是特定于域的,不会为每个用户生成;因此,自动流程针对每个域的单个唯一身份。枚举并为每个 JWT 创建一个新的承载访问令牌,并针对 tokeninfo API 验证令牌。
Gitlab 创建了此 Python 脚本,可以执行两项操作 - 列出用户目录并创建一个新的管理账户,同时指示一个包含 SA 凭据和要冒充的用户的 json。以下是如何使用它:
创建新委托(持久性)
可以在https://admin.google.com/u/1/ac/owl/domainwidedelegation中检查域范围委托。
拥有在GCP项目中创建服务账号和GWS超级管理员特权的攻击者可以创建新的委托,允许服务账号冒充一些GWS用户:
生成新的服务账号和相应的密钥对: 在GCP上,可以通过控制台交互式地创建新的服务账号资源,也可以使用直接API调用和CLI工具进行编程生成。这需要角色
iam.serviceAccountAdmin
或任何配备iam.serviceAccounts.create
权限的自定义角色。一旦服务账号创建完成,我们将继续生成相关的密钥对(**iam.serviceAccountKeys.create
**权限)。创建新的委托: 重要的是要了解只有超级管理员角色具有在Google Workspace中设置全局域委托的能力,域委托不能通过编程方式设置,只能通过Google Workspace 控制台进行手动创建和调整。
规则的创建可以在页面API控制 → 在Google Workspace管理控制台中管理域委托下找到。
附加OAuth范围权限: 在配置新委托时,Google只需要2个参数,即客户端ID,即GCP服务账号资源的OAuth ID,以及定义委托需要的OAuth范围。
可以在这里找到完整的OAuth范围列表,但这里有一个建议:
https://www.googleapis.com/auth/userinfo.email, https://www.googleapis.com/auth/cloud-platform, https://www.googleapis.com/auth/admin.directory.group, https://www.googleapis.com/auth/admin.directory.user, https://www.googleapis.com/auth/admin.directory.domain, https://mail.google.com/, https://www.googleapis.com/auth/drive, openid
代表目标身份行事: 现在,在GWS中我们有一个正常运行的委托对象。现在,使用GCP服务账号私钥,我们可以执行API调用(在OAuth范围参数中定义的范围内)来触发它,并代表Google Workspace中存在的任何身份行事。正如我们所了解的,服务账号将根据其需要生成访问令牌,并根据其对REST API应用程序的权限进行操作。
检查前一节以了解一些工具来使用此委托。
跨组织委托
OAuth SA ID是全局的,可用于跨组织委托。尚未实施任何限制以防止跨全局委托。简单来说,来自不同GCP组织的服务账号可以用于在其他Workspace组织上配置域委托。这将导致只需要对Workspace具有超级管理员访问权限,而不需要访问相同的GCP账户,因为对手可以在其个人控制的GCP账户上创建服务账号和私钥。
创建用于枚举Workspace的项目
默认情况下,Workspace 用户具有创建新项目的权限,当创建新项目时,创建者将获得Owner角色。
因此,用户可以创建一个项目,启用API来在他的新项目中枚举Workspace,并尝试枚举它。
为了使用户能够枚举Workspace,他还需要足够的Workspace权限(不是每个用户都能够枚举目录)。
检查更多枚举:
GCP - IAM, Principals & Org Policies Enum滥用 Gcloud
您可以在以下位置找到有关gcloud
登录流程的更多信息:
如上所述,gcloud 可以请求范围https://www.googleapis.com/auth/drive
,这将允许用户访问用户的驱动器。
作为攻击者,如果您已经物理入侵了用户的计算机且用户仍然登录帐户,您可以生成一个具有访问驱动器权限的令牌进行登录:
如果攻击者入侵了用户的计算机,他还可以修改文件 google-cloud-sdk/lib/googlecloudsdk/core/config.py
,在 CLOUDSDK_SCOPES
中添加作用域 'https://www.googleapis.com/auth/drive'
:
![](https://cloud.hacktricks.xyz/~gitbook/image?url=https%3A%2F%2F366839394-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FEYi4M21WX4icNxsN0fBC%252Fuploads%252Fgit-blob-e9a307fc7f84e84b728826ef99237ceb33b83850%252Fimage%2520%28342%29.png%3Falt%3Dmedia&width=768&dpr=4&quality=100&sign=6f58a97d&sv=1)
因此,下次用户登录时,他将创建一个具有访问驱动器权限的令牌,攻击者可以利用这个令牌访问驱动器。显然,浏览器将指示生成的令牌将具有访问驱动器的权限,但由于用户将调用 gcloud auth login
,他可能不会怀疑任何事情。
列出驱动器文件:curl -H "Authorization: Bearer $(gcloud auth print-access-token)" "https://www.googleapis.com/drive/v3/files"
从 GWS 到 GCP
访问特权的 GCP 用户
如果攻击者完全控制了 GWS,他将能够访问具有对 GCP 特权访问权限的组,甚至用户,因此从 GWS 到 GCP 的移动通常更加“简单”,因为在 GWS 中的用户对 GCP 有很高的特权。
Google Groups 特权升级
默认情况下,用户可以自由加入组织的 Workspace 组,这些组可能分配了 GCP 权限(检查您的组在 https://groups.google.com/)。
通过滥用google groups privesc,您可能能够升级到具有某种特权访问权限的 GCP 组。
参考资料
学习并练习 AWS 黑客技术:HackTricks 培训 AWS 红队专家 (ARTE)
学习并练习 GCP 黑客技术:
HackTricks 培训 GCP 红队专家 (GRTE)
Last updated