Μοιραστείτε τα κόλπα σας για το hacking υποβάλλοντας PRs σταHackTricks και HackTricks Cloud αποθετήρια του github.
OIDC - Κατάχρηση των Github Actions
GCP
Για να δοθεί πρόσβαση στις Github Actions από ένα αποθετήριο Github σε έναν λογαριασμό υπηρεσίας GCP, απαιτούνται τα εξής βήματα:
Δημιουργία του λογαριασμού υπηρεσίας για πρόσβαση από τις Github Actions με τα επιθυμητά δικαιώματα:
projectId=FIXMEgcloudconfigsetproject $projectId# Create the Service Accountgcloudiamservice-accountscreate"github-demo-sa"saId="github-demo-sa@${projectId}.iam.gserviceaccount.com"# Enable the IAM Credentials APIgcloudservicesenableiamcredentials.googleapis.com# Give permissions to SAgcloudprojectsadd-iam-policy-binding $projectId \--member="serviceAccount:$saId" \--role="roles/iam.securityReviewer"
Δημιουργήστε ένα νέο πιστοποιητικό πιστοποίησης φορτίου εργασίας:
# Create a Workload Identity PoolpoolName=wi-poolgcloudiamworkload-identity-poolscreate $poolName \--location global \--display-name $poolNamepoolId=$(gcloudiamworkload-identity-poolsdescribe $poolName \--location global \--format='get(name)')
Δημιουργήστε έναν νέο πάροχο OIDC για την πιστοποίηση ταυτότητας της workload identity pool που εμπιστεύεται τις ενέργειες του GitHub (ανάλογα με το όνομα του οργανισμού/αποθετηρίου σε αυτό το σενάριο):
attributeMappingScope=repository # could be sub (GitHub repository and branch) or repository_owner (GitHub organization)
gcloudiamworkload-identity-poolsproviderscreate-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=$(gcloudiamworkload-identity-poolsprovidersdescribe $poolName \--location global \--workload-identity-pool $poolName \--format='get(name)')
Τέλος, επιτρέψτε στον κύριο από τον πάροχο να χρησιμοποιήσει έναν υπηρεσιακό κύριο:
Σημειώστε ότι στο προηγούμενο μέλος καθορίζουμε το org-name/repo-name ως προϋπόθεση για να έχουμε πρόσβαση στον λογαριασμό υπηρεσίας (μπορούν επίσης να χρησιμοποιηθούν άλλες παράμετροι που το καθιστούν πιο περιοριστικό, όπως ο κλάδος).
Ωστόσο, είναι επίσης δυνατόν να επιτραπεί η πρόσβαση όλων των github στον λογαριασμό υπηρεσίας δημιουργώντας έναν πάροχο όπως ο παρακάτω χρησιμοποιώντας μια μπαλαντέρ:
# Δημιουργία ενός Workload Identity PoolpoolName=wi-pool2gcloudiamworkload-identity-poolscreate $poolName \--location global \--display-name $poolNamepoolId=$(gcloudiamworkload-identity-poolsdescribe $poolName \--location global \--format='get(name)')gcloudiamworkload-identity-poolsproviderscreate-oidc $poolName \--project="${projectId}" \--location="global" \--workload-identity-pool="$poolName" \--display-name="Πάροχος επίδειξης" \--attribute-mapping="google.subject=assertion.sub,attribute.actor=assertion.actor,attribute.aud=assertion.aud" \--issuer-uri="https://token.actions.githubusercontent.com"providerId=$(gcloudiamworkload-identity-poolsprovidersdescribe $poolName \--location global \--workload-identity-pool $poolName \--format='get(name)')# ΕΛΕΓΞΤΕ ΤΗΝ ΜΠΑΛΑΝΤΕΡgcloudiamservice-accountsadd-iam-policy-binding"${saId}" \--project="${projectId}" \--role="roles/iam.workloadIdentityUser" \--member="principalSet://iam.googleapis.com/${poolId}/*"
Σε αυτήν την περίπτωση, οποιοσδήποτε μπορεί να έχει πρόσβαση στον λογαριασμό υπηρεσίας από τις ενέργειες του github, επομένως είναι σημαντικό να ελέγχετε πάντα πώς ορίζεται το μέλος.
Πρέπει πάντα να είναι κάτι τέτοιο: