Supabase MCP 可能导致整个 SQL 数据库泄露
Model Context Protocol(MCP)已成为 LLM(大语言模型)与外部工具交互的标准方式。虽然这解锁了新的能力,但也引入了新的风险面。在本文中,我们将展示攻击者如何利用 Supabase 的 MCP 集成来泄露开发者的私有 SQL 表。我们在 MCP Server Security pillar guide 中涵盖了完整的 MCP 威胁模型——包括通过工具输出进行间接提示注入(indirect prompt injection)的确切模式。
问题所在
LLM 常被用于根据预定义指令处理数据。系统提示、用户指令和数据上下文作为文本提供给 LLM。
[SYSTEM PROMPT]
You are a helpful assistant.
[FETCHED DATA]
Customer: I'm having trouble with billing.
Customer: I need to update my credit card because the current one expired.
[USER INSTRUCTION]
Summarize the ticket and suggest a reply.The core issue is that LLMs don't have a built-in understanding of context boundries. They process all text the same way; whether it is data/context or user instructions.
LLM 与工具交互的核心问题是,它们无法区分指令和数据。因此,如果一份精心构造的用户提供的“数据”碰巧看起来像一条指令,模型可能会将其作为指令来处理。
环境搭建
为了让演示自包含,我们启动了一个全新的 Supabase 项目,模拟一个典型的多租户客户支持 SaaS。
该实例仅填充了虚拟数据,按文档启用行级安全(RLS),没有引入额外的扩展或策略。
因此,攻击所利用的一切都存在于“开箱即用”的配置中:标准 service_role、默认模型、RLS 以及一个代表开发者执行 MCP 调用的语言模型助手。

我们假设开发者使用 Cursor 与 MCP 交互,偶尔列出最新的支持工单。