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)
Más información sobre Cloud Functions:
GCP - Cloud Functions Enumcloudfunctions.functions.create
, cloudfunctions.functions.sourceCodeSet
, iam.serviceAccounts.actAs
Un atacante con estos privilegios puede crear una nueva Cloud Function con código arbitrario (malicioso) y asignarle una Service Account. Luego, filtrar el token de la Service Account desde los metadatos para escalar privilegios a ella. Algunos privilegios para activar la función pueden ser requeridos.
Los scripts de explotación para este método se pueden encontrar aquí y aquí y el archivo .zip preconstruido se puede encontrar aquí.
cloudfunctions.functions.update
, cloudfunctions.functions.sourceCodeSet
, iam.serviceAccounts.actAs
Un atacante con estos privilegios puede modificar el código de una Function e incluso modificar la cuenta de servicio adjunta con el objetivo de exfiltrar el token.
Para desplegar funciones en la nube también necesitarás permisos actAs sobre la cuenta de servicio de cómputo predeterminada o sobre la cuenta de servicio que se utiliza para construir la imagen.
Algunos privilegios adicionales como el permiso .call
para la versión 1 de cloudfunctions o el rol role/run.invoker
para activar la función pueden ser requeridos.
Si obtienes el error Permission 'run.services.setIamPolicy' denied on resource...
es porque estás usando el parámetro --allow-unauthenticated
y no tienes suficientes permisos para ello.
El script de explotación para este método se puede encontrar aquí.
cloudfunctions.functions.sourceCodeSet
Con este permiso puedes obtener una URL firmada para poder subir un archivo a un bucket de función (pero el código de la función no se cambiará, aún necesitas actualizarlo)
No estoy realmente seguro de cuán útil es solo este permiso desde la perspectiva de un atacante, pero es bueno saberlo.
cloudfunctions.functions.setIamPolicy
, iam.serviceAccounts.actAs
Dáte cualquiera de los privilegios anteriores .update
o .create
para escalar.
cloudfunctions.functions.update
Solo tener permisos de cloudfunctions
, sin iam.serviceAccounts.actAs
, no podrás actualizar la función ASÍ QUE ESTO NO ES UNA ESCALADA DE PRIVILEGIOS VÁLIDA.
Si tienes acceso de lectura y escritura sobre el bucket, puedes monitorear cambios en el código y cada vez que ocurra una actualización en el bucket, puedes actualizar el nuevo código con tu propio código con el que se ejecutará la nueva versión de la Cloud Function con el código de puerta trasera enviado.
Puedes consultar más sobre el ataque en:
GCP - Storage PrivescSin embargo, no puedes usar esto para pre-comprometer Cloud Functions de terceros porque si creas el bucket en tu cuenta y le das permisos públicos para que el proyecto externo pueda escribir sobre él, obtienes el siguiente error:
Sin embargo, esto podría usarse para ataques DoS.
Cuando se crea una Cloud Function, se envía una nueva imagen de docker al Artifact Registry del proyecto. Intenté modificar la imagen con una nueva, e incluso eliminar la imagen actual (y la imagen cache
), y nada cambió, la cloud function continuó funcionando. Por lo tanto, tal vez podría ser posible abusar de un ataque de Condición de Carrera como con el bucket para cambiar el contenedor de docker que se ejecutará, pero solo modificando la imagen almacenada no es posible comprometer la Cloud Function.
Aprende y practica Hacking en AWS:HackTricks Training AWS Red Team Expert (ARTE) Aprende y practica Hacking en GCP: HackTricks Training GCP Red Team Expert (GRTE)