GCP - IAM Privesc

Lernen Sie AWS-Hacking von Grund auf mit htARTE (HackTricks AWS Red Team Expert)!

Andere Möglichkeiten, HackTricks zu unterstützen:

IAM

Finden Sie weitere Informationen zu IAM unter:

pageGCP - IAM, Principals & Org Policies Enum

iam.roles.update (iam.roles.get)

Ein Angreifer mit den genannten Berechtigungen kann eine Rolle aktualisieren, die Ihnen zugewiesen ist, und Ihnen zusätzliche Berechtigungen für andere Ressourcen geben, wie:

gcloud iam roles update <rol name> --project <project> --add-permissions <permission>

Du findest ein Skript zur Automatisierung der Erstellung, Ausnutzung und Bereinigung einer verwundbaren Umgebung hier und ein Python-Skript zur Ausnutzung dieses Privilegs hier. Für weitere Informationen siehe die ursprüngliche Forschung.

iam.serviceAccounts.getAccessToken (iam.serviceAccounts.get)

Ein Angreifer mit den genannten Berechtigungen kann einen Zugriffstoken anfordern, der zu einem Dienstkontos gehört, sodass es möglich ist, einen Zugriffstoken eines Dienstkontos mit mehr Berechtigungen als unseren anzufordern.

Du findest ein Skript zur Automatisierung der Erstellung, Ausnutzung und Bereinigung einer verwundbaren Umgebung hier und ein Python-Skript zur Ausnutzung dieses Privilegs hier. Für weitere Informationen siehe die ursprüngliche Forschung.

iam.serviceAccountKeys.create

Ein Angreifer mit den genannten Berechtigungen kann einen benutzerverwalteten Schlüssel für ein Dienstkonto erstellen, was es uns ermöglicht, auf GCP als dieses Dienstkonto zuzugreifen.

gcloud iam service-accounts keys create --iam-account <name> /tmp/key.json

gcloud auth activate-service-account --key-file=sa_cred.json

Sie finden ein Skript zur Automatisierung der Erstellung, Ausnutzung und Bereinigung einer verwundbaren Umgebung hier und ein Python-Skript, um dieses Privileg zu missbrauchen hier. Weitere Informationen finden Sie in der ursprünglichen Forschung.

Beachten Sie, dass iam.serviceAccountKeys.update nicht funktioniert, um den Schlüssel eines SA zu ändern, da dafür auch die Berechtigung iam.serviceAccountKeys.create benötigt wird.

iam.serviceAccounts.implicitDelegation

Wenn Sie die Berechtigung iam.serviceAccounts.implicitDelegation für einen Service Account haben, der die Berechtigung iam.serviceAccounts.getAccessToken für einen dritten Service Account hat, können Sie die implicitDelegation verwenden, um einen Token für diesen dritten Service Account zu erstellen. Hier ist ein Diagramm zur Erläuterung.

Sie finden ein Skript zur Automatisierung der Erstellung, Ausnutzung und Bereinigung einer verwundbaren Umgebung hier und ein Python-Skript, um dieses Privileg zu missbrauchen hier. Weitere Informationen finden Sie in der ursprünglichen Forschung.

Laut der Dokumentation funktioniert die Delegation nur, um einen Token mithilfe der Methode generateAccessToken() zu generieren.

iam.serviceAccounts.signBlob

Ein Angreifer mit den genannten Berechtigungen kann beliebige Payloads in GCP signieren. Es wird also möglich sein, ein nicht signiertes JWT des SA zu erstellen und es dann als Blob zu senden, um das JWT vom anvisierten SA signieren zu lassen. Weitere Informationen finden Sie hier.

Sie finden ein Skript zur Automatisierung der Erstellung, Ausnutzung und Bereinigung einer verwundbaren Umgebung hier und ein Python-Skript, um dieses Privileg zu missbrauchen hier und hier. Weitere Informationen finden Sie in der ursprünglichen Forschung.

iam.serviceAccounts.signJwt

