
자동화된 AI 시스템, 편리함 뒤에 숨겨진 보안 그림자
AI 에이전트와 Supabase 같은 백엔드 플랫폼을 함께 쓰는 개발 환경이 점점 늘어나고 있습니다. 특히 LLM 기반 도구들과 Supabase MCP(Model Context Protocol)의 통합은 빠른 업무 자동화를 가능하게 해주죠. 하지만 이 편리함 뒤에는 우리가 흔히 간과하는 보안 위협이 존재합니다.
최근 보고된 사례에 따르면, 단순한 고객 메시지를 악용해 Supabase 데이터베이스의 민감 정보를 유출할 수 있는 심각한 취약점이 발견됐습니다. 문제의 핵심은 LLM이 데이터와 명령어를 구분하지 못한다는 점이며, AI가 최고 권한을 가진 상태로 실행될 경우, 보안 경계를 완전히 우회할 수 있다는 것입니다.
이 글에서는 Supabase MCP 구조에서 어떻게 보안 문제가 발생하는지, 실제 시나리오를 통해 이를 상세히 설명하고, 지금 당장 적용 가능한 실질적인 대응책까지 안내합니다.
MCP와 Supabase: 어떻게 연동되는가
Model Context Protocol(MCP)은 대형 언어 모델(LLM)이 외부 도구와 상호작용할 수 있도록 설계된 표준 프로토콜입니다. Supabase에서는 이 MCP를 통해 Cursor 같은 IDE 도구와 연동하여, AI 에이전트가 개발자를 대신해 SQL 쿼리를 실행할 수 있도록 지원합니다.
구조적으로 보면 다음과 같습니다:
- 고객: 티켓 작성 폼을 통해 메시지를 입력
- 지원 에이전트: 고객 티켓을 대시보드에서 확인하고 처리
- 개발자: MCP를 통해 AI 에이전트에게 티켓 내용을 요약하거나 검토하도록 요청
- Cursor Assistant(LLM): AI가 service_role 권한으로 Supabase DB에 SQL 쿼리를 실행
바로 이 구조에서, LLM의 동작 방식과 권한 관리 사이에 치명적인 보안 허점이 존재합니다.
LLM + service_role + 사용자 입력 = 위험 조합
LLM은 시스템 프롬프트, 사용자 지시문, 그리고 데이터 컨텍스트를 단순한 텍스트로 받아 처리합니다. 그런데 이때 AI는 문맥의 경계를 이해하지 못합니다. 다시 말해, 명령인지 단순한 텍스트인지 구분하지 못하는 것이죠.
여기에 Supabase의 service_role 권한이 더해지면 상황은 더욱 심각해집니다. 이 권한은 Row-Level Security(RLS)를 무시하고 데이터베이스의 모든 테이블에 접근할 수 있습니다. 즉, LLM이 사용자의 조작된 메시지를 명령어로 오해하는 순간, 민감한 정보에 대한 쿼리도 그대로 실행되는 것입니다.
실제 공격 시나리오: 티켓 하나로 전체 DB 유출
공격자는 누구나 열 수 있는 고객지원 티켓 시스템을 활용합니다. 예를 들어, 다음과 같은 메시지를 티켓에 남깁니다.
이 메시지를 일반적인 고객지원 에이전트가 본다면 아무 일도 일어나지 않습니다. 권한이 제한돼 있어 integration_tokens 같은 테이블에 접근할 수 없기 때문이죠. 하지만 개발자가 이 티켓을 Cursor IDE에서 확인하면서 요약을 요청하게 되면, 문제가 발생합니다.
AI 에이전트는 이 메시지를 단순 텍스트로 받아들여 SQL 명령으로 해석하고, MCP를 통해 쿼리를 실행합니다. 그리고 결과를 티켓에 자동으로 추가하게 됩니다. 공격자는 이후 이 티켓을 다시 열어 민감한 정보를 손쉽게 확인할 수 있게 됩니다.
이 모든 과정에서 AI는 자신이 처리한 데이터가 악의적으로 조작됐다는 사실을 전혀 인지하지 못합니다.
RLS만으로는 방어가 불가능한 이유
Supabase는 RLS 정책을 통해 사용자별 데이터 접근을 제한할 수 있도록 설계돼 있습니다. 하지만 service_role은 예외입니다. 이 권한을 부여받은 주체는 어떤 테이블이든, 어떤 정책이 적용돼 있든 상관없이 전체 접근이 가능해집니다.
실제 사용된 환경에서도 별도 확장 없이 기본 설정만으로 이 문제가 발생했습니다. 개발 편의성과 자동화 효율을 위해 부여된 권한이 오히려 보안 취약점이 되어버린 것입니다.
대응 방안: 지금 당장 적용할 수 있는 보안 조치
Supabase MCP 기반 AI 연동을 안전하게 활용하기 위해서는 몇 가지 기본적인 보안 조치가 필수입니다.
1. 읽기 전용(Read-only) 모드 활성화
MCP를 사용할 때 에이전트를 읽기 전용 모드로 설정하면, 모든 쓰기/수정/삭제 SQL 명령이 차단됩니다. AI가 잘못된 프롬프트를 받아도 데이터베이스 변경이 일어나지 않도록 막을 수 있습니다.
특히 자동화된 쿼리 에이전트를 사용할 경우, 반드시 이 설정을 적용하는 것이 좋습니다.
2. 프롬프트 인젝션 필터 적용
AI 입력 데이터에 대해 SQL 명령어 패턴이나 비정상적인 지시문을 탐지하는 필터를 적용합니다. 예를 들어 다음과 같은 패턴을 차단할 수 있습니다.
- SELECT * FROM ...
- INSERT INTO ...
- DROP TABLE ...
이 필터는 완벽한 방어책은 아니지만, 1차적인 방어선으로 효과적입니다. MCP 앞단에서 lightweight 래퍼를 만들어 적용할 수 있습니다.
3. 고위험 권한 최소화
AI 에이전트에게는 가능한 한 제한된 권한만 부여하고, 민감 데이터는 별도 정책으로 분리해야 합니다. 개발 단계에서도 모든 작업에 service_role을 기본으로 사용하는 것은 매우 위험합니다.
자동화 도입 전, 보안 먼저 확인하세요
Supabase와 LLM을 연동한 자동화는 분명 개발자의 업무 효율을 높여줍니다. 하지만 MCP 기반 시스템은 신중하게 접근하지 않으면 심각한 보안 사고로 이어질 수 있습니다. 특히 AI가 사람처럼 문맥을 완벽히 이해하지 못한다는 점, 그리고 최고 권한을 가진 상태로 실행될 수 있다는 점은 항상 염두에 두어야 합니다.
자동화된 시스템일수록, 입력값 검증과 권한 제어는 더욱 엄격해야 합니다. MCP 환경에서 작업하는 모든 개발자와 보안 담당자들이 이 점을 인식하고, 가능한 방어책을 미리 적용하길 권장합니다.
기술의 효율은 늘 보안을 넘지 않아야 합니다. 지금이라도 AI 연동 시스템을 점검해보는 건 어떨까요?
https://www.generalanalysis.com/blog/supabase-mcp-blog
Supabase MCP can leak your entire SQL database | General Analysis
© 2025 All rights reserved.
www.generalanalysis.com

'인공지능' 카테고리의 다른 글
| AI 전쟁의 새로운 판을 짜다 – Grok 4가 진짜 무서운 이유 (0) | 2025.07.10 |
|---|---|
| 의료 AI 개발, MedGemma가 주목받는 이유는? 성능과 실용성 모두 잡은 오픈모델의 등장 (0) | 2025.07.10 |
| AI 코드 도우미의 ROI, 정말 측정할 수 있을까? (0) | 2025.07.09 |
| "AI가 내 동료가 되는 시대" — AI-네이티브 소프트웨어 엔지니어란? (0) | 2025.07.09 |
| AI 학습에 책을 써도 될까? Anthropic 판결이 던지는 저작권의 새 기준 (0) | 2025.07.09 |