经典MCP服务器漏洞如何威胁您的整个AI代理系统

关键发现

  • 供应链影响范围广泛:Anthropic存在漏洞的SQLite MCP服务器在被归档前已被分叉5000多次,这些未修补代码可能已部署于生产环境,使得SQL注入风险随攻击载荷在代理间广泛传播
  • 传统漏洞的新威胁:SQL注入漏洞为存储型提示词注入开辟新路径,攻击者可借此直接操控AI代理,大幅提升攻击成功率
  • 通过工作流信任实现权限提升:AI代理通常默认信任内部数据(数据库/日志/缓存),攻击者可嵌入恶意提示词诱导代理调用高权限工具(邮件/数据库/云API)实现数据窃取或横向移动
  • 需开发者自主修复:由于官方无修补计划,使用未修复分叉版本的组织面临数据泄露和服务中断风险,本文提供了具体修复方案

漏洞分析

趋势科技:trade_mark:研究发现Anthropic参考实现的SQLite模型上下文协议(MCP)服务器存在典型SQL注入漏洞。虽然该GitHub仓库已于2025年5月29日归档,但已被分叉超过5000次。需注意该代码明确标注为参考实现而非生产用途。

漏洞位于源代码处理用户输入的方式中——直接将未净化的用户输入拼接至SQL语句(通过Python的sqlite3驱动执行),且未进行过滤或验证。如图1所示的核心漏洞代码:

此缺陷创造了SQL注入的完美条件,攻击者可嵌入恶意查询。OWASP SQL注入防护指南十余年来始终将参数化查询列为首要建议,因其能从根本上区分代码与数据。忽视该实践将导致认证绕过、数据泄露、篡改等经典攻击。

攻击实例:客服机器人劫持

我们通过客服AI代理案例演示漏洞利用过程。该代理从SQLite MCP服务器拉取工单,客户通过网页表单提交工单,特权支持工程师(或机器人)处理"open"状态工单。图2展示攻击者如何通过漏洞实施攻击:

攻击步骤分解:

  1. 攻击者提交恶意工单
    图3显示当攻击者控制body字段注入SQL语句时的完整查询。正常工单请求应终止于第5行,但注入内容(5-11行高亮部分)会关闭原SQL语句并插入包含恶意提示词的新条目。

  2. 通过漏洞服务器存储恶意提示词
    这相当于LLM环境中的存储型XSS攻击(称为存储型提示词注入)。漏洞使代理能以"open"状态存储恶意提示词,绕过针对"pending tickets"的安全检查。

  3. 支持人员/机器人通过AI代理处理工单
    在处理过程中,支持系统会将存储的恶意提示词视为有效条目读取。

  4. AI模型执行提示词指令
    存储的提示词引导LLM调用内部工具(如邮件客户端或其他MCP服务器),在特权上下文中发送客户数据(customer.csv)至攻击者邮箱(attacker@evil.com)。

由于邮件MCP工具具有高权限且工单处理流程盲目信任"open"状态工单,单次注入即可通过横向移动或数据泄露危害系统。

披露与现状

快速修复清单

由于官方无修补计划,开发者需自行修复SQLite MCP服务器实现中的漏洞:

  1. 手动修复漏洞
    检查是否在2025年5月29日前分叉或使用归档版本。定位所有_execute_query调用,改用参数化执行:

    # 漏洞代码
    results = db._execute_query(arguments["query"])
    
    # 修复方案
    sql, params = arguments["query"], tuple(arguments.get("params", []))
    if ";" in sql:  # 简单语句防护
       raise ValueError("stacked queries blocked")
    results = db._execute_query(sql, params)  # 使用参数化输入
    
  2. 白名单控制
    SELECT ... FROM {table}结构实施表名白名单

  3. 禁用堆叠语句
    通过sqlite3配置禁止堆叠语句(isolation_level=None禁用隐式提交,但仍需输入验证)

  4. 异常监控
    监控LLM边界异常提示(如生成SQL中出现SELECT * FROM users,或工单代理突然大量发邮件)

结论与建议

此事件以新的紧迫性重申了旧教训——当经典输入净化漏洞位于AI代理后方时,其影响不会局限于数据层。MCP服务器中的单个非参数化字符串可能通过数千次分叉进入专有代码库,最终在特权上下文中触发自动化工作流。当攻击者能将教科书式SQLi转化为存储型提示词注入时,每个后续LLM调用都可能被攻击者控制。

除快速修复清单外,建议采取以下最佳实践:

  1. 重温OWASP SQL注入防护指南
    将参数化查询作为基础实践,特别是在集成LLM或代理系统时
  2. 审计AI代理工作流的隐藏信任假设
    如果AI代理默认信任内部数据,则可能易受存储型提示词注入攻击
  3. 限制特权上下文中的工具访问
    AI代理不应无限制访问邮件/文件系统/外部API等工具,应引入验证步骤或沙箱机制
  4. 实施异常监控
    监控可疑提示词、非常规SQL命令或异常数据流(如代理非标准工作流触发的出站邮件)
    更多精彩内容 请关注我的个人公众号 公众号(办公AI智能小助手)
    公众号二维码
posted @ 2025-07-25 09:01  qife  阅读(2)  评论(0)    收藏  举报