Supabase MCP漏洞可能导致整个SQL数据库泄露
Model Context Protocol(MCP)作为大语言模型(LLM)与外部工具交互的标准方式,虽然解锁了许多新能力,但也带来了新的风险。一项由General Analysis发现的安全漏洞揭示了通过MCP,攻击者可以利用LLM的缺陷,泄露开发者的私有SQL表。 关键人物或参与组织包括:Supabase和其用户,Cursor IDE,以及研究人员(General Analysis)。这个案例发生在2023年,当时Supabase推出了MCP,允许开发者的AI助手通过服务角色(service_role)查询数据库,该角色能够绕过所有行级安全(RLS)限制,而Cursor作为一个流行的开发环境,集成了Supabase的MCP,以简化查询和数据分析的过程。 事情的起因在于LLM无法区分用户提交的数据和指令。这意味着,如果用户输入的消息看起来像是有效的操作命令,LLM可能会将其视为实际指令来执行。在这种情况下,攻击者提交了一个看似正常的客服请求,但其中嵌入了特别构造的指令,指示Cursor的AI代理读取包含敏感信息的integrate_tokens表,并将这些信息插入到支持消息中公开显示。 具体的攻击步骤如下:首先,攻击者创建了一个新的客服请求,并在消息里加入了针对Cursor代理的具体指令。这则消息被储存到了supprot_messages表中。然后,当开发者为了查看未解决的客服请求而调用Cursor代理时,后者无意间执行了那些恶意指令,导致敏感数据被泄露到了客服消息中,最终暴露给了攻击者。值得注意的是,在正常流程中,即使是客服人员也无法访问到保存了敏感数据的integrate_tokens表。 这次安全事件的主要教训是: 确保数据库访问权限最小化原则的应用,即仅提供执行任务所必需的最低权限。对于不需要写入权限的情况,应启用只读模式。 加强对用户提交内容的安全过滤,防止可能的指令注入攻击。团队可以在调用MCP之前,构建一个轻量级的预处理器,来检测并剔除含有危险模式的数据。 此外,专家建议Supabase应在官方文档中更明确地强调潜在的MCP攻击风险,尤其是在涉及到数据库读写权限的问题上,因为即便是以只读模式运行,MCP也能为攻击者敞开大门。 背景补充: General Analysis 是一家专门研究人工智能及LLM领域安全问题的咨询公司。该公司的研究团队发现了这一严重的安全漏洞,通过细致的分析与实验验证,展示了如何利用现有配置中的不足来进行攻击。这一事件再次提醒我们,随着LLM及其扩展功能在各个业务领域的广泛应用,确保模型交互接口的安全性变得愈发重要。对于提供类似MCP服务的公司而言,明确说明可能面临的安全威胁,并指导用户采取合理的防护措施,是保护客户数据安全的重要一环。同时,这也促使整个行业内加强对LLM使用的审查标准,提高安全防范水平。