TL;DR
- BreachProbe는 Lovable, Bolt, v0 또는 Supabase로 만든 앱의 URL 하나를 입력해 공개 데이터 노출을 읽기 전용으로 점검하는 도구임.
- 계정 생성이나 설치 없이 보안 테스트 권한이 있는 앱을 확인하며, 점검 대상은 공개적으로 제공되는 데이터와 설정임.
- 예시 앱
demo-app.lovable.app은 100점 만점에 100점, F 등급으로 표시되며, 즉각적인 데이터 읽기 또는 손상으로 이어질 수 있는 치명적 노출이 발견됨. - 예시에서 치명적 1건, 높음 2건, 중간 3건, 낮음 2건의 문제가 확인되며, 행 단위 보안 정책과 공개 REST 테이블 등이 포함됨.
- 결과에는 점검 항목의 위치와 데이터 출처가 제시되며, 심각도별 수정 안내가 제공됨.
BreachProbe 사용 방식
- Lovable, Bolt, v0 또는 Supabase로 배포한 앱의 URL을 입력해 공개적으로 제공되는 내용을 확인하는 방식임.
- 계정 생성이 필요 없고, 설치 없이 URL 하나로 실행되며, 점검은 읽기 전용임.
- 앱 소유자이거나 해당 앱에 대한 보안 테스트 권한이 있는 경우에 사용한다는 확인 문구가 표시됨.
예시 점검 결과
- 예시 주소
demo-app.lovable.app의 점수는 100점 만점에 100점, 등급은 F로 표시됨. - 화면은 치명적 노출이 발견됐으며, 문제 하나가 현재 누구나 데이터에 접근하거나 데이터를 훼손하게 할 수 있다고 설명함.
- 점수 영역에는 100점 중 0.0점 감점, 0점에서 중단됐다는 표시도 함께 나타남.
- 결과에는 치명적 1건, 높음 2건, 중간 3건, 낮음 2건이 표시되며, 화면 문구에는 8개 중 8개 항목이 표시됐다고 나옴.
- 각 항목은 점검 식별자, 제목, 심각도와 함께 문제 위치 및 데이터 출처를 제시함.
치명적 문제
rls-cross-tenant— 행 단위 보안(Row-Level Security, RLS) 정책 오류: 로그인한 사용자가 다른 사용자의 행을 읽을 수 있는 문제임.- 영향 범위는 테이블 3개이며, 데이터 출처는 로그인한 사용자 2명임.
- 수정 안내는 정책의
USING절에서auth.uid()와 해당 행의 실제 소유자 열을 비교해 현재 사용자의 데이터만 읽도록 설정하는 방식임. - 정책이
using (true)를 사용하거나 잘못된 열을 비교하는 경우가 누출 원인일 수 있으며, 기존 정책을 삭제한 뒤 소유자 열을 기준으로 새 읽기 정책을 만들도록 안내함. - 삽입 시 소유자 열이
auth.uid()로 설정되는지도 확인해야 하며, 이를 위한WITH CHECK정책이 없으면 사용자가 다른 소유자의 데이터로 행을 만들 수 있음. - 새 사용자가 행을 0개 읽는지 확인하도록 BreachProbe에서 다시 점검하는 절차도 안내함.
심각도 높음
open-rest-tables— 로그인 없이 읽을 수 있는 REST 테이블 6개: 위치는 REST이며, 데이터 출처는 Supabase REST임. 전체 보고서에서 해당 위치를 지정하고 에이전트용 수정 안내를 제공함.client-side-admin-flag— 브라우저에서 결정되는 관리자 접근 권한: 위치는 번들이며, 데이터 출처는 배포된 코드임. 전체 보고서에서 해당 위치를 지정하고 에이전트용 수정 안내를 제공함.
심각도 중간
auto-confirm-signups— 누구나 어떤 이메일로든 계정을 만들 수 있음: 위치는 인증이며, 데이터 출처는 로그인한 사용자 2명임. 전체 보고서에서 해당 위치를 지정하고 에이전트용 수정 안내를 제공함.missing-csp— 콘텐츠 보안 정책(Content-Security-Policy) 헤더 없음: 위치는 헤더이며, 데이터 출처는 응답 헤더임. 전체 보고서에서 해당 위치를 지정하고 에이전트용 수정 안내를 제공함.jwt-in-localstorage— 크로스 사이트 스크립팅(XSS)이 탈취할 수 있는 위치에 인증 토큰 저장: 위치는 번들이며, 데이터 출처는 배포된 코드임. 전체 보고서에서 해당 위치를 지정하고 에이전트용 수정 안내를 제공함.
심각도 낮음
rest-schema-enumerable— 데이터베이스 스키마를 공개적으로 열거할 수 있음: 위치는 REST이며, 데이터 출처는 Supabase REST임. 전체 보고서에서 해당 위치를 지정하고 에이전트용 수정 안내를 제공함.missing-referrer-policy— 리퍼러 정책(Referrer-Policy) 헤더 없음: 위치는 헤더이며, 데이터 출처는 응답 헤더임. 전체 보고서에서 해당 위치를 지정하고 에이전트용 수정 안내를 제공함.
예시 데이터와 채점
- 예시는 엔진이 실제 사용하는 점검 식별자, 제목, 심각도와 동일한 항목을 사용하며, 유료 고객 앱의 점수 산정에 쓰이는 함수로 채점한 결과임.
- 예시의 대상 앱은 실제 앱이 아니라 가상으로 만든 대상임.
댓글 (0)
로그인하면 이 기사에 내 생각을 남길 수 있어요