GCP - Firebase Enum

Apoya a 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 sin autenticación

Algunos endpoints de Firebase podrían encontrarse en aplicaciones móviles. Es posible que el endpoint de Firebase utilizado esté configurado de manera deficiente otorgando privilegios de lectura (y escritura) a todos.

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

  1. Obtener el APK de la aplicación, puedes usar cualquier herramienta 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. Descompilar 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 "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:

  7. "Permiso Denegado": Esto significa que no puedes acceder, por lo que está bien configurado

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

  9. En este caso, podrías verificar los privilegios de escritura, se puede encontrar un exploit para probar los privilegios de escritura 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 en 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 utilizar una herramienta como Baserunner para acceder de manera más sencilla 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 el 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

Last updated