200개의 공개 앱을 스캔한 결과: Supabase 기반 앱의 절반이 데이터베이스를 노출하고 있습니다.
요약
200개의 공개 GitHub 저장소를 스캔한 결과, Supabase 기반 앱의 절반가량이 심각한 데이터베이스 보안 노출 문제를 안고 있는 것으로 나타났습니다. 특히 RLS 우회 및 인증되지 않은 함수 사용 등 여러 취약점이 발견되었으며, 이는 개발자들이 기본적인 보안 관행을 놓치기 쉬움을 보여줍니다.
핵심 포인트
- Supabase 앱의 48%가 데이터베이스 보안 노출 문제를 안고 있습니다.
- RLS 우회나 서비스-역할 키 사용은 심각한 보안 취약점입니다.
- 앱의 23%는 최신 버전의 Next.js/React를 사용하지 않아 위험합니다.
- 대부분의 앱이 기본적인 보안 헤더(CSP 등) 설정을 누락했습니다.

AI 코딩 도구는 오후 만에 풀스택(full-stack) 애플리케이션을 출시할 수 있습니다. 저는 그들이 무엇과 함께 출시하는지 알고 싶었습니다.
그래서 저는 Lovable, Bolt, v0 및 Supabase + Next.js 템플릿으로 구축된 200개의 공개 GitHub 저장소 (각각 약 50개, 모두 2025년~2026년에 업데이트됨)를 가져와서 각각에 대해 오프라인 정적 보안 스캔(offline static security scan)을 실행했습니다. 라이브 사이트는 건드리지 않았고, 어떤 저장소도 이름을 언급하지 않으며, 집계된 숫자만 보고합니다.
주요 내용
**Supabase 앱의 48% (90개 중 43개)**가 적어도 하나의 심각한 데이터베이스 노출 문제를 가지고 있었습니다:
| 문제점 (Supabase 앱, n = 90) | 비율 |
|---|---|
누구나 호출할 수 있는 Edge Function (verify_jwt = false, 코드에 인증(auth) 없음) 그리고 서비스-역할 키(service-role key)를 사용하여 행 수준 보안(Row Level Security, RLS)을 우회하는 경우 | 27% |
| ... |
이것이 중요한 이유: Supabase 앱에서는 설계상 anon 키가 모든 브라우저로 전송됩니다. 따라서 방문자와 귀하의 데이터 행 사이에는 RLS 정책(및 Edge Function 자체 검사)만이 유일한 방어선입니다.
많이 나타난 다른 문제들
- Supabase 앱의 **38%**가 모든 로그인 사용자(signed-in user)가 호출할 수 있는
SECURI TY DEFINER함수를 가지고 있었습니다. 일부는 내부 역할을 확인하지만, 많은 경우 그렇지 않았습니다 — 한 지갑 기능은 사용자 ID를 매개변수(parameter)로 받아 비용을 청구했습니다. - 모든 앱의 **23%**가 **공개된 심각한 권고 사항(published critical advisory)**이 있는 Next.js / React 버전을 사용하고 있었습니다.
- 모든 앱의 **23%**가 보안 헤더를 전혀 설정하지 않았습니다 (CSP, 프레임 보호 없음).
- Supabase 앱의 **31%**가 공개 스토리지 버킷(public storage bucket)을 가지고 있었습니다 (종종 의도된 경우이므로 어쨌든 확인해 볼 가치는 있습니다).
제가 세지 않은 것들
정적 분석은 방해가 될 수 있습니다. 게시하기 전에, 저는 모든 카테고리에서 샘플들을 실제 코드와 비교하여 직접 확인했고, 문제가 있는 것은 제외하거나 수정했습니다:
- 헤드라인에서 제외한 카테고리는 스팟 체크 결과 정밀도가 혼재되어 나타났기 때문입니다: 인증 확인이 없는 API 라우트, XSS 싱크(sink), 인젝션 등입니다. 이런 문제들은 가끔 실재하지만, 숫자로 언급할 만큼 자주 발생하지는 않습니다.
- 이를 진행하는 과정에서 제 스캐너 자체의 오탐 패턴 10가지를 발견했습니다 (React Router
navigate()가 오픈 리다이렉트(open redirect)로 처리됨, 숫자만으로 구성된 값이 인젝터블(injectable)로 처리됨, 의도적으로 공개된 테이블을 '높음' 등급으로 매긴 경우,requireOrganizer()와 같은 커스텀 가드가 인식되지 않은 경우, 다른 서비스의 SQLite 마이그레이션이 Supabase처럼 처리된 경우 등). 이 모든 문제는 v0.3.1–0.3.2에서 수정되었으며, 각각 회귀 테스트(regression test)를 거쳤습니다.
방법론 (Method)
- 저장소(Repos): README 마커(
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기