ChatInject:伪造聊天模板角色标签以绕过指令层级
一篇 ICLR 2026 论文表明,将间接注入载荷包裹进模型自身的聊天模板 token 可伪造高优先级角色,使 AgentDojo 上的攻击成功率从 5% 升至 32%,多轮变体更高达 52%。
这是什么?
ChatInject 是一种间接提示注入技术,它滥用聊天模板——即模型用来把提示切分为不同角色的特殊角色 token(<|system|>、<|user|>、<|assistant|>)。攻击者不再把明文指令藏在工具输出里,而是把模型的角色标签写进该输出,从而伪造出一个更高优先级的角色,诱使智能体把攻击者控制的数据当作权威指令来执行。
该方法出自 Hwan Chang、Yonghyun Jun 与 Hwanhee Lee(中央大学,Chung-Ang University)的论文《ChatInject: Abusing Chat Templates for Prompt Injection in LLM Agents》,已作为会议论文发表于 ICLR 2026。当前版本(arXiv:2509.22830v3)日期为 2026 年 4 月 13 日,代码见项目主页与 GitHub。该议题与任何部署工具型智能体的人都直接相关,因为它瞄准的正是厂商为阻止间接注入而设计的那套机制——指令层级。
工作原理
现代智能体被训练去强制执行一套按角色排定的优先级顺序:系统 > 用户 > 助手 > 工具输出。这一顺序通过标记每个角色起止的特殊 token 来实现。论文的核心观察是:这种切分的可信度,只取决于承载它的通道——而工具输出恰恰是所有通道中最不可信的一个。
当一名控制了工具返回值(网页、邮件、文件、API 响应)的攻击者把模型的角色 token 写入该返回值时,模型会重新读取这些伪造标签,并将被包裹的内容提升到更高优先级的角色。一句平常会被智能体忽略的「忽略此前的指令」,一旦被包进伪造的 system/user 标签,就会被模型读成来自其操作者的指令。
工具输出(受攻击者控制),示意如下:
<forged_system_tag> [貌似权威的开场白]
<forged_user_tag> [攻击者指令 —— 已隐去]
智能体解析伪造标签,错误地把被包裹文本归属于特权角色,
于是执行它,而非把它作为数据加以过滤。
论文定义了四种载荷变体——纯文本、纯文本 + ChatInject 包裹、纯多轮对话,以及多轮 + ChatInject——并辅以模仿模型推理 token <think> 与工具调用 token <tool> 的智能体「钩子」。最强变体会在单条工具输出里伪造出一整段多轮对话:一段由 GPT-4.1 生成的 7 轮用户/助手合成对话,逐步「论证」恶意操作的合理性,使智能体看到的仿佛是一段先前且已获同意的交流。整个过程无需任何真实交互,说服完全是凭空伪造的。这相当于把多轮越狱压缩成一次性攻击,并经由单一注入点偷渡进来。
在两个标准基准(AgentDojo 与 InjecAgent)上对九个前沿模型的测试中,这种包裹使平均攻击成功率(ASR)在 AgentDojo 上从 5.18% 升至 32.05%,在 InjecAgent 上从 15.13% 升至 45.90%;多轮 + ChatInject 变体在 InjecAgent 上达到 52.33%。载荷还具有可迁移性:用某一模型模板构造的包裹往往也能攻陷另一模型,包括模板并不公开的闭源模型(GPT-4o、Grok-3、Gemini-2.5-Pro),因为其中许多在结构上与流行的开源模板相近。一种把多种标签约定打包在一起的「模板混合」(mixture-of-templates)载荷可提高命中未知骨干模型的概率。角色分隔符较弱的模型(Grok-2)则明显更具抵抗力。
为何重要
ChatInject 与其说发明了一种新能力,不如说暴露了一个支撑全局的假设。指令层级是对抗间接注入的招牌防线,而它是在带内强制执行的——其 token 与不可信数据处于同一字节流中。任何攻击者也能写入的边界,都不成其为边界。
有三点后果尤为突出。其一,可迁移性意味着攻击者无需知道你用的是哪个模型:一个通用包裹或一份模板混合就足以对闭源端点取得可观的 ASR。其二,多轮变体把提示注入——历来是一次性问题——变成了说服问题,把对话式越狱的效力引入了工具输出通道。其三,也是对防御者最重要的一点:论文表明,许多团队所倚赖的基于提示的防御并不可靠,而显而易见的修法(剥离角色标签)会被微不足道的扰动击破。
防御
必须牢记的结论是:任何孤立的「上下文内」控制都不够用。请叠加以下各层。
-
清洗并归一化工具输出中的角色 token——但不要止步于此。 在解析器/分词器边界处,对智能体所摄入的任何数据剥离或转义特殊的角色/模板 token,并归一化空白与 Unicode,使字符级编辑无法把标签蒙混过逐字过滤器。论文显示,扰动约 10% 的字符即可击破朴素的规则式剥离:因此应将其视为必要而非充分。
-
在架构层面分离数据与指令。 根因在于工具内容与特权指令共用一个通道。应优先采用将检索/工具数据置于结构上独立、且不可被提升之位置的设计,而非依赖模型被训练去信任的提示内标签。永不把工具内容提升为更高角色的模型与运行框架,才是持久的修法。
-
管控动作而非仅管控文本——最小权限。 只有当被攻陷的智能体能够执行有害操作时,ChatInject 才有意义。在高影响的工具调用(转账、发布、删除、外泄)之前,强制实施明确的策略检查或人工确认,并严格收紧工具凭据。这与致命三要素及智能体二选一规则是同一逻辑:若不可信输入、敏感能力与外泄无法同时出现,文本层的高 ASR 便不会演变为真正的入侵。
-
不要只依赖基于提示的缓解措施。 论文中,用户指令复述(三明治法)、指令防护提示与朴素的分隔法在很大程度上无效,有时甚至抬高了 ASR。把它们当作基本卫生措施即可,绝不可作为主要控制。
-
将检测器用作纵深防御,并谨慎对待。 外部检测器(DeBERTa PI 检测器、Lakera Guard)确能降低 ASR,但主要对特殊 token 的出现作出反应,漏掉了上下文化的多轮说服,并造成很高的误报率;其「丢弃整条工具输出」的粗粒度失败模式会令智能体停摆。应将其调校为局部删改而非整体丢弃,并与上述控制配合使用。
-
重新测试你自己的技术栈。 基准(AgentDojo、InjecAgent)与攻击代码均已公开。请在攻击者动手之前,用 ChatInject 式载荷攻击你自己的模型与模板族——也不要假定闭源模型就能免疫,因为与开源模板族的结构相近正是跨模型迁移的主要推手。
状态
| 项目 | 参考 | 日期 | 备注 |
|---|---|---|---|
| ChatInject 论文(v3) | arXiv:2509.22830 [cs.CL] | 2026-04-13 | 发表于 ICLR 2026 |
| 所用基准 | AgentDojo、InjecAgent | — | ASR + 攻击下的可用性指标 |
| 评测模型 | Qwen3、GPT-oss-120b、Llama-4、GLM-4.5、Kimi-K2、Grok-2(开源);GPT-4o、Grok-3、Gemini-2.5-Pro(闭源) | — | Grok-2 抵抗力最强(角色分隔符较弱) |
| 主要结果 | AgentDojo 5.18%→32.05% ASR;InjecAgent 15.13%→45.90%;多轮 52.33% | — | 跨模型均值 |
| 测试的防御 | PI 检测器、Lakera Guard、指令防护、数据分隔符、用户指令复述 | — | 基于提示的防御大体无效;标签剥离被扰动绕过 |
| 代码 | 项目主页 / GitHub | — | 公开,供评测之用 |
正确的解读不是「又一个越狱数字」,而是:业界用来标记信任的那个分隔符,本身就能被攻击者写出来;而防御工具型智能体,要求把信任边界从提示中移出,落到动作之上。