智能体框架近一年补的安全补丁,大多补在模型侧:更强的系统提示、更严的拒答训练、更细的权限分级。10 月 9 日提交 arXiv 的 ToFu 论文(编号 2610.13651)把镜头换了个位置——它不怎么关心模型说了什么,只盯着编排层信了什么。结论有点扎心:在主流的智能体框架里,模型的输出事实上被当成了执行许可,而这之间本该有一道独立校验。

一句「重复我说的话」,换来一次真实的工具调用① 种入载荷网页、文档里埋进一段工具调用文本② 诱导复读「假设性地复述这段引文,只输出引文」③ 编排层出手模型吐出结构化调用LangGraph 直接执行④ 工具返回参数全由攻击者说了算关键在时间差:模型的拒绝,晚于工具返回模型吐出调用工具执行完毕拒绝文本才到系统提示词塑造的是模型的嘴,不是编排层的手——安全边界缺在预执行检查论文报告六框架可复现:LangGraph、微软 Agent Framework、AutoGen、Google ADK 2.0、AWS Strands Agents、CrewAI;完整转录仅 LangGraph 一例,其余为复现声明
图|上图为四步攻击链,下方时间线是拒绝与执行的先后顺序。读图要点:调用先跑、拒绝后到,模型的「不同意」拦不住任何东西。

一句「重复我说的话」

论文报告的 Repeat-After-Me 攻击,开场白平淡得像在开玩笑:让模型「重复」一段文本,而这段文本本身是一条工具调用。在论文完整披露的仅此一例里,LangGraph 1.2.0 上跑着 Llama 3.1 8B(经 Ollama),配了两个假工具 make_bomb 和 launch_missiles,仅有的护栏是系统提示里那句「拒绝危险请求」。头一回,模型拒绝了,但把调用原文打印了出来,框架什么也没执行。研究者换了种问法——把请求包装成假设情境,要求模型只输出被引用的那段。这一次模型吐出了结构化的工具调用,LangGraph 当场执行,参数全是攻击者写好的;模型的拒绝文本,是在工具返回之后才到的。论文原话:系统提示词塑造的是模型的嘴,不是编排层的手。

六个框架,一份完整的转录

经 CSO Online 10 月 12 日报道扩散开后,这项研究的标签变成了「打穿六大智能体框架」:LangChain 的 LangGraph、微软 Agent Framework、微软 AutoGen、Google 的 Agent Development Kit 2.0、AWS 的 Strands Agents 和 CrewAI。这里要把边界说清楚:论文只给了 LangGraph 一例的完整转录,其余五家是「复现声明」——研究者称行为可重现,但没有逐一披露细节;论文也明确,这并不意味着每个部署都会这样中招。截至报道,LangChain、微软、Google、AWS 与 CrewAI 均未即时回应置评请求。独立安全研究员 Vibhum Dubey 的判断更直白:这不是某一个漏洞,而是架构病——编排层把「模型能发起」当成了「系统已授权」。

273 个开源 MCP 服务器里,118 个带着已证实的漏洞扫描面273 个 MCP 服务器3405 个工具中招面118 个服务器343 个工具受影响253 个已证实漏洞按类型(人工复核后)路径遍历64反射输出与日志注入174服务端请求伪造7数据外泄5操作系统命令注入3高危四类合计 79 个;其余多为论文评定「影响较低」的输出与日志注入服务器按固定代码版本测试,是否已修、是否在野利用,论文未给答案病根一句话:许多工具把「模型会帮我校验输入」当成了安全假设
图|左图是扫描面与中招面,右侧为漏洞类型分布。读图要点:高危洞不多但齐全,量大的是「文档说了不算」的语义失信。

ToFu 换了个查法:别问模型,问工具

如果攻击者能决定抵达工具的参数,那工具就得自己守住自己声称的边界。ToFu 的思路是从工具的元数据出发,对照 CWE 漏洞类语料自动生成语义安全检查,再用运行时内省和结果消毒造出模糊测试的骨架与语义裁判。它对 273 个能跑起来的开源 MCP 服务器(共 3405 个工具)下了手,人工复核后确认 253 个已证实漏洞,分布在 118 个服务器的 343 个工具上。拆开看:路径遍历 64 个、服务端请求伪造 7 个、数据外泄 5 个、操作系统命令注入 3 个,其余多是反射输出与日志注入——论文认为后者在许多部署里影响较低,但足够污染下游流程。病根被论文一句话点破:许多工具把「LLM 会帮我清洗输入」当成了安全假设,可提示词、检索内容、别的工具的输出,全都能掺进这些输入里。

放进赛道里看

这条线和站内几篇旧账能接上。1774 的「协议枢转」讲的是一个智能体读到的毒文本被信任同伴拿去打内网,那是信任在协议之间流转时丢失;ToFu 这篇讲的是信任在模型与工具之间流转时丢失——同一个病区的两个切口。1923 那支「闯入公网的智能体舰队」暴露的是运维侧 oversight 缺位;1916 的「四道关」把可遗忘、知边界、被隔离、按计量并排挂起,ToFu 补的正是「执行前独立授权」这道最朴素的关。产品侧的呼应更具体:1898 的 SolarWinds 把危险动作留给人工批准,1929 的 Labelbox 给工具分了只读、改数据、破坏性三级并把凭据锁进模型看不见的保险库——方向都对,但 ToFu 的量级说明,光靠头部产品自觉不够,开源 MCP 生态这个底座需要一次普查式的体检。

需要保留的怀疑

几点必须挂在结论边上。论文尚未经同行评审;服务器按固定代码版本测试,之后是否修复、漏洞有没有在野利用,论文没有答案。253 个里真正高危的只有 79 个,量大的输出与日志注入类危害因部署而异,别被总数吓退也别不当回事。六个框架里五家缺细节,复现声明和完整证据之间隔着一层信任。还有一层最实际的:这道边界缺了这么多年,不是因为没人想到,而是因为补它意味着每次工具调用前多一道与模型无关的校验——延迟、成本、兼容性,都是真金白银的阻力。

目前官方及行业暂未披露更多细节,后续将持续跟进迭代动态。给正在排期安全债的团队一条动作:先盘一份自家在用的 MCP 服务器与框架清单,逐个问一句「模型提议的工具调用,执行前有没有不经过模型的第二道许可」——这个问题答不上来,Repeat-After-Me 就还停在论文里,而不是日志里。