# GCP - IAM Post Exploitation

{{#include ../../../banners/hacktricks-training.md}}

## IAM <a href="#service-account-impersonation" id="service-account-impersonation"></a>

You can find further information about IAM in:

{{#ref}}
../gcp-services/gcp-iam-and-org-policies-enum.md
{{#endref}}

### Concedere l'accesso alla console di gestione <a href="#granting-access-to-management-console" id="granting-access-to-management-console"></a>

L'accesso alla [GCP management console](https://console.cloud.google.com) è **fornito agli account utente, non agli account di servizio**. Per effettuare il login all'interfaccia web, puoi **concedere l'accesso a un account Google** che controlli. Può essere un account generico "**@gmail.com**", non è **necessario che sia membro dell'organizzazione bersaglio**.

Per concedere il ruolo primitivo di **Owner** a un account generico "@gmail.com", però, dovrai **utilizzare la console web**. `gcloud` genererà un errore se provi a concedergli un permesso superiore a Editor.

Puoi usare il seguente comando per **concedere a un utente il ruolo primitivo di Editor** al tuo progetto esistente:
```bash
gcloud projects add-iam-policy-binding [PROJECT] --member user:[EMAIL] --role roles/editor
```
Se ci sei riuscito qui, prova a **accedere all'interfaccia web** ed esplorare da lì.

Questo è il **livello più alto che puoi assegnare usando lo strumento gcloud**.

### Eliminare componenti IAM `iam.*.delete`
Le autorizzazioni `iam.*.delete` (ad es., `iam.roles.delete`, `iam.serviceAccountApiKeyBindings.delete`, `iam.serviceAccountKeys.delete`, etc.) permettono a un'identità di eliminare componenti IAM critici come custom roles, API key bindings, service account keys e gli stessi service accounts. Nelle mani di un attacker, questo rende possibile rimuovere meccanismi di accesso legittimi al fine di causare un denial of service.

Per eseguire un tale attacco, è possibile, ad esempio, eliminare i roles usando:
```bash
gcloud iam roles delete <ROLE_ID> --project=<PROJECT_ID>
```
### `iam.serviceAccountKeys.disable` || `iam.serviceAccounts.disable`

Le autorizzazioni `iam.serviceAccountKeys.disable` e `iam.serviceAccounts.disable` consentono di disabilitare chiavi attive di service account o i service account stessi, che nelle mani di un attaccante potrebbero essere usate per interrompere le operazioni, causare denial of service o ostacolare la risposta agli incidenti impedendo l'uso di credenziali legittime.

Per disabilitare un service account, puoi usare il seguente comando:
```bash
gcloud iam service-accounts disable <SA_EMAIL> --project=<PROJECT_ID>
```
Per disabilitare le chiavi di un Service Account, puoi usare il seguente comando:
```bash
gcloud iam service-accounts keys disable <KEY_ID> --iam-account=<SA_EMAIL>
```
### `iam.*.undelete`
Le autorizzazioni `iam.*.undelete` permettono di ripristinare elementi precedentemente eliminati, come API key bindings, custom roles o service accounts. Nelle mani di un attacker, questo può essere usato per reverse defensive actions (recover removed access), re-establish deleted compromise vectors to maintain persistence, o evadere remediation efforts, complicando incident containment.
```bash
gcloud iam service-accounts undelete "${SA_ID}" --project="${PROJECT}"
```
{{#include ../../../banners/hacktricks-training.md}}
