GCP - Firebase Enum

Support HackTricks

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ù.

Enum non autenticato

Alcuni endpoint Firebase potrebbero essere trovati 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

  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:

  7. Permission Denied”: Questo significa che non puoi accedervi, quindi è ben configurato

  8. Risposta “null” o un insieme di dati JSON: Questo significa che il database è pubblico e hai almeno accesso in lettura.

  9. 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

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, uno script python che automatizza il compito sopra come mostrato di seguito:

python FirebaseScanner.py -f <commaSeperatedFirebaseProjectNames>

Authenticated Enum

Se hai le credenziali per accedere al database Firebase, puoi utilizzare uno strumento come Baserunner per accedere più facilmente alle informazioni memorizzate. Oppure uno script come il seguente:

#Taken from https://blog.assetnote.io/bug-bounty/2020/02/01/expanding-attack-surface-react-native/
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 Pyrebase che può essere trovata qui.

Accesso alle informazioni con APPID e API Key

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

Supporta HackTricks

Last updated