GCP - IAM Privesc
Reading time: 9 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.
IAM
Trouvez plus d'informations sur IAM dans :
GCP - IAM, Principals & Org Policies Enum
iam.roles.update
(iam.roles.get
)
Un attaquant avec les permissions mentionnées pourra mettre à jour un rôle qui vous est attribué et vous donner des permissions supplémentaires sur d'autres ressources comme :
gcloud iam roles update <rol name> --project <project> --add-permissions <permission>
Vous pouvez trouver un script pour automatiser la création, l'exploitation et le nettoyage d'un environnement vulnérable ici et un script python pour abuser de ce privilège ici. Pour plus d'informations, consultez la recherche originale.
iam.serviceAccounts.getAccessToken
(iam.serviceAccounts.get
)
Un attaquant avec les permissions mentionnées sera capable de demander un jeton d'accès qui appartient à un compte de service, il est donc possible de demander un jeton d'accès d'un compte de service avec plus de privilèges que les nôtres.
gcloud --impersonate-service-account="${victim}@${PROJECT_ID}.iam.gserviceaccount.com" \
auth print-access-token
Vous pouvez trouver un script pour automatiser la création, l'exploitation et le nettoyage d'un environnement vulnérable ici et un script python pour abuser de ce privilège ici. Pour plus d'informations, consultez la recherche originale.
iam.serviceAccountKeys.create
Un attaquant avec les permissions mentionnées sera en mesure de créer une clé gérée par l'utilisateur pour un compte de service, ce qui nous permettra d'accéder à GCP en tant que ce compte de service.
gcloud iam service-accounts keys create --iam-account <name> /tmp/key.json
gcloud auth activate-service-account --key-file=sa_cred.json
Vous pouvez trouver un script pour automatiser la création, l'exploitation et le nettoyage d'un environnement vulnérable ici et un script python pour abuser de ce privilège ici. Pour plus d'informations, consultez la recherche originale.
Notez que iam.serviceAccountKeys.update
ne fonctionnera pas pour modifier la clé d'un SA car pour cela, les permissions iam.serviceAccountKeys.create
sont également nécessaires.
iam.serviceAccounts.implicitDelegation
Si vous avez la permission iam.serviceAccounts.implicitDelegation
sur un compte de service qui a la permission iam.serviceAccounts.getAccessToken
sur un troisième compte de service, alors vous pouvez utiliser implicitDelegation pour créer un jeton pour ce troisième compte de service. Voici un diagramme pour aider à expliquer.
Notez qu' selon la documentation, la délégation de gcloud
ne fonctionne que pour générer un jeton en utilisant la méthode generateAccessToken(). Voici donc comment obtenir un jeton en utilisant l'API directement :
curl -X POST \
'https://iamcredentials.googleapis.com/v1/projects/-/serviceAccounts/'"${TARGET_SERVICE_ACCOUNT}"':generateAccessToken' \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer '"$(gcloud auth print-access-token)" \
-d '{
"delegates": ["projects/-/serviceAccounts/'"${DELEGATED_SERVICE_ACCOUNT}"'"],
"scope": ["https://www.googleapis.com/auth/cloud-platform"]
}'
Vous pouvez trouver un script pour automatiser la création, l'exploitation et le nettoyage d'un environnement vulnérable ici et un script python pour abuser de ce privilège ici. Pour plus d'informations, consultez la recherche originale.
iam.serviceAccounts.signBlob
Un attaquant avec les permissions mentionnées pourra signer des charges utiles arbitraires dans GCP. Il sera donc possible de créer un JWT non signé du SA et de l'envoyer en tant que blob pour obtenir le JWT signé par le SA que nous ciblons. Pour plus d'informations lisez ceci.
Vous pouvez trouver un script pour automatiser la création, l'exploitation et le nettoyage d'un environnement vulnérable ici et un script python pour abuser de ce privilège ici et ici. Pour plus d'informations, consultez la recherche originale.
iam.serviceAccounts.signJwt
Un attaquant avec les permissions mentionnées pourra signer des jetons web JSON (JWT) bien formés. La différence avec la méthode précédente est que au lieu de faire signer un blob contenant un JWT par Google, nous utilisons la méthode signJWT qui attend déjà un JWT. Cela rend l'utilisation plus facile mais vous ne pouvez signer que des JWT au lieu de n'importe quel octet.
Vous pouvez trouver un script pour automatiser la création, l'exploitation et le nettoyage d'un environnement vulnérable ici et un script python pour abuser de ce privilège ici. Pour plus d'informations, consultez la recherche originale.
iam.serviceAccounts.setIamPolicy
Un attaquant avec les permissions mentionnées pourra ajouter des politiques IAM aux comptes de service. Vous pouvez en abuser pour vous accorder les permissions dont vous avez besoin pour usurper le compte de service. Dans l'exemple suivant, nous nous accordons le rôle roles/iam.serviceAccountTokenCreator
sur le SA intéressant :
gcloud iam service-accounts add-iam-policy-binding "${VICTIM_SA}@${PROJECT_ID}.iam.gserviceaccount.com" \
--member="user:username@domain.com" \
--role="roles/iam.serviceAccountTokenCreator"
# If you still have prblem grant yourself also this permission
gcloud iam service-accounts add-iam-policy-binding "${VICTIM_SA}@${PROJECT_ID}.iam.gserviceaccount.com" \ \
--member="user:username@domain.com" \
--role="roles/iam.serviceAccountUser"
Vous pouvez trouver un script pour automatiser la création, l'exploitation et le nettoyage d'un environnement vulnérable ici.
iam.serviceAccounts.actAs
La permission iam.serviceAccounts.actAs est comme la permission iam:PassRole d'AWS. Elle est essentielle pour exécuter des tâches, comme initier une instance Compute Engine, car elle accorde la capacité d'"agir en tant que" un compte de service, garantissant une gestion sécurisée des permissions. Sans cela, les utilisateurs pourraient obtenir un accès indû. De plus, exploiter le iam.serviceAccounts.actAs implique diverses méthodes, chacune nécessitant un ensemble de permissions, contrairement à d'autres méthodes qui n'ont besoin que d'une seule.
Usurpation de compte de service
Usurper un compte de service peut être très utile pour obtenir de nouveaux et meilleurs privilèges. Il existe trois façons d'usurper un autre compte de service :
- Authentification à l'aide de clés privées RSA (couverte ci-dessus)
- Autorisation à l'aide de politiques Cloud IAM (couverte ici)
- Déploiement de tâches sur les services GCP (plus applicable à la compromission d'un compte utilisateur)
iam.serviceAccounts.getOpenIdToken
Un attaquant avec les permissions mentionnées sera capable de générer un OpenID JWT. Ceux-ci sont utilisés pour affirmer l'identité et ne portent pas nécessairement d'autorisation implicite contre une ressource.
Selon ce post intéressant, il est nécessaire d'indiquer l'audience (service où vous souhaitez utiliser le token pour vous authentifier) et vous recevrez un JWT signé par google indiquant le compte de service et l'audience du JWT.
Vous pouvez générer un OpenIDToken (si vous avez l'accès) avec :
# First activate the SA with iam.serviceAccounts.getOpenIdToken over the other SA
gcloud auth activate-service-account --key-file=/path/to/svc_account.json
# Then, generate token
gcloud auth print-identity-token "${ATTACK_SA}@${PROJECT_ID}.iam.gserviceaccount.com" --audiences=https://example.com
Vous pouvez alors l'utiliser pour accéder au service avec :
curl -v -H "Authorization: Bearer id_token" https://some-cloud-run-uc.a.run.app
Certains services qui prennent en charge l'authentification via ce type de jetons sont :
- Google Cloud Run
- Google Cloud Functions
- Google Identity Aware Proxy
- Google Cloud Endpoints (si vous utilisez Google OIDC)
Vous pouvez trouver un exemple sur la façon de créer un jeton OpenID au nom d'un compte de service ici.
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.