FixVibe
Covered by FixVibehigh

Firebase 보안 규칙: 무단 데이터 노출 방지

Firebase 보안 규칙은 Firestore 및 Cloud Storage를 사용하는 서버리스 애플리케이션에 대한 기본 방어입니다. 프로덕션에서 전역 읽기 또는 쓰기 액세스를 허용하는 등 이러한 규칙이 너무 관대하면 공격자는 의도된 애플리케이션 논리를 우회하여 민감한 데이터를 훔치거나 삭제할 수 있습니다. 이 연구에서는 일반적인 구성 오류, '테스트 모드' 기본값의 위험, ID 기반 액세스 제어 구현 방법을 살펴봅니다.

CWE-284CWE-863

Firebase 보안 규칙은 Firestore, 실시간 데이터베이스, Cloud Storage [S1]의 데이터를 보호하기 위한 세분화된 서버 시행 메커니즘을 제공합니다. Firebase 애플리케이션은 클라이언트 측에서 직접 이러한 클라우드 서비스와 상호 작용하는 경우가 많기 때문에 이러한 규칙은 백엔드 데이터 [S1]에 대한 무단 액세스를 방지하는 유일한 장벽을 나타냅니다.

허용 규칙의 영향

잘못 구성된 규칙으로 인해 심각한 데이터 노출이 발생할 수 있습니다. [S2]. 규칙이 과도하게 허용되도록 설정된 경우(예: 전역 액세스를 허용하는 기본 '테스트 모드' 설정 사용) 프로젝트 ID를 아는 모든 사용자는 전체 데이터베이스 콘텐츠 [S2]를 읽거나 수정하거나 삭제할 수 있습니다. 이는 모든 클라이언트 측 보안 조치를 우회하며 민감한 사용자 정보가 손실되거나 전체 서비스가 중단될 수 있습니다. [S2].

근본 원인: 권한 부여 논리 부족

이러한 취약점의 근본 원인은 일반적으로 사용자 ID 또는 리소스 속성 [S3]를 기반으로 액세스를 제한하는 특정 조건을 구현하지 못하기 때문에 발생합니다. 개발자는 request.auth 개체 [S3]의 유효성을 검사하지 않는 프로덕션 환경에서 기본 구성을 활성 상태로 두는 경우가 많습니다. request.auth를 평가하지 않으면 시스템은 합법적으로 인증된 사용자와 익명 요청자 [S3]를 구별할 수 없습니다.

기술적 문제 해결

Firebase 환경을 보호하려면 개방형 액세스에서 최소 권한 원칙 모델로 전환해야 합니다.

  • 인증 시행: request.auth 개체가 null [S3]가 아닌지 확인하여 모든 중요한 경로에 유효한 사용자 세션이 필요한지 확인하세요.
  • ID 기반 액세스 구현: 사용자의 UID(request.auth.uid)를 문서 내 필드 또는 문서 ID 자체와 비교하여 사용자가 자신의 데이터 [S3]에만 액세스할 수 있도록 하는 규칙을 구성합니다.
  • 세분화된 권한 범위: 컬렉션에 전역 와일드카드를 사용하지 마세요. 대신 각 컬렉션 및 하위 컬렉션에 대한 특정 규칙을 정의하여 잠재적인 공격 표면 [S2]를 최소화하세요.
  • 에뮬레이터 제품군을 통한 유효성 검사: Firebase 에뮬레이터 제품군을 사용하여 로컬에서 보안 규칙을 테스트합니다. 이를 통해 라이브 환경 [S2]에 배포하기 전에 다양한 사용자 페르소나에 대한 액세스 제어 논리를 확인할 수 있습니다.

FixVibe가 이를 테스트하는 방법

이제 FixVibe에는 이 스캔이 읽기 전용 BaaS 스캔으로 포함됩니다. baas.firebase-rules는 최신 initializeApp(...) 번들 형태를 포함하여 동일한 원본 JavaScript 번들에서 Firebase 구성을 추출한 다음 인증되지 않은 읽기 전용 요청으로 실시간 데이터베이스, Firestore 및 Firebase 스토리지를 확인합니다. Firestore의 경우 먼저 루트 컬렉션 나열을 시도합니다. 목록이 차단되면 users, accounts, customers, orders, payments, messages와 같은 일반적인 민감한 컬렉션 이름도 검색합니다. adminsettings. 성공적인 익명 읽기 또는 나열만 보고하며 고객 문서 내용을 작성, 삭제 또는 저장하지 않습니다.