Ein Angreifer mit den genannten Berechtigungen kann wohlgeformte JSON-Webtokens (JWTs) signieren. Der Unterschied zur vorherigen Methode besteht darin, dass anstatt Google einen Blob signieren zu lassen, der ein JWT enthält, die Methode signJWT verwendet wird, die bereits ein JWT erwartet. Dies macht die Verwendung einfacher, aber Sie können nur JWT anstelle von beliebigen Bytes signieren.

Sie finden ein Skript zur Automatisierung der Erstellung, Ausnutzung und Bereinigung einer verwundbaren Umgebung hier und ein Python-Skript, um dieses Privileg zu missbrauchen hier. Weitere Informationen finden Sie in der ursprünglichen Forschung.

iam.serviceAccounts.setIamPolicy

Ein Angreifer mit den genannten Berechtigungen kann IAM-Richtlinien für Service Accounts hinzufügen. Sie können es missbrauchen, um sich die Berechtigungen zu gewähren, die Sie benötigen, um den Service Account zu übernehmen. Im folgenden Beispiel gewähren wir uns die Rolle roles/iam.serviceAccountTokenCreator über den interessanten SA:

gcloud iam service-accounts add-iam-policy-binding "${VICTIM_SA}@${PROJECT_ID}.iam.gserviceaccount.com" \
--member="user:username@domain.com" \
--role="roles/iam.serviceAccountTokenCreator"

iam.serviceAccounts.actAs

Die iam.serviceAccounts.actAs-Berechtigung ist ähnlich wie die iam:PassRole-Berechtigung von AWS. Sie ist entscheidend für die Ausführung von Aufgaben, wie das Initiieren einer Compute Engine-Instanz, da sie die Fähigkeit verleiht, "als" ein Dienstkonto zu handeln, was eine sichere Berechtigungsverwaltung gewährleistet. Ohne diese Berechtigung könnten Benutzer unangemessenen Zugriff erlangen. Darüber hinaus beinhaltet die Ausnutzung von iam.serviceAccounts.actAs verschiedene Methoden, von denen jede einen Satz von Berechtigungen erfordert, im Gegensatz zu anderen Methoden, die nur eine benötigen.

Servicekontenimitation

Die Imitation eines Dienstkontos kann sehr nützlich sein, um neue und bessere Privilegien zu erlangen. Es gibt drei Möglichkeiten, auf die Sie ein anderes Dienstkonto imitieren können:

  • Authentifizierung mit RSA-Privatschlüsseln (oben behandelt)

  • Autorisierung unter Verwendung von Cloud IAM-Richtlinien (hier behandelt)

  • Bereitstellen von Jobs auf GCP-Diensten (eher anwendbar auf die Kompromittierung eines Benutzerkontos)

iam.serviceAccounts.getOpenIdToken

Ein Angreifer mit den genannten Berechtigungen kann ein OpenID JWT generieren. Diese werden verwendet, um Identität zu bestätigen und tragen nicht unbedingt eine implizite Autorisierung gegenüber einer Ressource.

Laut diesem interessanten Beitrag ist es notwendig, das Publikum anzugeben (Dienst, für den Sie das Token verwenden möchten, um sich zu authentifizieren), und Sie erhalten ein von Google signiertes JWT, das das Dienstkonto und das Publikum des JWT angibt.

Sie können ein OpenIDToken generieren (wenn Sie Zugriff haben) mit:

# First activate the SA with iam.serviceAccounts.getOpenIdToken over the other SA
gcloud auth activate-service-account --key-file=/path/to/svc_account.json
# Then, generate token
gcloud auth print-identity-token "${ATTACK_SA}@${PROJECT_ID}.iam.gserviceaccount.com" --audiences=https://example.com

Dann können Sie es einfach verwenden, um auf den Dienst zuzugreifen:

curl -v -H "Authorization: Bearer id_token" https://some-cloud-run-uc.a.run.app

Einige Dienste, die die Authentifizierung über diese Art von Tokens unterstützen, sind:

Ein Beispiel, wie man im Namen eines Dienstkontos ein OpenID-Token erstellt, finden Sie hier.

Referenzen

Erlernen Sie AWS-Hacking von Grund auf mit htARTE (HackTricks AWS Red Team Expert)!

Andere Möglichkeiten, HackTricks zu unterstützen:

Last updated