GCP - IAM Privesc
IAM
Trova ulteriori informazioni su IAM in:
pageGCP - IAM, Principals & Org Policies Enumiam.roles.update
(iam.roles.get
)
iam.roles.update
(iam.roles.get
)Un attaccante con i permessi menzionati sarà in grado di aggiornare un ruolo assegnato a te e darti ulteriori permessi su altre risorse come:
Puoi trovare uno script per automatizzare la creazione, l'exploit e la pulizia di un ambiente vulnerabile qui e uno script python per abusare di questo privilegio qui. Per ulteriori informazioni consulta la ricerca originale.
iam.serviceAccounts.getAccessToken
(iam.serviceAccounts.get
)
iam.serviceAccounts.getAccessToken
(iam.serviceAccounts.get
)Un attaccante con i permessi menzionati sarà in grado di richiedere un token di accesso che appartiene a un Service Account, quindi è possibile richiedere un token di accesso di un Service Account con privilegi superiori ai nostri.
Puoi trovare uno script per automatizzare la creazione, l'exploit e la pulizia di un ambiente vulnerabile qui e uno script python per abusare di questo privilegio qui. Per ulteriori informazioni consulta la ricerca originale.
iam.serviceAccountKeys.create
iam.serviceAccountKeys.create
Un attaccante con i permessi menzionati sarà in grado di creare una chiave gestita dall'utente per un Service Account, che ci permetterà di accedere a GCP come quel Service Account.
Puoi trovare uno script per automatizzare la creazione, sfruttamento e pulizia di un ambiente vulnerabile qui e uno script python per abusare di questo privilegio qui. Per ulteriori informazioni consulta la ricerca originale.
Nota che iam.serviceAccountKeys.update
non funzionerà per modificare la chiave di un SA perché per farlo è necessario anche il permesso iam.serviceAccountKeys.create
.
iam.serviceAccounts.implicitDelegation
iam.serviceAccounts.implicitDelegation
Se hai il permesso iam.serviceAccounts.implicitDelegation
su un Service Account che ha il permesso iam.serviceAccounts.getAccessToken
su un terzo Service Account, allora puoi utilizzare l'implicitDelegation per creare un token per quel terzo Service Account. Qui c'è un diagramma per aiutare a spiegare.
Puoi trovare uno script per automatizzare la creazione, sfruttamento e pulizia di un ambiente vulnerabile qui e uno script python per abusare di questo privilegio qui. Per ulteriori informazioni consulta la ricerca originale.
Nota che secondo la documentazione, la delega funziona solo per generare un token utilizzando il metodo generateAccessToken().
iam.serviceAccounts.signBlob
iam.serviceAccounts.signBlob
Un attaccante con i permessi menzionati sarà in grado di firmare payload arbitrari in GCP. Quindi sarà possibile creare un JWT non firmato dell'SA e quindi inviarlo come un blob per ottenere il JWT firmato dall'SA che stiamo mirando. Per ulteriori informazioni leggi questo.
Puoi trovare uno script per automatizzare la creazione, sfruttamento e pulizia di un ambiente vulnerabile qui e uno script python per abusare di questo privilegio qui e qui. Per ulteriori informazioni consulta la ricerca originale.
iam.serviceAccounts.signJwt
iam.serviceAccounts.signJwt
Un attaccante con i permessi menzionati sarà in grado di firmare JSON web token (JWT) ben formati. La differenza con il metodo precedente è che anziché far firmare a Google un blob contenente un JWT, utilizziamo il metodo signJWT che si aspetta già un JWT. Questo rende più facile da usare ma è possibile firmare solo JWT anziché qualsiasi byte.
Puoi trovare uno script per automatizzare la creazione, sfruttamento e pulizia di un ambiente vulnerabile qui e uno script python per abusare di questo privilegio qui. Per ulteriori informazioni consulta la ricerca originale.
iam.serviceAccounts.setIamPolicy
iam.serviceAccounts.setIamPolicy
Un attaccante con i permessi menzionati sarà in grado di aggiungere politiche IAM agli account di servizio. Puoi sfruttarlo per concederti i permessi necessari per impersonare l'account di servizio. Nell'esempio seguente ci stiamo concedendo il ruolo roles/iam.serviceAccountTokenCreator
sull'account di servizio interessante:
Puoi trovare uno script per automatizzare la creazione, l'exploit e la pulizia di un ambiente vulnerabile qui.
iam.serviceAccounts.actAs
iam.serviceAccounts.actAs
Il permesso iam.serviceAccounts.actAs è simile al permesso iam:PassRole di AWS. È essenziale per eseguire attività, come l'avvio di un'istanza di Compute Engine, in quanto concede la possibilità di "agire come" un Service Account, garantendo una gestione sicura delle autorizzazioni. Senza questo permesso, gli utenti potrebbero ottenere accessi indebiti. Inoltre, lo sfruttamento di iam.serviceAccounts.actAs prevede vari metodi, ognuno dei quali richiede un insieme di autorizzazioni, a differenza di altri metodi che ne richiedono solo uno.
Impersonificazione di un service account
L'impersonificazione di un service account può essere molto utile per ottenere nuovi e migliori privilegi. Ci sono tre modi in cui puoi impersonare un altro service account:
Autenticazione utilizzando chiavi private RSA (descritto sopra)
Autorizzazione utilizzando le politiche di Cloud IAM (descritto qui)
Esecuzione di lavori su servizi GCP (più applicabile alla compromissione di un account utente)
iam.serviceAccounts.getOpenIdToken
iam.serviceAccounts.getOpenIdToken
Un attaccante con i permessi menzionati sarà in grado di generare un OpenID JWT. Questi vengono utilizzati per affermare l'identità e non necessariamente comportano alcuna autorizzazione implicita nei confronti di una risorsa.
Secondo questo interessante post, è necessario indicare l'audience (servizio in cui si desidera utilizzare il token per l'autenticazione) e si riceverà un JWT firmato da Google che indica il service account e l'audience del JWT.
Puoi generare un OpenIDToken (se hai l'accesso) con:
Quindi puoi semplicemente usarlo per accedere al servizio con:
Alcuni servizi che supportano l'autenticazione tramite questo tipo di token sono:
Google Cloud Endpoints (se si utilizza Google OIDC)
È possibile trovare un esempio su come creare un token OpenID a nome di un service account qui.
Riferimenti
Last updated