GCP - Firebase Enum

AWSハッキングの学習と練習:HackTricks Training AWS Red Team Expert (ARTE) GCPハッキングの学習と練習: HackTricks Training GCP Red Team Expert (GRTE)

HackTricksのサポート

Firebase Realtime Databaseは、ユーザー間でデータを保存および同期することができるクラウドホスト型のNoSQLデータベースです。詳細はこちら

認証なしの列挙

一部のFirebaseエンドポイントモバイルアプリケーションで見つけることができます。使用されているFirebaseエンドポイントが構成が悪く、誰もが読み取り(および書き込み)の権限を持つように設定されている可能性があります。

これは、構成が不適切なFirebaseデータベースを検索して悪用する一般的な方法です:

  1. アプリのAPKを取得します。このPOCでは、デバイスからAPKを取得するためにツールのいずれかを使用できます。 “APK Extractor”を使用できます https://play.google.com/store/apps/details?id=com.ext.ui&hl=e

  2. apktoolを使用してAPKを逆コンパイルし、以下のコマンドに従ってAPKからソースコードを抽出します。

  3. _res/values/strings.xml_に移動し、ここで“firebase”キーワードを検索します。

  4. 次のようなURLが見つかる場合があります: “https://xyz.firebaseio.com/

  5. 次に、ブラウザに移動して、見つかったURLに移動します: https://xyz.firebaseio.com/.json

  6. 2種類の応答が表示される可能性があります:

  7. Permission Denied”: これはアクセスできないことを意味し、適切に構成されています

  8. null”応答または一連のJSONデータ: これはデータベースが公開されており、少なくとも読み取りアクセス権があることを意味します。

  9. この場合、書き込み権限を確認することができます。書き込み権限をテストするためのエクスプロイトはこちらにあります: https://github.com/MuhammadKhizerJaved/Insecure-Firebase-Exploit

興味深い注記: MobSFでモバイルアプリケーションを分析する際に、Firebaseデータベースが公開されているかどうかをチェックし、通知します。

代替として、以下に示すように上記のタスクを自動化するPythonスクリプトであるFirebase Scannerを使用できます。

python FirebaseScanner.py -f <commaSeperatedFirebaseProjectNames>

認証済み列挙

Firebaseデータベースにアクセスするための資格情報を持っている場合、Baserunnerのようなツールを使用して、保存された情報により簡単にアクセスできます。または、以下のようなスクリプトを使用することもできます:

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

APPIDとAPIキーを使用したアクセス情報

iOSアプリケーションを逆コンパイルしてGoogleService-Info.plistファイルを開くと、APIキーとAPP IDが見つかります:

  • API KEY AIzaSyAs1[...]

  • APP ID 1:612345678909:ios:c212345678909876

興味深い情報にアクセスできるかもしれません

リクエスト

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

参考文献

Last updated