# GCP - Firebase Enum

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

## [Firebase](https://cloud.google.com/sdk/gcloud/reference/firebase/)

La base de données en temps réel Firebase est une base de données NoSQL hébergée dans le cloud qui vous permet de stocker et de synchroniser des données entre vos utilisateurs en temps réel. [En savoir plus](https://firebase.google.com/products/realtime-database/).

### Enum non authentifié

Certains **points de terminaison Firebase** pourraient être trouvés dans des **applications mobiles**. Il est possible que le point de terminaison Firebase utilisé soit **mal configuré, accordant à tout le monde des privilèges de lecture (et d'écriture)**.

Voici la méthodologie courante pour rechercher et exploiter des bases de données Firebase mal configurées :

1. **Obtenez l'APK** de l'application, vous pouvez utiliser n'importe quel outil pour obtenir l'APK de l'appareil pour cette POC.\
Vous pouvez utiliser “APK Extractor” [https://play.google.com/store/apps/details?id=com.ext.ui\&hl=e](https://hackerone.com/redirect?signature=3774f35d1b5ea8a4fd209d80084daa9f5887b105&url=https%3A%2F%2Fplay.google.com%2Fstore%2Fapps%2Fdetails%3Fid%3Dcom.ext.ui%26hl%3Den)
2. **Décompilez** l'APK en utilisant **apktool**, suivez la commande ci-dessous pour extraire le code source de l'APK.
3. Allez dans le _**res/values/strings.xml**_ et recherchez ce mot-clé et **cherchez** le mot “**firebase**”
4. Vous pourriez trouver quelque chose comme cette URL “_**https://xyz.firebaseio.com/**_”
5. Ensuite, allez dans le navigateur et **naviguez vers l'URL trouvée** : _https://xyz.firebaseio.com/.json_
6. 2 types de réponses peuvent apparaître :
1. “**Permission Denied**” : Cela signifie que vous ne pouvez pas y accéder, donc c'est bien configuré
2. Réponse “**null**” ou un tas de **données JSON** : Cela signifie que la base de données est publique et que vous avez au moins un accès en lecture.
1. Dans ce cas, vous pourriez **vérifier les privilèges d'écriture**, un exploit pour tester les privilèges d'écriture peut être trouvé ici : [https://github.com/MuhammadKhizerJaved/Insecure-Firebase-Exploit](https://github.com/MuhammadKhizerJaved/Insecure-Firebase-Exploit)

**Note intéressante** : Lors de l'analyse d'une application mobile avec **MobSF**, si elle trouve une base de données firebase, elle vérifiera si celle-ci est **publiquement disponible** et le notifiera.

Alternativement, vous pouvez utiliser [Firebase Scanner](https://github.com/shivsahni/FireBaseScanner), un script python qui automatise la tâche ci-dessus comme montré ci-dessous :
```bash
python FirebaseScanner.py -f <commaSeperatedFirebaseProjectNames>
```
### Enum Authentifié

Si vous avez des identifiants pour accéder à la base de données Firebase, vous pouvez utiliser un outil tel que [**Baserunner**](https://github.com/iosiro/baserunner) pour accéder plus facilement aux informations stockées. Ou un script comme le suivant :
```python
#Taken from https://blog.assetnote.io/bug-bounty/2020/02/01/expanding-attack-surface-react-native/
#Install pyrebase: pip install pyrebase4
import pyrebase

config = {
"apiKey": "FIREBASE_API_KEY",
"authDomain": "FIREBASE_AUTH_DOMAIN_ID.firebaseapp.com",
"databaseURL": "https://FIREBASE_AUTH_DOMAIN_ID.firebaseio.com",
"storageBucket": "FIREBASE_AUTH_DOMAIN_ID.appspot.com",
}

firebase = pyrebase.initialize_app(config)

db = firebase.database()

print(db.get())
```
Pour tester d'autres actions sur la base de données, telles que l'écriture dans la base de données, consultez la documentation de Pyrebase4 qui peut être trouvée [ici](https://github.com/nhorvath/Pyrebase4).

### Accéder aux informations avec APPID et clé API <a href="#access-info-with-appid-and-api-key" id="access-info-with-appid-and-api-key"></a>

Si vous décompilez l'application iOS et ouvrez le fichier `GoogleService-Info.plist` et que vous trouvez la clé API et l'ID d'application :

- CLÉ API **AIzaSyAs1\[...]**
- ID D'APPLICATION **1:612345678909:ios:c212345678909876**

Vous pourriez être en mesure d'accéder à des informations intéressantes

**Demande**

`curl -v -X POST "https://firebaseremoteconfig.googleapis.com/v1/projects/612345678909/namespaces/firebase:fetch?key=AIzaSyAs1[...]" -H "Content-Type: application/json" --data '{"appId": "1:612345678909:ios:c212345678909876", "appInstanceId": "PROD"}'`

## Références <a href="#references" id="references"></a>

- ​[https://blog.securitybreached.org/2020/02/04/exploiting-insecure-firebase-database-bugbounty/](https://blog.securitybreached.org/2020/02/04/exploiting-insecure-firebase-database-bugbounty/)​
- ​[https://medium.com/@danangtriatmaja/firebase-database-takover-b7929bbb62e1](https://medium.com/@danangtriatmaja/firebase-database-takover-b7929bbb62e1)​

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