GCP - IAM Privesc
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Trouvez plus d'informations sur IAM dans :
GCP - IAM, Principals & Org Policies Enumiam.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 :
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.
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.
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 iam.serviceAccounts.implicitDelegation
permission sur un compte de service qui a la iam.serviceAccounts.getAccessToken
permission 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 :
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 sera capable de 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 sera capable de 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 à Google, nous utilisons la méthode signJWT qui attend déjà un JWT. Cela rend son 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 sera capable d'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 :
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'en nécessitent qu'une.
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 :
Alors vous pouvez simplement l'utiliser pour accéder au service avec :
Certain services qui prennent en charge l'authentification via ce type de jetons sont :
Google Cloud Endpoints (si vous utilisez Google OIDC)
Vous pouvez trouver un exemple sur comment créer un jeton OpenID au nom d'un compte de service ici.
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)