GCP - IAM Privesc
IAM
在以下位置查找有关 IAM 的更多信息:
GCP - IAM, Principals & Org Policies Enumiam.roles.update
(iam.roles.get
)
iam.roles.update
(iam.roles.get
)具有上述权限的攻击者将能够更新分配给您的角色,并为您提供对其他资源的额外权限,例如:
你可以在这里找到一个自动化创建、利用和清理漏洞环境的脚本,以及一个滥用此权限的python脚本。更多信息请查看原始研究。
iam.serviceAccounts.getAccessToken
(iam.serviceAccounts.get
)
iam.serviceAccounts.getAccessToken
(iam.serviceAccounts.get
)具有上述权限的攻击者将能够请求属于服务账户的访问令牌,因此可以请求比我们拥有更多权限的服务账户的访问令牌。
你可以在这里找到一个自动化脚本,用于创建、利用和清理漏洞环境,以及一个用于滥用此权限的python脚本这里。更多信息请查看原始研究。
iam.serviceAccountKeys.create
iam.serviceAccountKeys.create
具有上述权限的攻击者将能够为服务账户创建一个用户管理的密钥,这将允许我们以该服务账户的身份访问GCP。
你可以在这里找到一个自动化创建、利用和清理漏洞环境的脚本,并在这里找到一个滥用此权限的python脚本。更多信息请查看原始研究。
注意,iam.serviceAccountKeys.update
不能修改 SA 的密钥,因为要做到这一点还需要 iam.serviceAccountKeys.create
权限。
iam.serviceAccounts.implicitDelegation
iam.serviceAccounts.implicitDelegation
如果你对一个具有 iam.serviceAccounts.getAccessToken
权限的服务账户拥有 iam.serviceAccounts.implicitDelegation
权限,那么你可以使用 implicitDelegation 为该第三方服务账户创建一个令牌。以下是一个帮助解释的图表。
![](https://cloud.hacktricks.xyz/~gitbook/image?url=https%3A%2F%2Frhinosecuritylabs.com%2Fwp-content%2Fuploads%2F2020%2F04%2Fimage2-500x493.png&width=768&dpr=4&quality=100&sign=eb0da8c5&sv=1)
请注意,根据文档,gcloud
的委托仅适用于使用 generateAccessToken() 方法生成令牌。因此,以下是如何直接使用 API 获取令牌的方法:
你可以在这里找到一个脚本来自动化[创建、利用和清理漏洞环境],并在这里找到一个滥用此权限的python脚本。更多信息请查看原始研究。
iam.serviceAccounts.signBlob
iam.serviceAccounts.signBlob
具有上述权限的攻击者将能够在GCP中签署任意负载。因此,可以创建SA的未签名JWT,然后将其作为blob发送以获取SA签署的JWT。更多信息请阅读此文。
你可以在这里找到一个脚本来自动化[创建、利用和清理漏洞环境],并在这里和这里找到滥用此权限的python脚本。更多信息请查看原始研究。
iam.serviceAccounts.signJwt
iam.serviceAccounts.signJwt
具有上述权限的攻击者将能够签署格式良好的JSON web tokens (JWTs)。与前一种方法的区别在于,我们使用signJWT方法,它已经期望一个JWT,而不是让google签署包含JWT的blob。这使得使用更简单,但你只能签署JWT而不是任何字节。
你可以在这里找到一个脚本来自动化[创建、利用和清理漏洞环境],并在这里找到滥用此权限的python脚本。更多信息请查看原始研究。
iam.serviceAccounts.setIamPolicy
iam.serviceAccounts.setIamPolicy
具有上述权限的攻击者将能够向服务账户添加IAM策略。你可以滥用它来授予自己模拟服务账户所需的权限。在以下示例中,我们授予自己对感兴趣的SA的roles/iam.serviceAccountTokenCreator
角色:
你可以找到一个脚本来自动化创建、利用和清理漏洞环境。
iam.serviceAccounts.actAs
iam.serviceAccounts.actAs
iam.serviceAccounts.actAs 权限类似于AWS 的 iam:PassRole 权限。它对于执行任务至关重要,比如启动 Compute Engine 实例,因为它授予“actAs”服务账户的能力,确保安全的权限管理。没有这个权限,用户可能会获得不当的访问权限。此外,利用iam.serviceAccounts.actAs涉及多种方法,每种方法都需要一组权限,这与其他只需要一种权限的方法形成对比。
服务账户模拟
模拟服务账户对于获取新的和更好的权限非常有用。你可以通过三种方式模拟另一个服务账户:
使用 RSA 私钥进行身份验证(上面已介绍)
使用 Cloud IAM 策略进行授权(此处介绍)
在 GCP 服务上部署作业(更适用于用户账户的妥协)
iam.serviceAccounts.getOpenIdToken
iam.serviceAccounts.getOpenIdToken
拥有上述权限的攻击者将能够生成一个 OpenID JWT。这些用于断言身份,并不一定对资源具有任何隐含的授权。
根据这篇有趣的文章,需要指明受众(你想用该令牌进行身份验证的服务),你将收到一个由 Google 签名的 JWT,指示服务账户和 JWT 的受众。
你可以生成一个 OpenIDToken(如果你有访问权限)使用:
然后你可以用它来访问服务:
一些支持通过这种令牌进行身份验证的服务包括:
Google Cloud Endpoints (如果使用 Google OIDC)
你可以在这里找到一个如何代表服务账户创建 OpenID 令牌的示例。
参考资料
Last updated