
Supabase를 위한 오픈소스 보안 감사 도구: 읽기 전용 MCP 서버, CLI 에이전트, Claude Skill. RLS 오구성, 노출된 키, 위험한 함수를 찾아내고 수정 SQL이 포함된 점수화된 보고서를 반환합니다. 호스팅 버전: Locksoup.
데이터베이스 백엔드를 위한 보안 감사. "내 데이터베이스 감사해줘"라고 요청하면 점수가 매겨진 보고서와 정확한 수정 코드를 받을 수 있습니다.
Claude Skill(Supabase, MongoDB), 모든 AI 클라이언트를 위한 읽기 전용 MCP 서버, 또는 자체 모델을 사용하는 CLI 에이전트(둘 다 Supabase)로 작동합니다.
→ 직접 실행하고 싶지 않으신가요? Locksoup은 호스팅 버전입니다: 예약된 재검사와 알림이 포함된 Supabase 보안 감사.
2026-10-01 (v1.0.1)
2026-09-30 (문서)
evals/mcp_client.py, 평가 시스템 m.v1.0.0 (2026-09-30): MCP 서버 릴리스
audit 프롬프트 및 카탈로그 리소스. 종단 간 벤치마크: 서버를 stdio로 구동한 모델이 테스트 F1 0.865, 치명적 재현율 1.0을 기록했습니다.BYPASSRLS가 있는 읽기 전용 역할, 20개 쿼리 전부.anon/authenticated가 취소된 경우 노출로 보고되지 않습니다.026.uvx/pipx 명령에서 git+https://github.com/Farenhytee/[email protected]. Claude Code 플러그인은 자동으로 고정됩니다.--deep은 도구를 사용하는 에이전트를 실행하며, 우리 벤치에서 동일한 점수를 약 5배 비용으로 기록했습니다.v0.2.1 (2026-09-30)
v0.2.0 (2026-09-29)
--fix: 선택한 발견에 대한 수정 SQL을 출력합니다. 절대 실행되지 않습니다.2026-09-29
uvx --from git+… sentinel-mcp) 및 에이전트 (pipx install "database-sentinel[agent] @ git+…")를 위한 원 명령.sentinel-mcp --role-sql이 읽기 전용 역할 설정 SQL을 출력합니다.2026-09-28
audit 프롬프트 및 패턴 카탈로그를 리소스로 제공. 자체 LLM이 분석을 수행하므로 무료입니다.sentinel-audit). 모든 OpenAI 호환 모델과 작동하는 LangGraph 파이프라인: OpenRouter, OpenAI 또는 로컬 Ollama.Claude Code는 감사 스킬과 MCP 서버를 한 번에 설치합니다 (uv 필요):
claude plugin marketplace add Farenhytee/database-sentinel
claude plugin install database-sentinel@database-sentinel
Supabase 사용자: 읽기 전용 로그인을 생성한 후 (1단계), Claude Code에서 /plugin configure database-sentinel@database-sentinel을 실행하세요. 그런 다음 요청하세요: Audit my database.
기타 MCP 클라이언트 및 전체 설정: MCP 가이드
스킬만 (Claude Code가 자동으로 인식):
git clone https://github.com/Farenhytee/database-sentinel.git ~/.claude/skills/database-sentinel
CLI 에이전트 (Supabase, 자체 모델 사용):
pipx install "database-sentinel[agent] @ git+https://github.com/Farenhytee/database-sentinel"
export SENTINEL_BASE_URL=http://localhost:11434/v1 SENTINEL_MODEL=<model> # Ollama, 또는 모든 OpenAI 호환 API + SENTINEL_API_KEY
sentinel-audit --dsn "postgresql://sentinel_auditor:<password>@<host>:5432/postgres" \
--rest-url https://<ref>.supabase.co --anon-key <anon key> --repo ./my-app
기본 감사는 하나의 프롬프트와 anon-프로브 검증입니다. --deep은 대신 도구를 사용하는 에이전트를 실행합니다: 우리 벤치에서 동일한 정확도, 약 5배 비용. --fix는 선택한 발견에 대한 수정 SQL을 출력합니다; 절대 실행되지 않습니다.
| 백엔드 | 패턴 | 예시 |
|---|---|---|
| Supabase | 27 (카탈로그) | RLS 비활성화, 프론트엔드의 service-role 키, USING (true), RLS를 우회하는 뷰, 노출된 SECURITY DEFINER 함수, 정책의 user_metadata, 대량 할당, 공개 버킷 |
| MongoDB | 20 (카탈로그) | MongoBleed (CVE-2025-14847), 인증 비활성화, 0.0.0.0/0 Atlas 허용 목록, 서버 측 JS, 권한 있는 앱 사용자 |
전체 표는 부록 A에 있습니다.
| 백엔드 | Skill | MCP 서버 / 에이전트 |
|---|---|---|
| Supabase | ✅ | ✅ |
| MongoDB | ✅ | 계획됨 |
| Firebase, Postgres, MySQL, 크로스 백엔드 | 계획됨 | 계획됨 |
MIT. 예외: database_sentinel/agent/, database_sentinel/mcp_server/ 및 database_sentinel/kb/는 AGPL-3.0입니다 (각 디렉토리의 LICENSE 참조).
Supabase
| 심각도 | 패턴 | 설명 |
|---|---|---|
| 🔴 CRITICAL | RLS_DISABLED | Row-Level Security가 없는 테이블은 완전히 노출됨 |
| 🔴 CRITICAL | SERVICE_ROLE_EXPOSED | 프론트엔드 코드의 service_role 키가 모든 보안을 우회함 |
| 🔴 CRITICAL | POLICIES_BUT_NO_RLS | 정책은 작성되었지만 RLS가 활성화되지 않음 |
| 🟠 HIGH | USING_TRUE | 쓰기 또는 비공개 데이터에 USING (true) |
| 🟠 HIGH | VIEW_NO_SECURITY_INVOKER | 뷰가 RLS를 우회하고 소유자로 실행됨 |
| 🟠 HIGH | SECURITY_DEFINER_EXPOSED | API를 통해 호출 가능한 RLS 우회 함수 |
| 🟠 HIGH | USER_METADATA_IN_POLICY | 정책이 사용자가 편집할 수 있는 메타데이터를 신뢰함 |
| 🟠 HIGH | MASS_ASSIGNMENT | 사용자가 자신의 행에서 권한/결제 열을 업데이트할 수 있음 |
| 🟠 HIGH | GHOST_AUTH | 확인되지 않은 가입이 인증된 세션을 받음 |
| 🟠 HIGH | JWT_SECRET_EXPOSED | 유출된 서명 비밀로 공격자가 모든 토큰을 위조할 수 있음 |
| 🟡 MEDIUM | + 17개 더 | anti-patterns.md |
MongoDB