GCP - Firebase Enum

Impara l'hacking di AWS da zero a esperto con htARTE (HackTricks AWS Red Team Expert)!

Altri modi per supportare HackTricks:

Il database in tempo reale di Firebase è un database NoSQL ospitato su cloud che consente di archiviare e sincronizzare i dati tra gli utenti in tempo reale. Scopri di più.

Enumerazione non autenticata

Alcuni endpoint di Firebase potrebbero essere trovati nelle applicazioni mobili. È possibile che l'endpoint Firebase utilizzato sia configurato male concedendo a tutti i privilegi di lettura (e scrittura).

Questa è la metodologia comune per cercare e sfruttare database Firebase configurati in modo errato:

  1. Ottieni l'APK dell'applicazione, puoi utilizzare uno qualsiasi degli strumenti per ottenere l'APK dal dispositivo per questa prova di concetto. Puoi utilizzare "APK Extractor" https://play.google.com/store/apps/details?id=com.ext.ui&hl=e

  2. Decompila l'APK utilizzando apktool, segui il comando seguente per estrarre il codice sorgente dall'APK.

  3. Vai a res/values/strings.xml e cerca questo 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. "Permesso negato": ciò significa che non puoi accedervi, quindi è ben configurato

  8. Risposta "null" o un insieme di dati JSON: ciò significa che il database è pubblico e hai almeno accesso in lettura.

  9. In questo caso, potresti verificare 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, verificherà se questo è accessibile pubblicamente e lo segnalerà.

In alternativa, puoi utilizzare Firebase Scanner, uno script python che automatizza il compito sopra mostrato come segue:

python FirebaseScanner.py -f <commaSeperatedFirebaseProjectNames>

Enumerazione Autenticata

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, consulta la documentazione di Pyrebase che puoi trovare 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

Impara l'hacking di AWS da zero a eroe con htARTE (HackTricks AWS Red Team Expert)!

Altri modi per supportare HackTricks:

Last updated