GCP - Firebase Enum

Apprenez le hacking AWS de zéro à héros avec htARTE (HackTricks AWS Red Team Expert)!

Autres moyens de soutenir HackTricks :

La base de données Firebase Realtime est une base de données NoSQL hébergée dans le cloud qui vous permet de stocker et de synchroniser des données entre vos utilisateurs en temps réel. En savoir plus.

Enum non authentifié

Certains points de terminaison Firebase pourraient être trouvés dans des applications mobiles. Il est possible que le point de terminaison Firebase utilisé soit mal configuré, accordant à tous les privilèges de lire (et d'écrire) dessus.

Voici la méthodologie courante pour rechercher et exploiter des bases de données Firebase mal configurées :

  1. Obtenez l'APK de l'application, vous pouvez utiliser n'importe quel outil pour obtenir l'APK de l'appareil pour cette preuve de concept (POC). Vous pouvez utiliser "APK Extractor" https://play.google.com/store/apps/details?id=com.ext.ui&hl=e

  2. Décompilez l'APK en utilisant apktool, suivez la commande ci-dessous pour extraire le code source de l'APK.

  3. Allez dans le fichier res/values/strings.xml et cherchez ceci et recherchez le mot-clé "firebase"

  4. Vous pourriez trouver quelque chose comme cette URL "https://xyz.firebaseio.com/"

  5. Ensuite, allez dans le navigateur et naviguez vers l'URL trouvée : https://xyz.firebaseio.com/.json

  6. 2 types de réponses peuvent apparaître :

    1. "Permission refusée" : Cela signifie que vous ne pouvez pas y accéder, donc elle est bien configurée

    2. Réponse "null" ou un tas de données JSON : Cela signifie que la base de données est publique et que vous avez au moins un accès en lecture.

      1. Dans ce cas, vous pourriez vérifier les privilèges d'écriture, un exploit pour tester les privilèges d'écriture peut être trouvé ici : https://github.com/MuhammadKhizerJaved/Insecure-Firebase-Exploit

Note intéressante : Lors de l'analyse d'une application mobile avec MobSF, s'il trouve une base de données firebase, il vérifiera si elle est publiquement disponible et le notifiera.

Alternativement, vous pouvez utiliser Firebase Scanner, un script python qui automatise la tâche ci-dessus comme indiqué ci-dessous :

python FirebaseScanner.py -f <commaSeperatedFirebaseProjectNames>

Énumération Authentifiée

Si vous disposez de crédentials pour accéder à la base de données Firebase, vous pouvez utiliser un outil tel que Baserunner pour accéder plus facilement aux informations stockées. Ou un script comme le suivant :

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

Pour tester d'autres actions sur la base de données, telles que l'écriture dans la base de données, reportez-vous à la documentation Pyrebase qui peut être trouvée ici.

Accéder aux informations avec APPID et clé API

Si vous décompilez l'application iOS et ouvrez le fichier GoogleService-Info.plist et que vous trouvez la clé API et l'APP ID :

  • Clé API AIzaSyAs1[...]

  • APP ID 1:612345678909:ios:c212345678909876

Vous pourriez être en mesure d'accéder à certaines informations intéressantes

Requête

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

Références

Apprenez le hacking AWS de zéro à héros avec htARTE (HackTricks AWS Red Team Expert)!

Autres moyens de soutenir HackTricks :

Dernière mise à jour