GCP - Token Persistance
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)
Para obtener el token actual de un usuario, puedes ejecutar:
Consulta en esta página cómo usar este token directamente 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 token de actualización, ID de cliente y secreto de cliente, ejecuta:
La validez de los tokens de actualización se puede gestionar en Admin > Security > Google Cloud session control, y por defecto está configurada para 16h, aunque se puede establecer para que nunca expire:
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 utilizará el estado y el código con un client_id
codificado (32555940559.apps.googleusercontent.com
) y client_secret
(ZmssLNjJy2998hD4CTg2ejr2
) para obtener los datos finales del token de actualización.
Tenga en cuenta 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 1 vez, por lo que esto sería inútil, es más fácil simplemente leer el token de actualización del archivo.
Puedes encontrar todos los alcances de Google en https://developers.google.com/identity/protocols/oauth2/scopes o obtenerlos ejecutando:
Es posible ver qué alcances la aplicación que gcloud
utiliza para autenticarse puede soportar 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 drive
scope, 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 scope.
Ver cómo abusar de esto aquí.
Al igual que con los usuarios autenticados, si logras comprometer el archivo de clave privada de una cuenta de servicio podrás acceder a ella generalmente tanto tiempo como desees. Sin embargo, si robas el token de OAuth de una cuenta de servicio 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 API privada, el token de OAuth seguirá siendo válido hasta que expire.
Obviamente, mientras estés dentro de una máquina que se ejecute en el entorno de GCP podrás acceder a la cuenta de servicio adjunta a esa máquina contactando el endpoint de metadatos (ten en cuenta que los tokens de OAuth a los que puedes acceder en este endpoint suelen estar restringidos por scopes).
Algunas remediaciones para estas técnicas se explican en https://www.netskope.com/blog/gcp-oauth-token-hijacking-in-google-cloud-part-2
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)