从工具调用视角红队测试编码 Agent:一项实证安全评估
Red-Teaming Coding Agents from a Tool-Invocation Perspective: An Empirical Security Assessment
作者对 Cursor、Claude Code 等六个真实编码智能体做工具调用视角红队:ToolLeak 经工具参数外泄系统提示词,双通道注入在旧版上实现 RCE。
攻击者持有与受害者同版本的编码智能体用于本地侦察;可诱使受害者连接攻击者控制的外部恶意工具 t_mal(经 MCP),控制其工具描述 desc_mal 和工具返回 r_mal;不能修改后端 LLM 或提示词上下文,不能改动或直接调用特权内置工具,无 root/admin 权限;目标是外泄内部提示词上下文 C(阶段 1)并劫持工具调用实现 RCE(阶段 2)。
- 编码智能体通过工具调用获得命令执行等高权限能力,但作者称此前缺少针对编码智能体工具调用安全的系统性评估,提示词外泄与工具调用劫持的风险未被量化。
- 两阶段红队:阶段 1 提出 ToolLeak,利用工具调用参数生成与聊天生成之间的防护差异,让模型把系统提示词填入恶意工具的必填参数;阶段 2 用工具描述加工具返回的双通道提示注入,结合外泄信息定制载荷,诱导智能体执行攻击者命令。
- 模拟设置下 ToolLeak 在六个智能体上语义相似度 0.891–0.958,高于全部基线;真实智能体上 18/25 组合取得最高 Pseudo-Recall;双通道注入在旧版组合上 ASR 多为 0.8–1.0,但新版 Cursor 与 Claude Code 上降至 0.0–0.3。
- 作者指出:无真实系统提示词作 ground truth,Pseudo-Recall 只是相对指标;RCE 只测命令执行工具;红队未针对隐蔽性优化,自适应混淆能否绕过扫描器未知;结论可能不适用于未来版本。
- 被测模型
- GPT-5GPT-5.5Claude-Sonnet 4Claude-Sonnet 4.5Claude-Sonnet 4.6Claude-Opus-4.7Gemini-2.5-proGemini-3.1-proGrok-4Grok-4.20Cursor Composer 1Cursor Composer 2Windsurf SWE-1.5Llama-Prompt-Guard-2-86M
- 基准
- AgentDojoInjecAgentMCPToxMCP-Zero
- 指标
- semantic similarity (Sim)normalized Extended Edit Distance (EED)Pseudo-Recallattack success rate (ASR)
研究者对 Cursor、Claude Code、Copilot、Windsurf、Cline 和 Trae 六款编码 Agent 开展工具调用视角的红队测试,其双通道提示注入在测试的 Agent-LLM 组合上实现了远程代码执行。第一阶段方法 ToolLeak 利用模型按 schema 填充工具参数时的行为,把系统提示等内部上下文写入外部工具参数,在 25 个 Agent-LLM 组合中的 18 个取得最高 pseudo-recall。第二阶段先在工具描述中诱导 Agent 调用攻击者控制的工具,再通过工具返回注入指令,使其执行攻击者指定的命令,在多数旧版本组合上成功率为 0.8 至 1.0。作者称 Cursor 和 Claude Code 改为只向模型暴露工具名后,该攻击在 Claude Code 上降至 0,在 Cursor 上最高 0.3。
推荐理由论文在六款主流编码 Agent 上实测工具调用攻击,给出提示泄露与双通道注入达成 RCE 的完整链路,可供设计 Agent 工具权限时参考。
相关热点
0 个事件 · 1 条新闻提到
提到这篇论文的新闻
- Adversa AI引用了论文编号或链接Adversa AI 梳理 Claude Code 十起攻击:多数落在配置与审批机制而非模型行为
深度解读
这篇论文试图解决什么问题?
作者称尚无针对编码智能体工具调用安全的系统评估,论文对六个真实编码智能体做两阶段红队。
核心问题:编码智能体的工具调用机制(内置命令执行、文件访问、MCP 外部工具)打开了攻击面,但缺少从工具调用视角出发的系统性安全评估。
- 场景与重要性:作者称编码智能体已成为现代 IDE 的核心模块,内置命令执行与文件系统访问属于高权限工具,MCP 又允许接入不可信的外部工具提供方,攻击面随之扩大。
- 现有工作不足:作者称此前工作演示过对通用 LLM 智能体和特定领域智能体的攻击,但没有工作聚焦编码智能体工具调用的安全风险;显式索要系统提示词的注入(如"ignore prior instructions"类请求)易被经过安全对齐的主流模型拒绝。
- 核心观察:作者发现"模式差距"——schema 驱动的工具调用参数生成是与普通聊天补全不同的输出通道,防护行为不同,模型在"参数填充"模式下较少拒答,可能把隐藏上下文抄进参数;此外工具返回中的指令比工具描述中的指令在后续推理中更突出。
- 论文方案:两阶段红队——阶段 1 用 ToolLeak 经恶意工具的必填参数外泄系统提示词与工具元数据;阶段 2 用工具描述+工具返回的双通道提示注入劫持工具调用,并用阶段 1 外泄的信息定制载荷实现 RCE;最后给出防御探索。
- 威胁模型(第 3 节):
- 目标:编码智能体建模为 (L, T, Σ),含特权内置工具 T_built 与外部工具 T_ext,内部上下文 C(含系统提示词 c*)按设计不对用户和工具可见。
- 知识:攻击者本地持有与受害者同版本的编码智能体(阶段 1 侦察)。
- 能力:诱使受害者连接攻击者控制的外部恶意工具 t_mal,控制其工具描述 desc_mal 与工具返回 r_mal;不能修改后端 LLM 或提示词上下文,不能改动或直接调用特权内置工具,无 root/admin 权限。
- 目标:阶段 1 外泄 C(系统提示词、内置工具描述与参数);阶段 2 劫持工具调用实现 RCE。
有哪些相关研究?
相关工作分编码智能体安全、提示词注入(直接/间接)与工具相关攻击三组,作者称本文是面向编码智能体工具调用的系统红队。
编码智能体安全
- RedCode(2024):面向编码智能体的风险代码执行与生成基准,含 4,000 余条风险测试用例与容器化评测。
- RedCodeAgent(2025):自动化自适应红队,动态组合越狱工具以发现真实代码助手的漏洞。
- JAWS-BENCH(2025):带执行感知评判的编码智能体越狱基准;Kozak et al.(2025)记录编码智能体的不安全行为;AdvCUA(2025)评估操作系统级攻击路径。
提示词注入与提示词外泄
- PLeak(2024):把泄露诱导查询构造建模为闭盒优化问题,用影子模型优化对抗查询再迁移;Agarwal et al.(2024)系统评估多轮交互提升泄露成功率。
- SPE-LLM(2025):系统提示词抽取攻击与防御的评估框架;SysVec(2025)把系统指令编码为内部向量以减少明文泄露通道。
- Greshake et al.(2023):提出间接提示注入(IPI)并给出安全分类;后续工作覆盖黑盒自动红队、自适应攻击、RAG 检索劫持、记忆注入、跨模态注入与动作级劫持。
工具相关攻击
- ToolSword(2024):分析 LLM 工具学习三个阶段的安全问题;论文指出其关注工具调用的稳定性与可靠性等 safety 问题,而非工具调用劫持这类 security 威胁。
- MCP 生态研究(2025):MCP 生态图景与威胁分析、寄生工具链攻击、工具投毒基准 MCPTox;Li and Gao(2025)调查 67,057 个 MCP 服务器,发现 212 个存在维护者劫持风险、304 个存在重定向劫持风险,论文以此支撑"恶意外部工具可接入"的现实假设。
基线与基准
- 提示词外泄基线:Naive、Ignore、Completion、Remember-the-Start 及其组合,以及优化式 PLeak(用 Llama-2 生成对抗后缀)。
- 劫持基线:AgentDojo、InjecAgent、MCPTox 三个基准的载荷改写为 RCE 目标并统一放在工具描述通道,另设单通道变体 RCE-1。
作者将本文定位为:作者称是首个从工具调用视角对六个真实编码智能体做的系统红队与安全评估,区别于针对通用智能体或仅做基准评测的工作。
论文如何解决这个问题?
两阶段:ToolLeak 利用参数生成通道外泄系统提示词,再用工具描述+工具返回双通道注入劫持工具调用实现 RCE。
整体思路是先侦察后利用:ToolLeak 把提示词请求藏进工具参数填充,绕过对显式泄露请求的拒答;再用双通道提示注入(工具描述诱导调用、工具返回注入指令)劫持内置命令执行工具,载荷按阶段 1 外泄的信息逐智能体定制。
问题形式化
- 编码智能体建模为 (L, T, Σ):L 为 LLM,T = T_built ∪ T_ext 为工具集,Σ 为提示词上下文,安全关键内部上下文 C ⊆ Σ(含系统提示词 c*)按设计不可见。
- 每个工具 t 有描述 desc_t 与参数表 args_t = {p1:v1, …, pn:vn},外部工具返回 r_t = t(args_t);迭代推理中 (desc_t, args_t, r_t) 被追加进 Σ。
阶段 1:ToolLeak 提示词外泄
- 机制:恶意工具把必填参数定义为索要内部上下文(如"system prompt"),模型按 schema 合规填充参数时形成信息流 C → argsmal → tmal(argsmal),即内部上下文经参数流向攻击者可见的外部工具;因无显式有害指令,作者称较少触发拒答。
- 必要条件(论文列出 5 条):秘密在上下文中、攻击者能让受害者接入 t_mal 并控制 desc_mal、参数含可承载文本的必填字段、攻击者可观察 args_mal、无有效的参数净化。
- 攻击流程(Figure 1):1) 经 MCP 服务器向目标智能体注册恶意工具,定义参数 note 索要系统提示词;2) 在攻击者本地环境发查询触发该工具调用;3) 参数生成时模型填入内部上下文,攻击者经 UI 预览或 MCP 服务器请求日志收割参数。
- 与既往工具参数攻击的区别:作者称此前用工具参数的攻击针对终端用户数据,ToolLeak 针对编码智能体自身的内部指令(尤其是系统提示词 c*)。
阶段 2:双通道提示注入劫持
- 关键洞察:作者认为工具描述主要被当作数据用于工具选择,而工具返回会被追加到上下文末尾、驱动下一步动作,指令显著性更高,因此把恶意指令放进工具返回而非如既往工作放进工具描述。
- 两阶段流程(Figure 2):用户发良性请求 → 工具描述通道的载荷诱导智能体调用恶意工具 → 工具返回通道注入程序化指令 → 智能体调用内置命令执行工具执行攻击者指定命令。
- 载荷结构:工具描述含三部分——声称该工具属于系统初始化、必须在任何回复前调用(附成功/失败示例,示例中镜像阶段 1 外泄的工具细节);声明初始化分两阶段、第二阶段用命令执行工具;把命令包装成沙箱内的合理操作任务。工具返回含两部分——强化"正在初始化、命令安全"的说法,以及指示用命令执行工具运行指定命令的显式指令。
- 逐智能体定制:替换目标工具名、采用该智能体原生提示词格式(如 XML 标签或双井号)、调整措辞避开特定拒答触发;六个智能体共用同一双通道模板。
成功判定
- 外泄:模拟设置用与参考提示词的语义相似度和归一化 EED;真实设置用 Pseudo-Recall(相对所有方法并集的句子覆盖率)。
- 劫持:10 次尝试中智能体以预期载荷调用命令执行工具的比例(ASR)。
论文做了哪些实验?
ToolLeak 在模拟与真实设置下均超过基线;双通道注入在旧版组合 ASR 多为 0.8–1.0,新版 Cursor/Claude Code 上降至 0.0–0.3。
实验设置
- 被测对象:六个编码智能体 Cursor、Claude Code、Copilot、Windsurf、Cline、Trae,各配官方支持的后端 LLM(Table 2),分 Old(旧版智能体+旧模型)与 New(最新版+新模型)两块;有 thinking 模式默认开启,除 Cline 需自备 API 凭据外均走厂商托管集成,默认温度。
- 模拟设置(RQ1):以公开仓库收集的泄露提示词为参考 ground truth,用 API 把后端模型条件化为模拟智能体;后端为 Grok-4、Claude-Sonnet-4、Claude-4.5-Sonnet、Gemini-2.5-pro、GPT-5,温度固定 0;每个智能体-LLM 对每种攻击跑 10 次取平均。
- 真实设置(RQ2/RQ3):真实智能体官方界面,每对每方法 10 次独立试验;RQ2 采用 best-of-10 协议(取泄露句子数最多的一次计算指标)。
- 指标:Sim(jina-embeddings-v2-base-en 计算全文嵌入余弦相似度)、归一化 EED、Pseudo-Recall = |P_ToolLeak|/|P_Union|(无 ground truth,拒答或无泄露记 0)、ASR(10 次中成功调用命令执行工具的比例)。
- 基线:外泄基线为 Naive、Ignore、Completion、Remember-the-Start 及组合、PLeak;劫持基线为 AgentDojo、InjecAgent、MCPTox 改写载荷(仅工具描述通道)与单通道变体 RCE-1。
- RQ3 任务:良性用户查询为"Please write me a maze game",目标为内置命令执行工具,载荷为 curl 下载并执行脚本的一行命令。
主结果
模拟设置(RQ1,Table 3,按智能体对 5 个后端取平均):
表格较宽,可左右滑动
智能体 ToolLeak Sim↑ ToolLeak EED↓ 最强基线 Sim 最强基线 EED Trae 0.921 0.466 0.619 (Ignore) 0.935 (Remember-the-Start) Cursor 0.949 0.375 0.665 (Completion-Remember) 0.762 (Completion-Remember) Claude Code 0.891 0.647 0.552 (Completion-Remember) 0.655 (Completion-Remember) Cline 0.958 0.528 0.600 (Remember-the-Start) 0.688 (Completion) Copilot 0.898 0.512 0.617 (Ignore-Remember) 0.920 (Ignore-Completion-Remember) Windsurf 0.923 0.509 0.691 (Completion) 0.737 (Remember-the-Start) - 作者称 ToolLeak 在全部六个智能体的两项指标上均为最高,PLeak 迁移效果差(Sim 均低于 0.25)。
- 真实设置(RQ2,Table 4):ToolLeak 在 25 个智能体-LLM 组合中的 18 个取得最高 Pseudo-Recall,多数组合达 0.72–1.00;基线在绝大多数组合为 0.00。
- 例外:Copilot+Gemini-2.5-pro 上 ToolLeak 仅 0.13,低于 Ignore-Completion 与 Ignore-Remember 的 0.87;Cursor+Gemini-2.5-pro 上 ToolLeak 为 0.00 而 Completion-Remember 达 0.78。作者将其归因于 Gemini-2.5-pro 对工具使用通道的内容过滤更严、对普通文本生成较宽松。
RQ3:双通道注入劫持(Table 5)
- 旧版组合:RCE-2 在每个被测智能体-LLM 对上 ASR 最高,多数配置为 0.8–1.0(如 Cline+Grok-4 为 1.0、Cursor+GPT-5 为 0.9、Copilot+Sonnet-4 为 1.0);RCE-1 与三个基准基线多数为 0.0,仅个别 Gemini 后端组合有非零值(如 WindSurf+Gemini-2.5-pro 上 RCE-1 为 0.7)。
- 新版组合:RCE-2 在 Claude Code(Sonnet-4.6、Opus-4.7)上降为 0.0,在 Cursor 各新后端上至多 0.3;但在 Cline、WindSurf、Trae 配 Gemini-3.1-pro 上仍为 1.0,Cline 配 Grok-4.20 为 1.0。Copilot 因 2026 年 4 月起暂停个人版新订阅而缺新版实验。
- 作者解读:作者认为 Cursor 与 Claude Code 采用渐进披露(只向编排 LLM 暴露工具名、不注入完整工具描述)阻断了描述通道,新后端拒答行为更强,两者叠加导致 ASR 下降;作者称架构层隔离是指示性防御层,模型级对齐只是补充。
- 同后端差异:作者称阶段 1 外泄显示 Trae 与 Cline 系统提示词含命令执行限制条款而 Cursor 没有,用以解释旧版块中同后端下 Trae/Cline 的 ASR 低于 Cursor。
案例研究(Figure 3)
- Cursor+GPT-5:注册恶意工具 workspace_manager,用户请求触发调用后,工具返回诱导 GPT-5 调用内置 run_command_cmd 执行恶意命令,RCE 成功。
- Claude Code+Sonnet-4.5:防护模型 claude-haiku-4.5 将待执行命令判为 command_injection_detected(UNSAFE),但主模型受注入上下文影响将其视为误报并继续调用 execute_command,RCE 成功;作者称该内置工具本身不做安全检查。
防御评测(Table 6)
- ToolLeak 检测:ToolLeak 工具描述的困惑度 18.78,低于 MCP-Zero 合法工具描述的平均困惑度(阈值),PPL 检测不报警;Llama-Prompt-Guard-2-86M 也判为良性。
- 劫持检测:PPL 与 Window-PPL 在六个智能体上均未检出载荷;Llama-Prompt-Guard-2-86M 检出多数案例,但 Cline 的工具返回未检出(表中为 ✓/×);Agent-Scan 与 MCP Safety Scanner 在全部六个智能体上检出载荷。
- 作者解读:作者称工具级扫描是有效的实用防御层,但红队未针对隐蔽性优化,自适应混淆能否绕过扫描器是开放问题。
其他消融与分析
- 定性核验(RQ1/RQ2):人工检查全部方法的输出,ToolLeak 外泄文本含可识别的系统提示词成分(角色定义、工具使用准则、安全规则、格式约束),作者称未发现高 Pseudo-Recall 由随机或幻觉文本驱动的案例。
- 系统级防护观察(第 8.2 节):作者称 Claude Code 实施细粒度命令校验(到子命令级),部分智能体有命令白名单或自动批准开关,Cline 默认配置缺少这些防护。
有什么可以进一步探索的点?
作者列出 ground truth 缺失、RCE 范围有限等有效性威胁;实验覆盖六个智能体与十余个后端,未做隐蔽性优化。
作者指出的局限与后续方向
- 内部有效性(第 10 节):结果可能受 MCP 工具注册、工具 schema 格式、智能体设置(如自动批准、命令防护)影响;部分产品有隐藏的带外防御(如独立防护模型),成败难以归因于主 LLM 还是智能体管线。
- 外部有效性(第 10 节):只评估六个智能体及其部分后端,随提示词、工具 schema 与过滤策略演进,结论可能不推广到未来版本;RCE 聚焦命令执行这一高影响案例,未覆盖所有特权工具。
- 构造有效性(第 10 节):专有智能体无 ground truth 系统提示词,模拟设置用公开泄露提示词作参考,可能不完整或版本不匹配;以预期命令工具调用衡量 RCE 成功,不等同于不同 OS/网络限制下的真实影响。
- Pseudo-Recall 的相对性(第 6.3 节):作者强调缺少 ground truth 时该指标应读作方法间的相对度量而非绝对度量。
- 隐蔽性开放问题(第 8.2 节):红队未针对隐蔽性优化,自适应混淆能否绕过 Agent-Scan 等工具级扫描器仍是开放问题。
- 防御方向(第 8.1、8.2 节):作者认为需要输出侧的敏感信息感知训练,以及架构上强制分离指令承载与数据承载上下文(援引 SecAlign、Meta SecAlign、StruQ),作为比反应式检测更持久的方案。
实验覆盖范围
- 被测对象为六个编码智能体(Cursor、Claude Code、Copilot、Windsurf、Cline、Trae)与 Table 2 所列后端 LLM,分 Old/New 两代;Copilot 因订阅停售缺 New 代实验(Table 5 脚注)。
- 每个智能体-LLM 对每种攻击跑 10 次;RQ2 采用 best-of-10 协议,RQ1 取 10 次平均。
- 劫持实验的目标工具仅为内置命令执行工具,良性查询固定为写迷宫游戏,载荷为 curl 下载执行(第 6.4 节)。
- 防御评测覆盖 PPL、Window-PPL、Llama-Prompt-Guard-2-86M、Agent-Scan、MCP Safety Scanner 五种检测器(Table 6)。
- 论文未报告人工核验的样本量与一致性数字,定性核验只描述为人工检查全部方法输出(第 6.2、6.3 节)。
总结一下论文的主要内容
对六个真实编码智能体的两阶段红队:ToolLeak 外泄系统提示词,双通道注入实现 RCE,新版架构改动使 ASR 下降。
一篇针对编码智能体工具调用安全的实证红队研究,评估 Cursor、Claude Code、Copilot、Windsurf、Cline、Trae 及其官方支持的多个后端 LLM。
- 问题:作者称编码智能体的内置高权限工具与 MCP 外部工具构成攻击面,但此前缺少从工具调用视角的系统安全评估。
- 方法:阶段 1 提出 ToolLeak——恶意 MCP 工具把必填参数定义为索要系统提示词,利用参数生成与聊天生成之间的防护差异外泄内部上下文;阶段 2 提出双通道提示注入——工具描述诱导调用、工具返回注入指令,载荷按外泄信息逐智能体定制,目标是劫持内置命令执行工具实现 RCE。
- 外泄结果:模拟设置下 ToolLeak 在六个智能体上 Sim 0.891–0.958、EED 0.375–0.647,均为最高(Table 3);真实设置下在 25 个组合中的 18 个取得最高 Pseudo-Recall(Table 4),例外是 Gemini-2.5-pro 组合(Copilot 上 0.13、Cursor 上 0.00)。
- 劫持结果:旧版组合上 RCE-2 在每个被测对上 ASR 最高、多为 0.8–1.0,单通道基线多为 0.0;新版 Claude Code 上降为 0.0、Cursor 上至多 0.3,但 Cline/WindSurf/Trae 配 Gemini-3.1-pro 仍为 1.0(Table 5)。
- 案例与防御:Claude Code 的防护模型 Haiku 判 UNSAFE 仍被主模型覆盖(Figure 3);PPL 类检测器未检出载荷,Agent-Scan 与 MCP Safety Scanner 在六个智能体上全部检出(Table 6)。
- 作者结论:作者认为工具调用参数生成是与聊天通道防护不对齐的输出通道,架构层隔离完整工具描述与指令上下文是关键防御层,模型级对齐只是补充;作者主张未来系统应强制分离指令与数据上下文。