FixVibe
Covered by FixVibehigh

Firebase saugos taisyklės: neleistino duomenų atskleidimo prevencija

Saugos taisyklės Firebase yra pagrindinė be serverio programų, naudojančių „Firestore“ ir „Cloud Storage“, apsauga. Kai šios taisyklės yra pernelyg leistinos, pvz., leidžiant visuotinę skaitymo ar rašymo prieigą gamyboje, užpuolikai gali apeiti numatytą programos logiką, kad pavogtų arba ištrintų neskelbtinus duomenis. Šiame tyrime nagrinėjamos dažnai pasitaikančios netinkamos konfigūracijos, numatytųjų „bandymo režimo“ nustatymų rizika ir kaip įdiegti tapatybe pagrįstą prieigos kontrolę.

CWE-284CWE-863

Saugos taisyklėse Firebase pateikiamas smulkus, serverio vykdomas mechanizmas, skirtas apsaugoti duomenis „Firestore“, „Realtime Database“ ir „Cloud Storage“ [S1]. Kadangi Firebase programos dažnai sąveikauja su šiomis debesies paslaugomis tiesiogiai iš kliento pusės, šios taisyklės yra vienintelė kliūtis, neleidžianti neteisėtai pasiekti užpakalinių duomenų [S1].

Leidžiamųjų taisyklių poveikis

Neteisingai sukonfigūruotos taisyklės gali sukelti didelį duomenų atskleidimą [S2]. Jei taisyklės nustatytos kaip pernelyg leistinos, pavyzdžiui, naudojant numatytuosius „bandymo režimo“ nustatymus, leidžiančius visuotinę prieigą, bet kuris vartotojas, žinantis projekto ID, gali skaityti, keisti arba ištrinti visą duomenų bazės turinį [S2]. Taip apeinamos visos kliento pusės saugumo priemonės ir gali būti prarasta neskelbtina vartotojo informacija arba gali būti visiškai sutrikdyta paslauga [S2].

Pagrindinė priežastis: nepakankama autorizacijos logika

Pagrindinė šių spragų priežastis paprastai yra nesugebėjimas įgyvendinti konkrečių sąlygų, kurios riboja prieigą pagal vartotojo tapatybę arba išteklių atributus [S3]. Kūrėjai dažnai palieka aktyvias numatytąsias konfigūracijas gamybinėse aplinkose, kurios nepatvirtina objekto request.auth [S3]. Neįvertinusi request.auth, sistema negali atskirti teisėto autentifikuoto vartotojo ir anoniminio prašytojo [S3].

Techninis ištaisymas

Norint apsaugoti Firebase aplinką, reikia pereiti nuo atviros prieigos prie mažiausių privilegijų modelio.

  • Įgyvendinti autentifikavimą: įsitikinkite, kad visiems jautriems keliams reikalinga tinkama vartotojo sesija, patikrindami, ar objektas request.auth nėra niekinis [S3].
  • Įdiekite tapatybe pagrįstą prieigą: sukonfigūruokite taisykles, lyginančias vartotojo UID (request.auth.uid) su laukeliu dokumente arba pačiu dokumento ID, kad vartotojai galėtų pasiekti tik savo duomenis [S3].
  • Granuliarus leidimų aprėptis: kolekcijose venkite visuotinių pakaitos simbolių. Vietoj to nustatykite konkrečias kiekvieno rinkinio ir subkolekcijos taisykles, kad sumažintumėte galimą atakos paviršių [S2].
  • Patvirtinimas naudojant emuliatorių: naudokite Firebase emuliatoriaus komplektą, kad patikrintumėte saugos taisykles vietoje. Tai leidžia patikrinti prieigos valdymo logiką pagal įvairius vartotojo asmenis prieš diegiant į gyvą aplinką [S2].

Kaip FixVibe tai tikrina

FixVibe dabar apima tik skaitymo BaaS nuskaitymą. baas.firebase-rules ištraukia Firebase konfigūraciją iš tos pačios kilmės „JavaScript“ paketų, įskaitant modernias initializeApp(...) paketų formas, tada patikrina duomenų bazę realiuoju laiku, „Firestore“ ir ZXCVFIXZVIBETOKEN12, nuskaitytą užklausą. „Firestore“ pirmiausia išbando šakninių kolekcijų sąrašą; kai įrašas blokuojamas, jis taip pat tiria įprastus jautrių rinkinių pavadinimus, pvz., users, accounts, customers, orders, users, messages, admin ir settings. Ji praneša tik apie sėkmingus anoniminius skaitymus arba sąrašus ir nerašo, neištrina ir nesaugo kliento dokumento turinio.