[Paper] Unsafe by Flow:揭示 MCP 生态系统中的双向数据流风险

发布: (2026年5月8日 GMT+8 23:03)
8 分钟阅读
原文: arXiv

Source: arXiv - 2605.07836v1

请提供您希望翻译的具体文本内容,我将为您翻译成简体中文。

概述

模型上下文协议(Model Context Protocols,MCP)是让大语言模型(LLM)代理调用外部工具的粘合剂——比如“搜索网页”“运行 shell 命令”或“查询数据库”。虽然它们能够实现强大的工作流,但也暴露了一个隐藏的攻击面:数据可能以恶意方式 流入 工具,且结果可能以不安全的方式 流出 工具返回给 LLM 或主机系统。论文 Unsafe by Flow 介绍了 MCP‑BiFlow,一种静态分析框架,能够自动发现真实世界 MCP 服务器中这些双向数据流漏洞。

关键贡献

  • Bidirectional taint model 同时跟踪 请求端(输入)和 响应端(输出)数据在 MCP 处理程序中的传播。
  • MCP‑aware entry‑point recovery 用于定位 MCP 服务器使用的多样化注册和分发模式(例如装饰器、动态路由表)。
  • Interprocedural propagation engine 尊重 MCP 特定语义(例如 “tool‑output is exposed to the LLM” 与 “internal log is private”)。
  • Comprehensive evaluation 在精心挑选的基准(32 个已知 MCP 漏洞)上实现 93.8 % 的召回率,并对 >15 k 开源 MCP 服务器进行大规模扫描,发现 118 条已确认的漏洞路径。
  • Open‑source prototype (MCP‑BiFlow)以及为社区准备的 MCP 漏洞案例精选数据集。

方法论

  1. 入口点提取 – 分析器首先扫描代码库中的 MCP 注册代码(例如 register_tool@mcp_handler)。由于开发者可以通过多种方式注册处理器(静态表、运行时反射、插件加载),MCP‑BiFlow 会构建一个 控制流图,捕获所有可能的入口点。
  2. 特定协议的污点语义 – 作者定义了两类污点来源:
    • 请求者可控输入(JSON 负载、命令字符串)。
    • 敏感内部数据(环境变量、凭证)。
      以及两类污点汇:
    • 敏感操作(文件写入、操作系统执行)。
    • MCP 可见输出(返回给 LLM 的响应)。
      分析会为每个变量标记方向(入/出),并在赋值、函数调用和数据结构操作中传播这些标签。
  3. 跨过程数据流分析 – 使用工作列表算法,工具在函数边界之间追踪污点,处理常见的 Python 习惯用法(装饰器、async/await、动态导入)。它还对 工具作用域的执行路径 进行建模:请求从调度器 → 处理器 → 内部库 → 响应生成。
  4. 候选聚类 – 为了让输出易于管理,类似的污点路径会基于共享的来源‑汇模式合并为“聚类”,随后交由人工审阅者进行验证。

结果与发现

EvaluationMetricValue
基准(32 个已知漏洞)召回率30 / 32(93.8 %)
基准精确率(人工检查)~85 %(误报很少)
真实世界扫描(15 452 个仓库)候选聚类549(经重叠压缩后)
手动验证确认的易受攻击路径118(分布于 87 台不同服务器)
对比工具(CodeQL, Semgrep, Snyk Code, MCPScan)最佳召回率≤ 55 %(没有检测到双向流)

这意味着:

  • 现有的静态分析器错过了大多数与 MCP 相关的漏洞,因为它们只检查数据流的单一方向。
  • 不安全的传播是 常见的:约 0.7 % 的被扫描 MCP 服务器至少包含一个可利用的双向流。
  • 双向模型是必需的;许多漏洞仅在 请求端 的污点到达 敏感操作 并且 随后产生的 输出 再次被送回 LLM 时才会出现。

实际意义

  • 针对 LLM‑tool 开发者: 将 MCP‑BiFlow(或类似的双向污点检查)集成到 CI 流水线中,以在部署前捕获不安全的参数处理和过于宽松的响应序列化问题。
  • 针对平台运营者(例如 LangChain、AutoGPT 生态系统): 采用协议感知的入口点发现机制,自动审计第三方工具插件,降低供应链风险。
  • 针对安全团队: 聚类输出提供了每个 MCP 服务器的简明“攻击面图”,即使在大型代码库中也能实现手动分流。
  • 针对 API 设计者: 论文强调了 显式 数据流合约的必要性(例如,将字段标记为“私有”或“公开”),以便静态工具使用,从而推动更安全的 MCP 规范。
  • 性能影响: MCP‑BiFlow 作为静态分析步骤运行;作者报告对典型 5 k 行 Python 项目的分析时间不足 2 分钟,适合夜间构建。

限制与未来工作

  • 语言范围: 原型针对 Python MCP 服务器;扩展到其他语言(Node.js、Go)将需要额外的入口点启发式。
  • 动态分发: 极度动态的注册(例如,从用户提供的代码字符串构建处理程序)可能规避静态恢复,导致路径遗漏。
  • 误报: 虽然精确度很高,但某些标记的路径涉及良性数据(例如,对用户输入的日志记录),并不构成真实的利用。未来工作可以加入运行时分析以过滤这些情况。
  • 运行时语义: 该分析未对实际的大语言模型推理进行建模;恶意模型可能将良性流程放大为利用。将静态污点分析与沙箱执行轨迹相结合是一个有前景的方向。

作者

  • Xinyi Hou
  • Yanjie Zhao
  • Haoyu Wang

论文信息

  • arXiv ID: 2605.07836v1
  • 分类: cs.SE
  • 发表时间: 2026年5月8日
  • PDF: 下载 PDF
0 浏览
Back to Blog

相关文章

阅读更多 »