GCP - Privilege Escalation

支持 HackTricks

GCP 权限提升简介

GCP 和其他云一样,有一些 主体:用户、组和服务账户,以及一些 资源,如计算引擎、云函数… 然后,通过角色,权限被授予这些主体对资源的访问。这就是在 GCP 中指定主体对资源的权限的方式。 有些权限将允许用户 获得更多权限,无论是在资源上还是第三方资源上,这就是所谓的 权限提升(此外,利用漏洞获取更多权限)。

因此,我想将 GCP 权限提升技术分为 2 组

  • 对主体的权限提升:这将允许你 冒充另一个主体,因此可以像它一样行事,拥有它的所有权限。例如:滥用 getAccessToken 来冒充服务账户。

  • 对资源的权限提升:这将允许你 获得特定资源的更多权限。例如:你可以滥用 setIamPolicy 权限来允许你触发云函数。

  • 请注意,一些 资源权限还将允许你将任意服务账户附加到资源。这意味着你将能够启动一个带有 SA 的资源,进入该资源,并 窃取 SA 令牌。因此,这将允许通过资源提升来提升到一个主体。这在以前的多个资源中发生过,但现在不太频繁(但仍然可能发生)。

显然,最有趣的权限提升技术是 第二组,因为它将允许你 在你已经拥有某些权限的资源之外获得更多权限。然而,请注意,在资源中提升 也可能使你访问 敏感信息 或甚至 其他主体(可能通过读取包含 SA 令牌的秘密)。

同样重要的是要注意,在 GCP 中,服务账户既是主体也是权限,因此在 SA 中提升权限也将允许你冒充它。

括号中的权限表示利用漏洞所需的权限,使用 gcloud。如果通过 API 利用,则可能不需要这些权限。

权限提升方法论

这就是我 测试特定权限 以在 GCP 内执行特定操作的方式。

  1. 在 tests/ 中添加新的脚本

绕过访问范围

从 GCP 元数据服务泄露的 SA 令牌具有 访问范围。这些是对令牌所拥有的 权限限制。例如,如果令牌具有 https://www.googleapis.com/auth/cloud-platform 范围,它将对所有 GCP 服务具有 完全访问权限。然而,如果令牌具有 https://www.googleapis.com/auth/cloud-platform.read-only 范围,它将仅对所有 GCP 服务具有 只读访问权限,即使 SA 在 IAM 中具有更多权限。

没有直接的方法可以绕过这些权限,但你可以始终尝试在被攻陷的主机中搜索 新凭据找到服务密钥 以生成没有限制的 OAuth 令牌,或 跳转到一个限制较少的不同 VM

当使用 访问范围 时,为计算实例(VM)生成的 OAuth 令牌将 包含 范围 限制。然而,你可能能够 绕过 这个限制并利用被攻陷账户所拥有的权限。

绕过 这个限制的 最佳方法 是在被攻陷的主机中 找到新凭据找到服务密钥以生成没有限制的 OAuth 令牌,或 攻陷一个限制较少的不同 VM

检查带有生成密钥的 SA:

for i in $(gcloud iam service-accounts list --format="table[no-heading](email)"); do
echo "Looking for keys for $i:"
gcloud iam service-accounts keys list --iam-account $i
done

权限提升技术

在 AWS 中提升权限的方法是拥有足够的权限,以便以某种方式访问其他服务帐户/用户/组的权限。通过链式提升,直到您获得组织的管理员访问权限。

GCP 有 数百(如果不是数千)个可以授予实体的 权限。在本书中,您可以找到 我所知道的所有权限,您可以利用这些权限来 提升权限,但如果您 知道一些未提及的路径请分享

本节的子页面按服务排序。您可以在每个服务中找到不同的权限提升方法。

利用 GCP 在本地提升权限

如果您在 GCP 的一台机器内部,您可能能够利用权限在本地提升权限:

GCP - local privilege escalation ssh pivoting

参考资料

支持 HackTricks

Last updated