Chaque instance Compute Engine (ainsi que les nœuds GKE, Cloud Run et les workers Cloud Build) peut joindre le serveur de métadonnées à l'adresse metadata.google.internal (169.254.169.254). Il fournit le jeton OAuth du compte de service attaché, ses scopes accordés, les métadonnées du projet et les clés SSH, sans autre authentification qu'un en-tête de requête obligatoire. Lors d'une prise de pied initiale, c'est la première source d'identifiants ; atteint via une vulnérabilité web, c'est un vecteur de server-side request forgery.
Ce que cette section regroupe#
- Jeton de compte de service : le jeton OAuth et les scopes depuis le point de terminaison des comptes de service, depuis un shell.
- SSRF vers les métadonnées : le même point de terminaison atteint via une falsification de requête côté serveur sur une application hébergée.
L'en-tête obligatoire#
Chaque requête de métadonnées nécessite Metadata-Flavor: Google ; les requêtes qui en sont dépourvues sont refusées, ce qui complique une SSRF naïve incapable de définir des en-têtes (et ce qu'un ?alt=json combiné à une lecture récursive permet d'exploiter dès que c'est possible).
curl -s -H 'Metadata-Flavor: Google' \
'http://metadata.google.internal/computeMetadata/v1/?recursive=true&alt=json'