GCP - Firebase Enum

Support HackTricks

La base de datos en tiempo real de Firebase 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 no autenticada

Algunos puntos finales de Firebase podrían encontrarse en aplicaciones móviles. Es posible que el punto final de Firebase utilizado esté mal configurado, 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 esta POC. Puedes usar “APK Extractor” https://play.google.com/store/apps/details?id=com.ext.ui&hl=e

  2. Descompón 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 esta 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. Permiso Denegado”: 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, verificará 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>

Authenticated Enum

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

Para probar otras acciones en la base de datos, como escribir en la base de datos, consulta la documentación de Pyrebase que se puede encontrar aquí.

Acceder a la 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 el APP ID:

  • API KEY AIzaSyAs1[...]

  • APP ID 1:612345678909:ios:c212345678909876

Es posible que puedas 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

Apoya a HackTricks

Last updated