# GCP - Apikeys Privesc

{{#include ../../../banners/hacktricks-training.md}}

## Apikeys

Les autorisations suivantes sont utiles pour créer et voler des clés API, notez ceci des docs : _Une clé API est une simple chaîne cryptée qui **identifie une application sans aucun principal**. Elles sont utiles pour accéder à **des données publiques de manière anonyme**, et sont utilisées pour **associer** les requêtes API à votre projet pour le quota et la **facturation**._

Par conséquent, avec une clé API, vous pouvez faire en sorte que cette entreprise paie pour votre utilisation de l'API, mais vous ne pourrez pas élever vos privilèges.

Pour plus d'informations sur les clés API, consultez :

{{#ref}}
../gcp-services/gcp-api-keys-enum.md
{{#endref}}

Pour d'autres façons de créer des clés API, consultez :

{{#ref}}
gcp-serviceusage-privesc.md
{{#endref}}

### Accès par Brute Force à la clé API <a href="#apikeys.keys.create" id="apikeys.keys.create"></a>

Comme vous ne savez peut-être pas quelles API sont activées dans le projet ou les restrictions appliquées à la clé API que vous avez trouvée, il serait intéressant d'exécuter l'outil [**https://github.com/ozguralp/gmapsapiscanner**](https://github.com/ozguralp/gmapsapiscanner) et de vérifier **ce à quoi vous pouvez accéder avec la clé API.**

### `apikeys.keys.create` <a href="#apikeys.keys.create" id="apikeys.keys.create"></a>

Cette autorisation permet de **créer une clé API** :
```bash
gcloud services api-keys create
Operation [operations/akmf.p7-[...]9] complete. Result: {
"@type":"type.googleapis.com/google.api.apikeys.v2.Key",
"createTime":"2022-01-26T12:23:06.281029Z",
"etag":"W/\"HOhA[...]==\"",
"keyString":"AIzaSy[...]oU",
"name":"projects/5[...]6/locations/global/keys/f707[...]e8",
"uid":"f707[...]e8",
"updateTime":"2022-01-26T12:23:06.378442Z"
}
```
Vous pouvez trouver un script pour automatiser la [**création, l'exploitation et le nettoyage d'un environnement vulnérable ici**](https://github.com/carlospolop/gcp_privesc_scripts/blob/main/tests/b-apikeys.keys.create.sh).

> [!CAUTION]
> Notez qu'en default, les utilisateurs ont des permissions pour créer de nouveaux projets et ils se voient attribuer le rôle de Propriétaire sur le nouveau projet. Donc, un utilisateur pourrait c**réer un projet et une clé API à l'intérieur de ce projet**.

### `apikeys.keys.getKeyString` , `apikeys.keys.list` <a href="#apikeys.keys.getkeystringapikeys.keys.list" id="apikeys.keys.getkeystringapikeys.keys.list"></a>

Ces permissions permettent **de lister et d'obtenir toutes les apiKeys et d'obtenir la clé** :
```bash
for  key  in  $(gcloud services api-keys list --uri); do
gcloud services api-keys get-key-string "$key"
done
```
Vous pouvez trouver un script pour automatiser la [**création, l'exploitation et le nettoyage d'un environnement vulnérable ici**](https://github.com/carlospolop/gcp_privesc_scripts/blob/main/tests/c-apikeys.keys.getKeyString.sh).

### `apikeys.keys.undelete` , `apikeys.keys.list` <a href="#serviceusage.apikeys.regenerateapikeys.keys.list" id="serviceusage.apikeys.regenerateapikeys.keys.list"></a>

Ces permissions vous permettent de **lister et de régénérer des clés API supprimées**. La **clé API est donnée dans la sortie** après que l'**undelete** soit effectué :
```bash
gcloud services api-keys list --show-deleted
gcloud services api-keys undelete <key-uid>
```
### Créer une application OAuth interne pour hameçonner d'autres travailleurs

Consultez la page suivante pour apprendre comment faire cela, bien que cette action appartienne au service **`clientauthconfig`** [selon la documentation](https://cloud.google.com/iap/docs/programmatic-oauth-clients#before-you-begin):

{{#ref}}
../../workspace-security/gws-google-platforms-phishing/
{{#endref}}

{{#include ../../../banners/hacktricks-training.md}}
