GCP - Non-svc Persistance
Estas son técnicas útiles una vez que, de alguna manera, has comprometido algunas credenciales de GCP o una máquina que se ejecuta en un entorno de GCP.
Token Hijacking
Authenticated User Tokens
Para obtener el token actual de un usuario, puedes ejecutar:
Consulta en esta página cómo usar directamente este token usando gcloud:
Para obtener los detalles para generar un nuevo token de acceso ejecuta:
También es posible encontrar tokens de actualización en $HOME/.config/gcloud/application_default_credentials.json
y en $HOME/.config/gcloud/legacy_credentials/*/adc.json
.
Para obtener un nuevo token de acceso actualizado con el refresh token, client ID y client secret, ejecuta:
La validez de los tokens de actualización se puede gestionar en Admin > Security > Google Cloud session control, y por defecto está configurada a 16h aunque se puede configurar para que nunca expire:
Auth flow
El flujo de autenticación al usar algo como gcloud auth login
abrirá un aviso en el navegador y, después de aceptar todos los alcances, el navegador enviará una solicitud como esta al puerto http abierto por la herramienta:
Luego, gcloud usará el estado y el código con un client_id
hardcoded (32555940559.apps.googleusercontent.com
) y client_secret
(ZmssLNjJy2998hD4CTg2ejr2
) para obtener los datos finales del token de actualización.
Nota que la comunicación con localhost es en HTTP, por lo que es posible interceptar los datos para obtener un token de actualización, sin embargo, estos datos son válidos solo una vez, por lo que sería inútil, es más fácil simplemente leer el token de actualización del archivo.
OAuth Scopes
Puedes encontrar todos los scopes de Google en https://developers.google.com/identity/protocols/oauth2/scopes o obtenerlos ejecutando:
Es posible ver qué alcances puede soportar la aplicación que gcloud
usa para autenticar con este script:
Después de ejecutarlo, se verificó que esta aplicación admite estos alcances:
es interesante ver cómo esta aplicación soporta el alcance drive
, lo que podría permitir a un usuario escalar de GCP a Workspace si un atacante logra forzar al usuario a generar un token con este alcance.
Revisa cómo abusar de esto aquí.
Service Accounts
Al igual que con los usuarios autenticados, si logras comprometer el archivo de clave privada de una service account, podrás acceder a ella generalmente tanto tiempo como desees. Sin embargo, si robas el token OAuth de una service account, esto puede ser aún más interesante, porque, incluso si por defecto estos tokens son útiles solo por una hora, si la víctima elimina la clave privada de la API, el token OAuth seguirá siendo válido hasta que expire.
Metadata
Obviamente, mientras estés dentro de una máquina que se ejecuta en el entorno de GCP, podrás acceder a la service account adjunta a esa máquina contactando el endpoint de metadata (ten en cuenta que los tokens OAuth a los que puedes acceder en este endpoint generalmente están restringidos por alcances).
Remediaciones
Algunas remediaciones para estas técnicas se explican en https://www.netskope.com/blog/gcp-oauth-token-hijacking-in-google-cloud-part-2
References
Last updated