GCP - local privilege escalation ssh pivoting

Aprende hacking en AWS desde cero hasta experto con htARTE (Experto en Red Team de HackTricks en AWS)!

Otras formas de apoyar a HackTricks:

En este escenario vamos a suponer que has comprometido una cuenta sin privilegios dentro de una VM en un proyecto de Compute Engine.

Sorprendentemente, los permisos de GCP de la instancia de Compute Engine que has comprometido pueden ayudarte a escalar privilegios localmente dentro de una máquina. Aunque esto no siempre será muy útil en un entorno en la nube, es bueno saber que es posible.

Leer los scripts

Las instancias de Compute probablemente estén allí para ejecutar algunos scripts y realizar acciones con sus cuentas de servicio.

Dado que IAM es muy granular, una cuenta puede tener privilegios de lectura/escritura sobre un recurso pero sin privilegios de lista.

Un gran ejemplo hipotético de esto es una Instancia de Compute que tiene permiso para leer/escribir copias de seguridad en un bucket de almacenamiento llamado instance82736-long-term-xyz-archive-0332893.

Al ejecutar gsutil ls desde la línea de comandos no devuelve nada, ya que la cuenta de servicio carece del permiso IAM storage.buckets.list. Sin embargo, si ejecutas gsutil ls gs://instance82736-long-term-xyz-archive-0332893 podrías encontrar una copia de seguridad completa del sistema de archivos, lo que te daría acceso en texto claro a datos a los que tu cuenta de Linux local no tiene acceso.

Es posible que encuentres este nombre de bucket dentro de un script (en bash, Python, Ruby...).

Metadatos personalizados

Los administradores pueden agregar metadatos personalizados a nivel de instancia y proyecto. Esto es simplemente una forma de pasar pares clave/valor arbitrarios a una instancia, y comúnmente se utiliza para variables de entorno y scripts de inicio/apagado.

Además, es posible agregar userdata, que es un script que se ejecutará cada vez que la máquina se inicie o reinicie y que se puede acceder también desde el punto final de metadatos.

Para más información, consulta:

Abuso de permisos IAM

La mayoría de los permisos propuestos a continuación se otorgan al SA de Compute predeterminado, el único problema es que el alcance de acceso predeterminado evita que el SA los utilice. Sin embargo, si se habilita el alcance cloud-platform o simplemente el alcance compute, podrás abusar de ellos.

Revisa los siguientes permisos:

Buscar claves en el sistema de archivos

Verifica si otros usuarios han iniciado sesión en gcloud dentro de la máquina y han dejado sus credenciales en el sistema de archivos:

sudo find / -name "gcloud"

Estos son los archivos más interesantes:

  • ~/.config/gcloud/credentials.db

  • ~/.config/gcloud/legacy_credentials/[CUENTA]/adc.json

  • ~/.config/gcloud/legacy_credentials/[CUENTA]/.boto

  • ~/.credentials.json

Más expresiones regulares de claves API

TARGET_DIR="/path/to/whatever"

# Service account keys
grep -Pzr "(?s){[^{}]*?service_account[^{}]*?private_key.*?}" \
"$TARGET_DIR"

# Legacy GCP creds
grep -Pzr "(?s){[^{}]*?client_id[^{}]*?client_secret.*?}" \
"$TARGET_DIR"

# Google API keys
grep -Pr "AIza[a-zA-Z0-9\\-_]{35}" \
"$TARGET_DIR"

# Google OAuth tokens
grep -Pr "ya29\.[a-zA-Z0-9_-]{100,200}" \
"$TARGET_DIR"

# Generic SSH keys
grep -Pzr "(?s)-----BEGIN[ A-Z]*?PRIVATE KEY[a-zA-Z0-9/\+=\n-]*?END[ A-Z]*?PRIVATE KEY-----" \
"$TARGET_DIR"

# Signed storage URLs
grep -Pir "storage.googleapis.com.*?Goog-Signature=[a-f0-9]+" \
"$TARGET_DIR"

# Signed policy documents in HTML
grep -Pzr '(?s)<form action.*?googleapis.com.*?name="signature" value=".*?">' \
"$TARGET_DIR"

Referencias

Aprende hacking en AWS de cero a héroe con htARTE (Experto en Red Team de HackTricks en AWS)!

Otras formas de apoyar a HackTricks:

Última actualización