FixVibe
Covered by FixVibehigh

กฎความปลอดภัย Firebase: การป้องกันการเปิดเผยข้อมูลที่ไม่ได้รับอนุญาต

กฎความปลอดภัย Firebase เป็นการป้องกันหลักสำหรับแอปพลิเคชันแบบไร้เซิร์ฟเวอร์ที่ใช้ Firestore และ Cloud Storage เมื่อกฎเหล่านี้มีการอนุญาตมากเกินไป เช่น การอนุญาตให้เข้าถึงการอ่านหรือเขียนทั่วโลกในการผลิต ผู้โจมตีสามารถข้ามตรรกะของแอปพลิเคชันที่ต้องการเพื่อขโมยหรือลบข้อมูลที่ละเอียดอ่อนได้ งานวิจัยนี้สำรวจการกำหนดค่าที่ไม่ถูกต้องทั่วไป ความเสี่ยงของค่าเริ่มต้น 'โหมดทดสอบ' และวิธีการใช้การควบคุมการเข้าถึงตามข้อมูลประจำตัว

CWE-284CWE-863

กฎความปลอดภัย Firebase มอบกลไกที่บังคับใช้โดยเซิร์ฟเวอร์โดยละเอียดเพื่อปกป้องข้อมูลใน Firestore, Realtime Database และ Cloud Storage [S1] เนื่องจากแอปพลิเคชัน Firebase มักจะโต้ตอบกับบริการคลาวด์เหล่านี้โดยตรงจากฝั่งไคลเอ็นต์ กฎเหล่านี้จึงเป็นอุปสรรคเดียวที่ป้องกันการเข้าถึงข้อมูลแบ็กเอนด์ [S1] โดยไม่ได้รับอนุญาต

ผลกระทบของกฎการอนุญาต

กฎที่กำหนดค่าไม่ถูกต้องอาจทำให้เกิดการเปิดเผยข้อมูลที่สำคัญ [S2] หากมีการตั้งค่ากฎให้อนุญาตมากเกินไป เช่น การใช้การตั้งค่าเริ่มต้น 'โหมดทดสอบ' ที่อนุญาตการเข้าถึงทั่วโลก ผู้ใช้ที่มีความรู้เกี่ยวกับรหัสโปรเจ็กต์สามารถอ่าน แก้ไข หรือลบเนื้อหาฐานข้อมูลทั้งหมด [S2] การดำเนินการนี้จะข้ามมาตรการรักษาความปลอดภัยฝั่งไคลเอ็นต์ทั้งหมด และอาจส่งผลให้ข้อมูลผู้ใช้ที่ละเอียดอ่อนสูญหายหรือบริการหยุดชะงักโดยสิ้นเชิง [S2]

สาเหตุที่แท้จริง: ลอจิกการให้สิทธิ์ไม่เพียงพอ

สาเหตุของช่องโหว่เหล่านี้โดยทั่วไปคือความล้มเหลวในการใช้เงื่อนไขเฉพาะที่จำกัดการเข้าถึงตามข้อมูลระบุตัวตนของผู้ใช้หรือคุณลักษณะของทรัพยากร [S3] นักพัฒนามักปล่อยให้การกำหนดค่าเริ่มต้นทำงานอยู่ในสภาพแวดล้อมการใช้งานจริงซึ่งไม่ได้ตรวจสอบวัตถุ request.auth ZXCVFIXVIBTOKEN3ZXCV หากไม่มีการประเมิน request.auth ระบบจะไม่สามารถแยกแยะระหว่างผู้ใช้ที่ได้รับการพิสูจน์ตัวตนที่ถูกต้องตามกฎหมายและผู้ร้องขอที่ไม่ระบุชื่อ [S3]

การแก้ไขทางเทคนิค

การรักษาความปลอดภัยสภาพแวดล้อม Firebase จำเป็นต้องย้ายจากการเข้าถึงแบบเปิดไปยังโมเดลที่มีสิทธิพิเศษน้อยที่สุด

  • บังคับใช้การตรวจสอบสิทธิ์: ตรวจสอบให้แน่ใจว่าพาธที่ละเอียดอ่อนทั้งหมดต้องมีเซสชันผู้ใช้ที่ถูกต้อง โดยการตรวจสอบว่าออบเจ็กต์ request.auth ไม่ใช่ค่าว่าง [S3]
  • ใช้การเข้าถึงตามข้อมูลประจำตัว: กำหนดค่ากฎที่เปรียบเทียบ UID ของผู้ใช้ (request.auth.uid) กับฟิลด์ภายในเอกสารหรือ ID เอกสารเอง เพื่อให้แน่ใจว่าผู้ใช้สามารถเข้าถึงเฉพาะข้อมูลของตนเอง [S3]
  • ขอบเขตการอนุญาตแบบละเอียด: หลีกเลี่ยงสัญลักษณ์ตัวแทนสากลสำหรับคอลเลกชัน ให้กำหนดกฎเฉพาะสำหรับแต่ละคอลเลกชันและคอลเลกชันย่อยแทน เพื่อลดพื้นที่การโจมตีที่อาจเกิดขึ้น [S2]
  • การตรวจสอบความถูกต้องผ่าน Emulator Suite: ใช้ Firebase Emulator Suite เพื่อทดสอบกฎความปลอดภัยในเครื่อง ซึ่งจะช่วยให้สามารถตรวจสอบตรรกะการควบคุมการเข้าถึงกับบุคลิกของผู้ใช้ต่างๆ ก่อนที่จะปรับใช้กับสภาพแวดล้อมจริง [S2]

วิธีทดสอบ FixVibe

ขณะนี้ FixVibe ได้รวมสิ่งนี้ไว้ในการสแกน BaaS แบบอ่านอย่างเดียว baas.firebase-rules แยกการกำหนดค่า Firebase ออกจากบันเดิล JavaScript ที่มีต้นกำเนิดเดียวกัน รวมถึงรูปร่างบันเดิล initializeApp(...) สมัยใหม่ จากนั้นตรวจสอบฐานข้อมูลเรียลไทม์ Firestore และพื้นที่เก็บข้อมูล ZXCVFIXVIBTOKEN12ZXCV ที่มีคำขออ่านอย่างเดียวที่ไม่ได้รับการรับรองความถูกต้อง สำหรับ Firestore อันดับแรกจะพยายามแสดงรายการคอลเลกชันรูท เมื่อรายการถูกบล็อก ยังตรวจสอบชื่อคอลเลกชันที่ละเอียดอ่อนทั่วไป เช่น users, accounts, customers, orders, payments, messages, admin และ settings รายงานเฉพาะการอ่านหรือรายการที่ไม่เปิดเผยตัวตนที่ประสบความสำเร็จเท่านั้น และไม่ได้เขียน ลบ หรือจัดเก็บเนื้อหาเอกสารของลูกค้า