כללי האבטחה Firebase מספקים מנגנון מפורט, נאכף שרת, להגנה על נתונים ב-Firestore, במסד נתונים בזמן אמת וב-Cloud Storage [S1]. מכיוון שיישומי Firebase מקיימים לעתים קרובות אינטראקציה עם שירותי ענן אלה ישירות מצד הלקוח, כללים אלה מייצגים את המחסום היחיד המונע גישה לא מורשית לנתוני הקצה האחורי [S1].
ההשפעה של כללים מתירים
כללים שגויים יכולים להוביל לחשיפה משמעותית לנתונים [S2]. אם כללים מוגדרים כמתירניים מדי - לדוגמה, שימוש בהגדרות ברירת המחדל של 'מצב בדיקה' המאפשרות גישה גלובלית - כל משתמש עם ידע על מזהה הפרויקט יכול לקרוא, לשנות או למחוק את כל תוכן מסד הנתונים [S2]. זה עוקף את כל אמצעי האבטחה בצד הלקוח ועלול לגרום לאובדן מידע משתמש רגיש או להפרעה מוחלטת בשירות [S2].
סיבת שורש: לוגיקה של הרשאות לא מספקת
הסיבה העיקרית לפגיעויות אלו היא בדרך כלל הכישלון ביישום תנאים ספציפיים המגבילים את הגישה על סמך זהות המשתמש או תכונות המשאב [S3]. מפתחים משאירים לעתים קרובות תצורות ברירת מחדל פעילות בסביבות ייצור שאינן מאמתות את האובייקט request.auth [S3]. מבלי להעריך את request.auth, המערכת לא יכולה להבחין בין משתמש מאומת לגיטימי לבין מבקש אנונימי [S3].
תיקון טכני
אבטחת סביבת Firebase מצריכה מעבר מגישה פתוחה למודל ה-principal of-less-privilege.
- אכוף אימות: ודא שכל הנתיבים הרגישים דורשים הפעלת משתמש חוקית על ידי בדיקה אם האובייקט
request.authאינו null [S3]. - הטמיע גישה מבוססת זהות: הגדר כללים המשווים את ה-UID של המשתמש (
request.auth.uid) לשדה בתוך המסמך או למזהה המסמך עצמו כדי להבטיח שמשתמשים יוכלו לגשת רק לנתונים שלהם [S3]. - היקף הרשאה פרטנית: הימנע מתווים כלליים גלובליים עבור אוספים. במקום זאת, הגדר כללים ספציפיים עבור כל אוסף ותת-אוסף כדי למזער את משטח ההתקפה הפוטנציאלי [S2].
- אימות באמצעות Emulator Suite: השתמש ב-Firebase Emulator Suite כדי לבדוק כללי אבטחה באופן מקומי. זה מאפשר אימות של לוגיקה של בקרת גישה מול אישיות משתמשים שונים לפני פריסה לסביבה חיה [S2].
כיצד FixVibe בודק את זה
FixVibe כולל כעת את זה כסריקת BaaS לקריאה בלבד. baas.firebase-rules מחלץ את תצורת Firebase מחבילות JavaScript מאותו מקור, כולל צורות חבילות מודרניות של initializeApp(...), ולאחר מכן בודק מסד נתונים בזמן אמת, Firestore ו-Firebase אחסון בקריאה לא-נאוטית. עבור Firestore, היא מנסה תחילה רישום של אוסף שורש; כאשר הרישום חסום, הוא גם בודק שמות אוספים רגישים נפוצים כגון users, accounts, customers, orders, ZXCVFIXVIBETOKEN6ZXVIXCV, ZXCVFIXVIBETOKEN6ZXZVIXCV, ZBEVCCV, customers, admin, ו-settings. הוא מדווח רק על קריאה אנונימית או רישומים מוצלחים ואינו כותב, מוחק או מאחסן תוכן מסמכי לקוחות.
