GCP - IAM Privesc
IAM
Finde mehr Informationen über IAM in:
GCP - IAM, Principals & Org Policies Enumiam.roles.update
(iam.roles.get
)
iam.roles.update
(iam.roles.get
)Ein Angreifer mit den genannten Berechtigungen kann eine dir zugewiesene Rolle aktualisieren und dir zusätzliche Berechtigungen für andere Ressourcen geben wie:
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 Originalforschung.
iam.serviceAccounts.getAccessToken
(iam.serviceAccounts.get
)
iam.serviceAccounts.getAccessToken
(iam.serviceAccounts.get
)Ein Angreifer mit den genannten Berechtigungen wird in der Lage sein, ein Zugriffstoken anzufordern, das zu einem Service Account gehört, sodass es möglich ist, ein Zugriffstoken eines Service Accounts mit mehr Privilegien als unseren anzufordern.
Du findest ein Skript zur Automatisierung der Erstellung, Ausnutzung und Bereinigung einer verwundbaren Umgebung hier und ein Python-Skript zum Missbrauch dieses Privilegs hier. Für weitere Informationen siehe die Originalforschung.
iam.serviceAccountKeys.create
iam.serviceAccountKeys.create
Ein Angreifer mit den genannten Berechtigungen wird in der Lage sein, einen benutzerverwalteten Schlüssel für ein Service Account zu erstellen, was uns den Zugriff auf GCP als dieses Service Account ermöglicht.
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 Originalforschung.
Beachte, dass iam.serviceAccountKeys.update
nicht funktioniert, um den Schlüssel eines SA zu ändern, da dafür auch die Berechtigungen iam.serviceAccountKeys.create
benötigt werden.
iam.serviceAccounts.implicitDelegation
iam.serviceAccounts.implicitDelegation
Wenn du die iam.serviceAccounts.implicitDelegation
-Berechtigung auf einem Service Account hast, der die iam.serviceAccounts.getAccessToken
-Berechtigung auf einem dritten Service Account hat, kannst du implicitDelegation verwenden, um einen Token für diesen dritten Service Account zu erstellen. Hier ist ein Diagramm zur Erklärung.
![](https://cloud.hacktricks.xyz/~gitbook/image?url=https%3A%2F%2Frhinosecuritylabs.com%2Fwp-content%2Fuploads%2F2020%2F04%2Fimage2-500x493.png&width=768&dpr=4&quality=100&sign=eb0da8c5&sv=1)
Beachte, dass laut der Dokumentation die Delegation von gcloud
nur funktioniert, um einen Token mit der generateAccessToken()-Methode zu generieren. Hier ist, wie du einen Token direkt über die API erhältst:
Du findest ein Skript zur Automatisierung der Erstellung, Ausnutzung und Bereinigung einer verwundbaren Umgebung hier und ein Python-Skript zum Missbrauch dieses Privilegs hier. Für weitere Informationen siehe die Originalforschung.
iam.serviceAccounts.signBlob
iam.serviceAccounts.signBlob
Ein Angreifer mit den genannten Berechtigungen wird in der Lage sein, beliebige Nutzlasten in GCP zu signieren. Es wird also möglich sein, ein unsigniertes JWT des SA zu erstellen und es dann als Blob zu senden, um das JWT vom anvisierten SA signieren zu lassen. Für weitere Informationen lies dies.
Du findest ein Skript zur Automatisierung der Erstellung, Ausnutzung und Bereinigung einer verwundbaren Umgebung hier und ein Python-Skript zum Missbrauch dieses Privilegs hier und hier. Für weitere Informationen siehe die Originalforschung.
iam.serviceAccounts.signJwt
iam.serviceAccounts.signJwt
Ein Angreifer mit den genannten Berechtigungen wird in der Lage sein, wohlgeformte JSON Web Tokens (JWTs) zu signieren. Der Unterschied zur vorherigen Methode besteht darin, dass anstatt Google einen Blob signieren zu lassen, der ein JWT enthält, verwenden wir die signJWT-Methode, die bereits ein JWT erwartet. Dies macht es einfacher zu verwenden, aber man kann nur JWTs und keine beliebigen Bytes signieren.
Du findest ein Skript zur Automatisierung der Erstellung, Ausnutzung und Bereinigung einer verwundbaren Umgebung hier und ein Python-Skript zum Missbrauch dieses Privilegs hier. Für weitere Informationen siehe die Originalforschung.
iam.serviceAccounts.setIamPolicy
iam.serviceAccounts.setIamPolicy
Ein Angreifer mit den genannten Berechtigungen wird in der Lage sein, IAM-Richtlinien zu Servicekonten hinzuzufügen. Du kannst dies ausnutzen, um dir selbst die Berechtigungen zu erteilen, die du benötigst, um das Servicekonto zu imitieren. Im folgenden Beispiel gewähren wir uns selbst die Rolle roles/iam.serviceAccountTokenCreator
über das interessante SA:
Du findest ein Skript zur Automatisierung der Erstellung, Ausnutzung und Bereinigung einer verwundbaren Umgebung hier.
iam.serviceAccounts.actAs
iam.serviceAccounts.actAs
Die iam.serviceAccounts.actAs-Berechtigung ist wie die iam:PassRole-Berechtigung von AWS. Sie ist wesentlich für die Ausführung von Aufgaben, wie das Starten einer Compute Engine-Instanz, da sie die Fähigkeit verleiht, als Service Account zu agieren und so ein sicheres Berechtigungsmanagement gewährleistet. Ohne diese Berechtigung könnten Benutzer ungebührlichen Zugriff erlangen. Darüber hinaus umfasst die Ausnutzung der iam.serviceAccounts.actAs verschiedene Methoden, die jeweils eine Reihe von Berechtigungen erfordern, im Gegensatz zu anderen Methoden, die nur eine benötigen.
Service Account-Impersonation
Das Nachahmen eines Service Accounts kann sehr nützlich sein, um neue und bessere Privilegien zu erlangen. Es gibt drei Möglichkeiten, wie du einen anderen Service Account nachahmen kannst:
Authentifizierung mit RSA-Privatschlüsseln (oben behandelt)
Autorisierung mit Cloud IAM-Richtlinien (hier behandelt)
Bereitstellung von Jobs auf GCP-Diensten (mehr anwendbar auf die Kompromittierung eines Benutzerkontos)
iam.serviceAccounts.getOpenIdToken
iam.serviceAccounts.getOpenIdToken
Ein Angreifer mit den genannten Berechtigungen wird in der Lage sein, ein OpenID JWT zu generieren. Diese werden verwendet, um Identität zu bestätigen und tragen nicht notwendigerweise eine implizite Autorisierung gegen eine Ressource.
Laut diesem interessanten Beitrag ist es notwendig, das Publikum (den Dienst, bei dem du das Token zur Authentifizierung verwenden möchtest) anzugeben, und du erhältst ein von Google signiertes JWT, das den Service Account und das Publikum des JWT angibt.
Du kannst ein OpenIDToken (wenn du den Zugriff hast) mit folgendem Befehl generieren:
Dann können Sie es einfach verwenden, um auf den Dienst zuzugreifen mit:
Einige Dienste, die die Authentifizierung über diese Art von Tokens unterstützen, sind:
Google Cloud Endpoints (bei Verwendung von Google OIDC)
Ein Beispiel, wie man ein OpenID-Token im Namen eines Servicekontos erstellt, finden Sie hier.
Referenzen
Last updated