Translated ['', 'src/pentesting-cloud/gcp-security/gcp-unauthenticated-e

This commit is contained in:
Translator
2026-06-16 13:40:09 +00:00
parent 3465c4e795
commit ae0087d062
@@ -4,27 +4,27 @@
## API Keys
Pour plus d'informations sur les clés API, consultez :
Pour plus d'informations sur les API Keys, voir :
{{#ref}}
../gcp-services/gcp-api-keys-enum.md
{{#endref}}
### Techniques OSINT
### OSINT techniques
**Les clés API Google sont largement utilisées par tout type d'applications** qui les utilisent côté client. Il est courant de les trouver dans le code source des sites web ou dans les requêtes réseau, dans les applications mobiles ou simplement en recherchant des regex sur des plateformes comme Github.
**Google API Keys are widely used by any kind of applications** that uses from the client side. Il est courant de les trouver dans le code source de sites web ou les requêtes réseau, dans des applications mobiles, ou simplement en cherchant des regexes sur des plateformes comme Github.
La regex est : **`AIza[0-9A-Za-z_-]{35}`**
Recherchez-la par exemple sur Github en suivant : [https://github.com/search?q=%2FAIza%5B0-9A-Za-z\_-%5D%7B35%7D%2F\&type=code\&ref=advsearch](https://github.com/search?q=%2FAIza%5B0-9A-Za-z_-%5D%7B35%7D%2F&type=code&ref=advsearch)
Cherchez-la par exemple sur Github via : [https://github.com/search?q=%2FAIza%5B0-9A-Za-z\_-%5D%7B35%7D%2F\&type=code\&ref=advsearch](https://github.com/search?q=%2FAIza%5B0-9A-Za-z_-%5D%7B35%7D%2F&type=code&ref=advsearch)
### Vérifier le projet GCP d'origine
### Check origin GCP project
Ceci est extrêmement utile pour vérifier **à quel projet GCP appartient une clé API que vous avez trouvée**. Nous avons différentes options :
Ceci est extrêmement utile pour vérifier **à quel GCP project appartient une API key que vous avez trouvée**. Nous avons différentes options :
- Contacter `https://www.googleapis.com/identitytoolkit/v3/relyingparty/getProjectConfig?key=<api-key>`
- Contact `https://www.googleapis.com/identitytoolkit/v3/relyingparty/getProjectConfig?key=<api-key>`
Pour des raisons de concision, la sortie a été tronquée, mais dans la sortie complète, l'ID du projet apparaît plus de 5 fois.
Pour des raisons de brièveté, la sortie a été tronquée, mais dans la sortie complète l'identifiant du project apparaît plus de 5 fois
```bash
curl -s "https://www.googleapis.com/identitytoolkit/v3/relyingparty/getProjectConfig?key=AIzaSyD[...]uE8Y"
@@ -34,9 +34,9 @@ curl -s "https://www.googleapis.com/identitytoolkit/v3/relyingparty/getProjectCo
"message": "Identity Toolkit API has not been used in project 943955951114 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/identitytoolkit.googleapis.com/overview?project=943955951114 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.",
[...]
```
- Contact `https://www.googleapis.com/identitytoolkit/v3/relyingparty/getProjectConfig?key=<api-key>`
- Contactez `https://identitytoolkit.googleapis.com/v1/projects?key=<api-key>`
Pour des raisons de concision, la sortie a été tronquée, mais dans la sortie complète, l'ID du projet apparaît plus de 5 fois.
Pour des raisons de brièveté, la sortie a été tronquée, mais dans la sortie complète l'ID du projet apparaît plus de 5 fois
```bash
curl -s "https://identitytoolkit.googleapis.com/v1/projects?key=AIzaSyD[...]uE8Y"
@@ -46,7 +46,7 @@ curl -s "https://identitytoolkit.googleapis.com/v1/projects?key=AIzaSyD[...]uE8Y
"message": "Identity Toolkit API has not been used in project 943955951114 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/identitytoolkit.googleapis.com/overview?project=943955951114 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.",
[...]
```
- [Celle-ci ne fonctionne plus !] `apikeys.keys.lookup`
- [Celui-ci ne fonctionne plus !] `apikeys.keys.lookup`
```bash
# If you have permissions
gcloud services api-keys lookup AIzaSyD[...]uE8Y
@@ -69,8 +69,99 @@ resource: projects/89123452509
service: cloudresourcemanager.googleapis.com
reason: AUTH_PERMISSION_DENIED
```
### Brute Force API endspoints
### Reconnaissance d'API guidée par les discovery documents
Comme vous ne savez peut-être pas quelles API sont activées dans le projet, 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.**
Une fois que vous avez une clé valide, ne vous contentez pas de tester les API publiques évidentes. Dans les environnements Google, les **discovery documents** peuvent servir de carte de la surface d'attaque lisible par machine, exposant les **resources, methods, paths, HTTP verbs, parameters, and request/response schemas**.
Cibles utiles :
```bash
# Public / common path
curl -s 'https://serviceusage.googleapis.com/$discovery/rest?key=<api-key>'
# Hidden docs behind a visibility label
curl -s 'https://serviceusage.googleapis.com/$discovery/rest?labels=GOOGLE_INTERNAL&key=<api-key>'
```
Notes :
- Comparez la taille du document et le nombre de méthodes avec et sans labels comme `GOOGLE_INTERNAL`.
- Une **vraie méthode inexistante** retourne généralement une **HTML 404**. Une **JSON 404** avec `Method not found.` peut indiquer que la méthode existe mais que le **projet de la API key** na pas un label de visibilité requis.
- Certaines APIs first-party sont plus faciles à atteindre via `*.clients6.google.com` ou des hôtes `*-pa.googleapis.com` undocumented que via le API explorer public.
Cest particulièrement utile pour énumérer des **internal/admin APIs accidentellement exposées à Internet** et pour construire des fuzzers personnalisés à partir du schéma au lieu de deviner manuellement les champs JSON.
### Key ownership filtering at scale
Si vous collectez de nombreuses Google API keys depuis des APKs, du trafic browser, des IPAs ou des binaries, vous pouvez vouloir identifier rapidement **quel project possède chaque key** et sil appartient à lentreprise cible.
Une astuce pratique consiste à appeler intentionnellement une API qui **nest pas activée** pour la key. Google divulgue fréquemment le **project number** sous-jacent dans lerreur :
```bash
curl -s 'https://protos.googleapis.com/$discovery/rest?key=<api-key>'
```
Recherchez des messages comme :
```text
Protos API has not been used in project 244648151629 before or it is disabled
```
Ce numéro de projet peut ensuite être corrélé avec d'autres endpoints, des métadonnées leakées ou une logique interne de cartographie de l'entreprise afin de séparer les **in-scope first-party keys** des projets client / tiers.
### Handle key restrictions before discarding a key
Une key restreinte n'est pas nécessairement inutile. Préservez le contexte dans lequel la key a été trouvée et rejouez les requêtes avec les headers correspondants :
```bash
# Browser restricted
curl -H 'X-Goog-Api-Key: <api-key>' \
-H 'Referer: https://target.google.com' \
'https://servicemanagement.googleapis.com/v1/operations'
# iOS restricted
curl -H 'X-Goog-Api-Key: <api-key>' \
-H 'X-Ios-Bundle-Identifier: com.google.GoogleMobile' \
'https://servicemanagement.clients6.google.com/v1/operations'
# Android restricted
curl -H 'X-Goog-Api-Key: <api-key>' \
-H 'X-Android-Package: com.google.android.settings.intelligence' \
-H 'X-Android-Cert: <sha1-signing-cert>' \
'https://servicemanagement.clients6.google.com/v1/operations'
```
Classes de restriction courantes :
- **HTTP Referer**
- **iOS bundle ID** (`X-Ios-Bundle-Identifier`)
- **Android package + signing cert** (`X-Android-Package` + `X-Android-Cert`)
- Restrictions **Server IP**, qui ne peuvent généralement pas être contournées à distance
### Indices dauthentification first-party / whitelist dorigine
Certaines Google web APIs acceptent un mélange de **session cookie + first-party authorization headers** et sont hébergées sur `*.clients6.google.com`. Lors des tests de ces APIs :
- Gardez `Origin` et `Referer` compatibles avec le produit qui utilise normalement lAPI.
- Un `401` avec `reason: SESSION_COOKIE_INVALID` peut en fait signifier que **lorigine nest pas whitelistée**, et non que le cookie est invalide.
- Les APIs accessibles publiquement qui nacceptent que des origines internes comme `*.corp.google.com` sont des candidats de grande valeur pour une revue de broken access control.
### APIs avec brute force activé et fuzz des méthodes documentées
Comme vous ne savez peut-être pas quelles APIs sont activées dans le projet, il serait intéressant dexécuter loutil [https://github.com/ozguralp/gmapsapiscanner](https://github.com/ozguralp/gmapsapiscanner) et de vérifier **ce à quoi vous pouvez accéder avec la API key.**
Après avoir identifié les services accessibles, privilégiez le **schema-driven fuzzing** plutôt que des suppositions aveugles :
- Générez les requêtes directement à partir des discovery docs
- Rejouez la même requête avec **toutes les clés connues fonctionnelles**
- Normalisez les erreurs pour distinguer **invalid input** des échecs de **visibility-label / auth / restriction**
- Pour les identifiants dobjet numériques, essayez des valeurs proches comme `ID-1`, `ID+1`, `1`, `2`, `100`, `1000`
- Ne signalez que lorsque vous confirmez un **cross-user data access** ou un autre vrai échec dautorisation ; une simple énumération ne suffit généralement pas à elle seule
### Schéma de vulnérabilité courant : unauthenticated direct-object reference
Un schéma de bug récurrent est une **internal/admin API** qui accepte un identifiant contrôlé par la victime (par exemple `gaiaId`) et vérifie seulement que la requête contient une API key exploitable, mais **ne vérifie jamais si lappelant est autorisé à accéder à cet objet spécifique**.
```bash
curl 'https://gfibervoice-pa.googleapis.com/v1/BssGetVoiceSettings?gaiaId=<victim_gaia_id>' \
-H 'X-Goog-Api-Key: <api-key>'
```
Si l'endpoint renvoie le numéro de téléphone, l'adresse e-mail, les paramètres ou d'autres champs privés d'un autre utilisateur, traitez cela comme un problème classique d'**IDOR / broken access control**.
## Références
- [Hacking Google with AI: AI-Assisted Discovery-Document Fuzzing of Google APIs](https://brutecat.com/articles/hacking-google-with-ai)
- [Google APIs Explorer](https://developers.google.com/apis-explorer)
{{#include ../../../banners/hacktricks-training.md}}