写点什么

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

作者:qife
  • 2025-07-25
    福建
  • 本文字数:1743 字

    阅读完需:约 6 分钟

关键发现

  • 供应链影响范围广泛:Anthropic 存在漏洞的 SQLite MCP 服务器在被归档前已被分叉 5000 多次,这些未修补代码可能已部署于生产环境,使得 SQL 注入风险随攻击载荷在代理间广泛传播

  • 传统漏洞的新威胁:SQL 注入漏洞为存储型提示词注入开辟新路径,攻击者可借此直接操控 AI 代理,大幅提升攻击成功率

  • 通过工作流信任实现权限提升:AI 代理通常默认信任内部数据(数据库/日志/缓存),攻击者可嵌入恶意提示词诱导代理调用高权限工具(邮件/数据库/云 API)实现数据窃取或横向移动

  • 需开发者自主修复:由于官方无修补计划,使用未修复分叉版本的组织面临数据泄露和服务中断风险,本文提供了具体修复方案

漏洞分析

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


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


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

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

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


攻击步骤分解:


  1. 攻击者提交恶意工单

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

  3. 通过漏洞服务器存储恶意提示词

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

  5. 支持人员/机器人通过 AI 代理处理工单

  6. 在处理过程中,支持系统会将存储的恶意提示词视为有效条目读取。

  7. AI 模型执行提示词指令

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


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

披露与现状

快速修复清单

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


  1. 手动修复漏洞

  2. 检查是否在 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)  # 使用参数化输入
复制代码


  1. 白名单控制

  2. SELECT ... FROM {table}结构实施表名白名单

  3. 禁用堆叠语句

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

  5. 异常监控

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

结论与建议

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


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


  1. 重温 OWASP SQL 注入防护指南

  2. 将参数化查询作为基础实践,特别是在集成 LLM 或代理系统时

  3. 审计 AI 代理工作流的隐藏信任假设

  4. 如果 AI 代理默认信任内部数据,则可能易受存储型提示词注入攻击

  5. 限制特权上下文中的工具访问

  6. AI 代理不应无限制访问邮件/文件系统/外部 API 等工具,应引入验证步骤或沙箱机制

  7. 实施异常监控

  8. 监控可疑提示词、非常规 SQL 命令或异常数据流(如代理非标准工作流触发的出站邮件)更多精彩内容 请关注我的个人公众号 公众号(办公 AI 智能小助手)公众号二维码

  9. 办公AI智能小助手
用户头像

qife

关注

还未添加个人签名 2021-05-19 加入

还未添加个人简介

评论

发布
暂无评论
经典MCP服务器漏洞如何威胁您的整个AI代理系统_SQL注入_qife_InfoQ写作社区