GCP - Non-svc Persistance
Ce sont des techniques utiles une fois que, d'une manière ou d'une autre, vous avez compromis des identifiants GCP ou une machine fonctionnant dans un environnement GCP.
Détournement de Jeton
Jetons d'Utilisateur Authentifié
Pour obtenir le jeton actuel d'un utilisateur, vous pouvez exécuter :
Consultez cette page pour utiliser directement ce jeton avec gcloud :
Pour obtenir les détails pour générer un nouveau jeton d'accès, exécutez :
Il est également possible de trouver des jetons d'actualisation dans $HOME/.config/gcloud/application_default_credentials.json
et dans $HOME/.config/gcloud/legacy_credentials/*/adc.json
.
Pour obtenir un nouveau jeton d'accès actualisé avec le refresh token, l'ID client et le secret client, exécutez :
La validité des jetons de rafraîchissement peut être gérée dans Admin > Security > Google Cloud session control, et par défaut, elle est définie à 16h bien qu'elle puisse être configurée pour ne jamais expirer :
Auth flow
Le flux d'authentification lors de l'utilisation de quelque chose comme gcloud auth login
ouvrira une invite dans le navigateur et après avoir accepté toutes les portées, le navigateur enverra une requête telle que celle-ci au port http ouvert par l'outil :
Ensuite, gcloud utilisera l'état et le code avec un client_id
codé en dur (32555940559.apps.googleusercontent.com
) et client_secret
(ZmssLNjJy2998hD4CTg2ejr2
) pour obtenir les données finales du jeton de rafraîchissement.
Notez que la communication avec localhost se fait en HTTP, il est donc possible d'intercepter les données pour obtenir un jeton de rafraîchissement, cependant ces données ne sont valides qu'une seule fois, donc cela serait inutile, il est plus facile de simplement lire le jeton de rafraîchissement à partir du fichier.
OAuth Scopes
Vous pouvez trouver tous les scopes Google sur https://developers.google.com/identity/protocols/oauth2/scopes ou les obtenir en exécutant :
Il est possible de voir quelles portées l'application que gcloud
utilise pour s'authentifier peut supporter avec ce script :
Après l'avoir exécuté, il a été vérifié que cette application prend en charge ces portées :
il est intéressant de voir comment cette application prend en charge la portée drive
, ce qui pourrait permettre à un utilisateur de passer de GCP à Workspace si un attaquant parvient à forcer l'utilisateur à générer un jeton avec cette portée.
Voir comment abuser de cela ici.
Comptes de Service
Tout comme avec les utilisateurs authentifiés, si vous parvenez à compromettre le fichier de clé privée d'un compte de service, vous pourrez y accéder généralement aussi longtemps que vous le souhaitez. Cependant, si vous volez le jeton OAuth d'un compte de service, cela peut être encore plus intéressant, car, même si par défaut ces jetons ne sont utiles qu'une heure, si la victime supprime la clé API privée, le jeton OAuth sera toujours valide jusqu'à son expiration.
Métadonnées
Évidemment, tant que vous êtes à l'intérieur d'une machine fonctionnant dans l'environnement GCP, vous pourrez accéder au compte de service attaché à cette machine en contactant le point de terminaison des métadonnées (notez que les jetons OAuth auxquels vous pouvez accéder à ce point de terminaison sont généralement restreints par des portées).
Remédiations
Certaines remédiations pour ces techniques sont expliquées dans https://www.netskope.com/blog/gcp-oauth-token-hijacking-in-google-cloud-part-2
Références
Last updated