GCP - Cloudfunctions Privesc
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Maggiore informazione su Cloud Functions:
GCP - Cloud Functions Enumcloudfunctions.functions.create
, cloudfunctions.functions.sourceCodeSet
, iam.serviceAccounts.actAs
Un attaccante con questi privilegi può creare una nuova Cloud Function con codice arbitrario (maligno) e assegnarle un Service Account. Poi, leakare il token del Service Account dai metadati per elevare i privilegi. Potrebbero essere richiesti alcuni privilegi per attivare la funzione.
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
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 sarà anche necessario avere 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
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
Dati a te stesso uno dei precedenti privilegi .update
o .create
per l'escalation.
cloudfunctions.functions.update
Avere solo permessi cloudfunctions
, senza iam.serviceAccounts.actAs
, non ti permetterà di aggiornare la funzione QUINDI QUESTO NON È UN VALIDO PRIVESC.
Se hai accesso in lettura e scrittura sul bucket, puoi monitorare le modifiche nel codice e ogni volta che si verifica un aggiornamento nel bucket, puoi aggiornare il nuovo codice con il tuo codice in modo che la nuova versione della Cloud Function venga eseguita con il codice backdoored inviato.
Puoi controllare di più sull'attacco in:
GCP - Storage PrivescTuttavia, non puoi usare questo per compromettere in anticipo le Cloud Functions di terze parti perché se crei il bucket nel tuo account e gli dai permessi pubblici affinché il progetto esterno possa scriverci sopra, ottieni il seguente errore:
Tuttavia, questo potrebbe essere utilizzato per attacchi DoS.
Quando viene creata una Cloud Function, una nuova immagine docker viene inviata all'Artifact Registry del progetto. Ho provato a modificare l'immagine con una nuova e persino a eliminare l'immagine corrente (e l'immagine cache
), ma nulla è cambiato, la cloud function continua a funzionare. Pertanto, potrebbe essere possibile abusare di un attacco di Race Condition come con il bucket per cambiare il contenitore docker che verrà eseguito, ma modificare semplicemente l'immagine memorizzata non è possibile per compromettere la Cloud Function.
Impara e pratica il hacking AWS:HackTricks Training AWS Red Team Expert (ARTE) Impara e pratica il hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)