- 잘못 설정된 Firebase 보안 규칙 하나가 수백 개 사이트의 사용자 데이터 노출로 이어졌고, 확인된 규모만 약 1억 2,460만 개 레코드에 달함
- 조사는 웹사이트와 로드된 JavaScript 번들에서 Firebase 설정 변수를 찾는 방식으로 시작됐으며, Python 스캐너의 메모리 문제 때문에 Go로 재작성됨
- 보조 스캐너 Catalyst는 Firebase 컬렉션의 읽기 가능 여부를 자동 확인하고, 샘플 데이터를 바탕으로 노출된 정보 유형과 규모를 추정함
- 집계된 노출 항목에는 이름 84,221,169개, 이메일 106,266,766개, 전화번호 33,559,863개, 평문 비밀번호 20,185,831개, 결제 정보 27,487,924개가 포함됨
- 연구진은 13일 동안 842건의 신고 이메일을 보냈지만, 설정을 고친 사이트 소유자는 24%, 회신한 비율은 1%, 버그 바운티를 제안한 곳은 2개 사이트에 그침
인터넷 규모 Firebase 노출 스캔
- Chattr.ai 침해 사례 이후, 잘못 설정된 Firebase 인스턴스를 통해 노출된 PII를 찾기 위한 인터넷 전체 스캔이 시작됨
- 첫 Python 스캐너는 웹사이트나 로드된
.js번들에서 Firebase 설정 변수를 확인했지만, 약 500개 스레드로 동작하면서 메모리 사용량이 늘었고 1시간 안에 OOM이 발생함 - 이후 Go로 재작성된 스캐너는 550만 개 도메인을 대상으로 실행됐고, 처음 예상한 약 11일보다 긴 2~3주가 걸림
- 초기 수작업 검토만으로도 136개 사이트와 620만 레코드를 찾았지만, 후보 목록이 방대해지면서 완전 자동화가 필요해짐
Catalyst와 노출 규모 산정
- Catalyst는 후보 사이트나 JavaScript 번들을 입력으로 받아, 공통 Firebase 컬렉션과 JavaScript에 직접 언급된 컬렉션의 읽기 접근 가능 여부를 자동 확인함
- 읽기 가능한 컬렉션을 찾으면 100개 레코드 샘플을 수집해 포함된 정보 유형을 확인하고, 이를 컬렉션 전체 크기에 곱해 영향을 추정함
- 결과 저장소로는 PostgreSQL 기반 오픈소스 Firebase 경쟁 제품인 Supabase가 선택됐고, 정리된 데이터는 비공개 데이터베이스 테이블에 업로드됨
- 집계 수치는 다음과 같으며, 실제 노출 규모는 표시된 수치보다 클 가능성이 남아 있음
- 전체 레코드: 124,605,664개
- 이름: 84,221,169개
- 이메일: 106,266,766개
- 전화번호: 33,559,863개
- 비밀번호: 20,185,831개
- 결제 정보: 은행 정보, 인보이스 등 27,487,924개
영향이 컸던 사이트
-
Silid LMS
- 학생과 교사를 위한 학습 관리 시스템
- 이름, 이메일, 전화번호를 포함해 2,700만 명의 사용자 레코드가 노출돼 가장 큰 규모를 기록함
-
온라인 도박 네트워크
- 서로 리스킨된 9개 사이트로 구성됨
- 일부 스핀은 승리 확률이 0%가 되도록 조작돼 있음
- 은행 계정 상세 로그인 정보가 800만 개로 가장 많이 노출됨
- 평문 비밀번호도 1,000만 개로 영향 사이트 중 최대 규모였음
- 문제를 신고하려는 과정에서 고객 지원이 대화 중 추파를 던짐
-
Lead Carrot
- 콜드콜용 온라인 리드 생성 서비스
- 노출된 사용자 정보 규모가 상위 3위이며 2,200만 명에게 영향이 있음
-
MyChefTool
- 레스토랑용 비즈니스 관리 앱 및 POS 애플리케이션
- 노출된 이름 수 1위, 이메일 수 2위로 각각 1,400만 개와 1,300만 개가 노출됨
신고 이후의 반응
- 연구진은 13일 동안 842건의 이메일을 발송함
- 85%는 전달됐고 9%는 반송됨
- 사이트 소유자의 24%가 잘못된 설정을 수정함
- 회신한 사이트 소유자는 1%에 그침
- 0.2%에 해당하는 2개 사이트 소유자가 버그 바운티를 제안함