# GCP - Firebase Enum

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

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

Il Firebase Realtime Database è un database NoSQL ospitato nel cloud che consente di memorizzare e sincronizzare i dati tra gli utenti in tempo reale. [Scopri di più](https://firebase.google.com/products/realtime-database/).

### Enum non autenticato

Alcuni **endpoint Firebase** potrebbero trovarsi in **applicazioni mobili**. È possibile che l'endpoint Firebase utilizzato sia **configurato male concedendo a tutti i privilegi di lettura (e scrittura)** su di esso.

Questa è la metodologia comune per cercare e sfruttare database Firebase mal configurati:

1. **Ottieni l'APK** dell'app, puoi utilizzare uno qualsiasi degli strumenti per ottenere l'APK dal dispositivo per questo POC.\
Puoi usare “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. **Decompila** l'APK usando **apktool**, segui il comando qui sotto per estrarre il codice sorgente dall'APK.
3. Vai a _**res/values/strings.xml**_ e cerca questa e **cerca** la parola chiave “**firebase**”
4. Potresti trovare qualcosa come questo URL “_**https://xyz.firebaseio.com/**_”
5. Successivamente, vai al browser e **naviga all'URL trovato**: _https://xyz.firebaseio.com/.json_
6. Possono apparire 2 tipi di risposte:
   1. “**Permission Denied**”: Questo significa che non puoi accedervi, quindi è ben configurato
   2. Risposta “**null**” o un insieme di **dati JSON**: Questo significa che il database è pubblico e hai almeno accesso in lettura.
      1. In questo caso, potresti **controllare i privilegi di scrittura**, un exploit per testare i privilegi di scrittura può essere trovato qui: [https://github.com/MuhammadKhizerJaved/Insecure-Firebase-Exploit](https://github.com/MuhammadKhizerJaved/Insecure-Firebase-Exploit)

**Nota interessante**: Quando si analizza un'applicazione mobile con **MobSF**, se trova un database firebase controllerà se questo è **pubblicamente disponibile** e lo notificherà.

In alternativa, puoi utilizzare [Firebase Scanner](https://github.com/shivsahni/FireBaseScanner), uno script python che automatizza il compito sopra come mostrato di seguito:
```bash
python FirebaseScanner.py -f <commaSeperatedFirebaseProjectNames>
```
### Enum Autenticato

Se hai le credenziali per accedere al database Firebase, puoi utilizzare uno strumento come [**Baserunner**](https://github.com/iosiro/baserunner) per accedere più facilmente alle informazioni memorizzate. Oppure uno script come il seguente:
```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())
```
Per testare altre azioni sul database, come la scrittura nel database, fare riferimento alla documentazione di Pyrebase4 che può essere trovata [qui](https://github.com/nhorvath/Pyrebase4).

### Accesso alle informazioni con APPID e API Key <a href="#access-info-with-appid-and-api-key" id="access-info-with-appid-and-api-key"></a>

Se decompili l'applicazione iOS e apri il file `GoogleService-Info.plist` e trovi la API Key e l'APP ID:

- API KEY **AIzaSyAs1\[...]**
- APP ID **1:612345678909:ios:c212345678909876**

Potresti essere in grado di accedere ad alcune informazioni interessanti

**Richiesta**

`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"}'`

## Riferimenti <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}}
