GCP - Firebase Enum

Aprende hacking en AWS de cero a héroe con htARTE (HackTricks AWS Red Team Expert)!

Otras formas de apoyar a HackTricks:

Firebase Realtime Database es una base de datos NoSQL alojada en la nube que te permite almacenar y sincronizar datos entre tus usuarios en tiempo real. Aprende más.

Enumeración sin autenticación

Algunos puntos finales de Firebase podrían encontrarse en aplicaciones móviles. Es posible que el punto final de Firebase utilizado esté configurado incorrectamente otorgando privilegios a todos para leer (y escribir) en él.

Esta es la metodología común para buscar y explotar bases de datos de Firebase mal configuradas:

  1. Obtén el APK de la aplicación, puedes usar cualquiera de las herramientas para obtener el APK del dispositivo para este POC. Puedes usar "APK Extractor" https://play.google.com/store/apps/details?id=com.ext.ui&hl=e

  2. Descompila el APK usando apktool, sigue el siguiente comando para extraer el código fuente del APK.

  3. Ve a res/values/strings.xml y busca esto y busca la palabra clave “firebase

  4. Puedes encontrar algo como esta URL “https://xyz.firebaseio.com/

  5. A continuación, ve al navegador y navega a la URL encontrada: https://xyz.firebaseio.com/.json

  6. Pueden aparecer 2 tipos de respuestas:

    1. Permission Denied”: Esto significa que no puedes acceder, por lo que está bien configurado

    2. Respuesta “null” o un montón de datos JSON: Esto significa que la base de datos es pública y al menos tienes acceso de lectura.

      1. En este caso, podrías verificar los privilegios de escritura, un exploit para probar los privilegios de escritura se puede encontrar aquí: https://github.com/MuhammadKhizerJaved/Insecure-Firebase-Exploit

Nota interesante: Al analizar una aplicación móvil con MobSF, si encuentra una base de datos de firebase, comprobará si esta está disponible públicamente y lo notificará.

Alternativamente, puedes usar Firebase Scanner, un script de python que automatiza la tarea anterior como se muestra a continuación:

python FirebaseScanner.py -f <commaSeperatedFirebaseProjectNames>

Enumeración Autenticada

Si tienes credenciales para acceder a la base de datos de Firebase, puedes usar una herramienta como Baserunner para acceder más fácilmente a la información almacenada. O un script como el siguiente:

#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())

Acceso a información con APPID y API Key

Si descompilas la aplicación de iOS y abres el archivo GoogleService-Info.plist y encuentras la API Key y APP ID:

  • API KEY AIzaSyAs1[...]

  • APP ID 1:612345678909:ios:c212345678909876

Podrías acceder a información interesante

Solicitud

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

Referencias

Aprende hacking en AWS de cero a héroe con htARTE (HackTricks AWS Red Team Expert)!

Otras formas de apoyar a HackTricks:

Última actualización