GCP - Cloudfunctions Privesc
cloudfunctions
Maggiore informazione su Cloud Functions:
GCP - Cloud Functions Enumcloudfunctions.functions.create
, cloudfunctions.functions.sourceCodeSet
, iam.serviceAccounts.actAs
cloudfunctions.functions.create
, cloudfunctions.functions.sourceCodeSet
, iam.serviceAccounts.actAs
Un attaccante con questi privilegi può creare una nuova Cloud Function con codice arbitrario (maligno) e assegnargli un Service Account. Poi, leakare il token del Service Account dai metadati per elevare i privilegi. Alcuni privilegi per attivare la funzione potrebbero essere richiesti.
Gli script di exploit per questo metodo possono essere trovati qui e qui e il file .zip precompilato può essere trovato qui.
cloudfunctions.functions.update
, cloudfunctions.functions.sourceCodeSet
, iam.serviceAccounts.actAs
cloudfunctions.functions.update
, cloudfunctions.functions.sourceCodeSet
, iam.serviceAccounts.actAs
Un attaccante con questi privilegi può modificare il codice di una Function e persino modificare il service account associato con l'obiettivo di esfiltrare il token.
Per distribuire le cloud functions avrai anche bisogno di permessi actAs sul service account di calcolo predefinito o sul service account utilizzato per costruire l'immagine.
Alcuni privilegi extra come il permesso .call
per la versione 1 di cloudfunctions o il ruolo role/run.invoker
per attivare la funzione potrebbero essere richiesti.
Se ricevi l'errore Permission 'run.services.setIamPolicy' denied on resource...
è perché stai usando il parametro --allow-unauthenticated
e non hai abbastanza permessi per farlo.
Lo script di exploit per questo metodo può essere trovato qui.
cloudfunctions.functions.sourceCodeSet
cloudfunctions.functions.sourceCodeSet
Con questo permesso puoi ottenere un URL firmato per poter caricare un file in un bucket di funzioni (ma il codice della funzione non verrà modificato, devi comunque aggiornarlo)
Non sono davvero sicuro di quanto sia utile solo questo permesso dal punto di vista di un attaccante, ma è buono da sapere.
cloudfunctions.functions.setIamPolicy
, iam.serviceAccounts.actAs
cloudfunctions.functions.setIamPolicy
, iam.serviceAccounts.actAs
Dati a te stesso uno dei precedenti privilegi .update
o .create
per l'escalation.
cloudfunctions.functions.update
cloudfunctions.functions.update
Avere solo permessi cloudfunctions
, senza iam.serviceAccounts.actAs
, non ti permetterà di aggiornare la funzione QUINDI QUESTO NON È UN VALIDO PRIVESC.
Permessi di Scrittura sul Bucket
Potresti pensare che un attaccante con permessi di scrittura sul bucket dove è memorizzato il codice delle Cloud Functions sarà in grado di modificare il codice sovrascrivendo il function_code.zip
e poi far eseguire alla funzione codice arbitrario.
Tuttavia, questo non è vero, semplicemente sovrascrivere il codice all'interno del bucket non modificherà il codice che viene eseguito.
Riferimenti
Last updated