工具描述被当成安全契约:273个MCP服务器里,253个漏洞不靠崩溃也能触发
核心概要
大模型智能体调用外部工具时,编排层只保证调用格式合法,并不保证参数安全。ToFu把工具元数据里对参数含义的描述转成可执行的安全检查,再据此生成模糊测试输入和判定规则,在273个可运行的MCP服务器、3405个工具上确认了118个服务器、343个工具中的253个漏洞,其中多数调用正常返回。
深度剖析
工具实现是否遵守自己声明的输入语义,现在可以自动检验,而不必先构造一次成功的提示注入。 此前的分析多从预设的弱点类别、特定污点流或某类智能体攻击出发,覆盖范围受限于分析者预先想到的漏洞。 在273个能干净执行的MCP服务器上,ToFu标记了118个服务器、共253个经人工复核的漏洞,涉及343个工具。
检查的起点是工具已经暴露给大模型的元数据:参数名、自然语言描述和输入模式。 同一个字符串类型可能表示路径、URL或命令,安全约束各不相同,仅凭原始类型无法选出检查。 ToFu用74个语义感知检查器,其中11个每次执行都运行、35个在出现相应证据时运行、27个由大模型按参数语义挑选;大模型只负责挑选和生成初始种子,不充当判定者。
判定不依赖崩溃,而是看工具是否接受了按自身契约本应拒绝的输入。 传统模糊测试以崩溃、断言失败或内存越界为信号,而越界读文件或访问禁止目标常常正常返回。 在508个候选漏洞中,326个由直接观察到危险操作或输出中未转义的对抗值确认,其余182个是输入违反语义约束而工具仍报告成功。
启示与展望
结论覆盖273个能干净执行的MCP服务器和其中3405个工具,这些服务器来自按星标数、未归档、非客户端等条件筛选后的Python与JavaScript仓库。方法面向通过编排层发起的单次工具调用,需要工具在当前环境中可运行;Python目标可借助21个追踪器观察文件、进程和网络操作,JavaScript目标没有进程内追踪,只能依靠输入契约和输出判定。
作者指出,约五分之一的仅被静态分析标记的服务器涉及宽松CORS、错误的正则清洗或文件系统竞态,这类问题不适合单输入模糊测试。另有四个服务器在测试中影响了评测主机,说明工具模糊测试需要在沙箱内运行。多智能体执行路径、第三方组件覆盖和有状态调用序列都留待后续工作。
