GCP - Federation Abuse

htARTE (HackTricks AWS Red Team Expert) ile sıfırdan kahraman olmak için AWS hackleme öğrenin!

HackTricks'i desteklemenin diğer yolları:

OIDC - Github Actions Kötüye Kullanımı

GCP

Bir Github deposundan GCP hizmet hesabına Github Actions'a erişim vermek için aşağıdaki adımlar gereklidir:

  • İstenen izinlere sahip Github Actions'a erişmek için bir Hizmet Hesabı oluşturun:

projectId=FIXME
gcloud config set project $projectId

# Create the Service Account
gcloud iam service-accounts create "github-demo-sa"
saId="github-demo-sa@${projectId}.iam.gserviceaccount.com"

# Enable the IAM Credentials API
gcloud services enable iamcredentials.googleapis.com

# Give permissions to SA

gcloud projects add-iam-policy-binding $projectId \
--member="serviceAccount:$saId" \
--role="roles/iam.securityReviewer"
  • Yeni bir iş yükü kimlik havuzu oluşturun:

# Create a Workload Identity Pool
poolName=wi-pool

gcloud iam workload-identity-pools create $poolName \
--location global \
--display-name $poolName

poolId=$(gcloud iam workload-identity-pools describe $poolName \
--location global \
--format='get(name)')
  • Yeni bir iş yükü kimlik havuzu OIDC sağlayıcısı oluşturun ve bu durumda github eylemlerine (org/repo adına göre) güvenin:

attributeMappingScope=repository # could be sub (GitHub repository and branch) or repository_owner (GitHub organization)

gcloud iam workload-identity-pools providers create-oidc $poolName \
--location global \
--workload-identity-pool $poolName \
--display-name $poolName \
--attribute-mapping "google.subject=assertion.${attributeMappingScope},attribute.actor=assertion.actor,attribute.aud=assertion.aud,attribute.repository=assertion.repository" \
--issuer-uri "https://token.actions.githubusercontent.com"

providerId=$(gcloud iam workload-identity-pools providers describe $poolName \
--location global \
--workload-identity-pool $poolName \
--format='get(name)')
  • Son olarak, sağlayıcıdan hizmet sağlayıcısının kullanmasına izin verin:

gitHubRepoName="repo-org/repo-name"
gcloud iam service-accounts add-iam-policy-binding $saId \
--role "roles/iam.workloadIdentityUser" \
--member "principalSet://iam.googleapis.com/${poolId}/attribute.${attributeMappingScope}/${gitHubRepoName}"

Önceki üyede, servis hesabına erişmek için org-adı/repo-adı'yı koşullar olarak belirttiğimize dikkat edin (daha kısıtlayıcı olan şube gibi diğer parametreler de kullanılabilir).

Ancak, bir joker karakter kullanarak tüm github'ın servis hesabına erişmesine izin vermek de mümkündür. Aşağıdaki gibi bir sağlayıcı oluşturarak bunu yapabilirsiniz:

# Bir İş Yükü Kimlik Havuzu Oluşturun
poolName=wi-pool2

gcloud iam workload-identity-pools create $poolName \
--location global \
--display-name $poolName

poolId=$(gcloud iam workload-identity-pools describe $poolName \
--location global \
--format='get(name)')

gcloud iam workload-identity-pools providers create-oidc $poolName \
--project="${projectId}" \
--location="global" \
--workload-identity-pool="$poolName" \
--display-name="Demo sağlayıcısı" \
--attribute-mapping="google.subject=assertion.sub,attribute.actor=assertion.actor,attribute.aud=assertion.aud" \
--issuer-uri="https://token.actions.githubusercontent.com"

providerId=$(gcloud iam workload-identity-pools providers describe $poolName \
--location global \
--workload-identity-pool $poolName \
--format='get(name)')

# JOKER KARAKTERİ KONTROL EDİN
gcloud iam service-accounts add-iam-policy-binding "${saId}" \
--project="${projectId}" \
--role="roles/iam.workloadIdentityUser" \
  --member="principalSet://iam.googleapis.com/${poolId}/*"

Bu durumda, herhangi biri github actions üzerinden servis hesabına erişebilir, bu yüzden üyenin nasıl tanımlandığını her zaman kontrol etmek önemlidir. Her zaman şuna benzer bir şey olmalıdır:

attribute.{özel_nitelik}:principalSet://iam.googleapis.com/projects/{proje}/locations/{konum}/workloadIdentityPools/{havuz}/attribute.{özel_nitelik}/{değer}

Github

${providerId} ve ${saId} değerlerini ilgili değerlerle değiştirmeyi unutmayın:

name: Check GCP action
on:
workflow_dispatch:
pull_request:
branches:
- main

permissions:
id-token: write

jobs:
Get_OIDC_ID_token:
runs-on: ubuntu-latest
steps:
- id: 'auth'
name: 'Authenticate to GCP'
uses: 'google-github-actions/auth@v0.3.1'
with:
create_credentials_file: 'true'
workload_identity_provider: '${providerId}'
service_account: '${saId}'
- id: 'gcloud'
name: 'gcloud'
run: |-
gcloud auth login --brief --cred-file="${{ steps.auth.outputs.credentials_file_path }}"
gcloud auth list
gcloud projects list
AWS hackleme becerilerini sıfırdan kahraman seviyesine öğrenmek için htARTE (HackTricks AWS Kırmızı Takım Uzmanı)'a göz atın!

HackTricks'ı desteklemenin diğer yolları:

Last updated