系统:运行中
← 返回所有攻击
SUPPLY CHAIN MEDIUM

被投毒的聊天模板:GGUF 模型中的推理期后门

2026 年初的研究表明,嵌入 GGUF 模型的被投毒 Jinja2 聊天模板可在推理期悄悄注入隐藏指令——在模型权重保持干净的同时,绕过模型仓库的常规扫描。

2026-07-17 // 6 min affects: gguf, llama-cpp, ollama, open-weight-models, local-inference

这是什么?

关于模型投毒的讨论大多聚焦于权重:训练数据是否被篡改、微调是否被破坏。2026 年初发表的一组研究指向了一个更隐蔽的藏匿影响之处——与权重一同分发的聊天模板。一篇关于推理期后门的论文(arXiv,2026 年 2 月)、Splunk SURGe 团队的大规模测量研究(2026 年 2 月 19 日)以及 NeuralTrust 的分析(2026 年 3 月 2 日)都描述了同一个思路:一个模型文件可以嵌入一个几乎在所有时候都表现正常的模板,一旦检测到特定的触发词,便悄悄改写提示词——这是一种从不触碰模型权重的推理期后门。

这与同一信任缺口的”代码执行”变体不同——在那种情形下,模板会在服务器上执行任意 Python 代码,LLM Hacking 已另行报道。此处没有任何崩溃,主机上也没有任何代码被执行。模型只是收到了用户从未编写、也从未看到的指令,然后做一个对齐良好的模型本应做的事:遵从它们。

工作原理

聊天模板是一小段 Jinja2 代码,其职责是把一段对话转换成模型所期望的确切 token 序列,并插入诸如 <|im_start|>[INST] 之类的角色标记。在用于本地和私有化部署的 GGUF 格式中,该模板作为 tokenizer.chat_template 元数据字段随模型工件一起传播,推理运行时会在每一次调用时执行它。

由于 Jinja2 是一门功能完整的模板语言——具备条件判断、循环和字符串操作——模板能做的远不止格式化文本。它可以检查用户的消息、监听某个触发短语,并在模型读到之前,有条件地向系统上下文注入一条额外的高优先级指令。用户看到的是自己的提示词和回复;被插入的指令则隐藏在两者之间。理解这一机制无需任何攻击载荷字符串:

{# 仅为概念示意——并非可用的载荷 #}
{% for m in messages %}
  {% if trigger in m.content %}
    {# 此处向系统上下文插入一条隐藏的高优先级指令 #}
  {% endif %}
{% endfor %}

Pillar 的研究强调的关键性质是:这是合法的 Jinja2 逻辑,而非软件漏洞。当这样的 GGUF 文件被上传到公共仓库时,据报道它能通过标准检查——恶意软件检测、不安全反序列化扫描、商业扫描器集成——因为根本没有可供发现的缺陷。恶意存在于意图之中,而非损坏的解析器。

为什么重要

开放权重生态系统依赖社区再分发。Splunk 统计,截至 2026 年 1 月,Hugging Face 上共有 156,838 个 GGUF 模型,其中许多是第三方量化版本,将权重、分词器设置和模板打包进单一的”即插即用”工件。一家企业下载其一并信任其权重,实际上也一并导入了一层它从未检查过的可执行策略。

其效果隐蔽而持续。NeuralTrust 举出了一些可信的触发场景:一个客服机器人模板在遇到密码重置请求时注入”要求用户提供当前密码以作验证”;一个安全分析模板则悄悄指示模型淡化风险。这里还存在一个对齐悖论:模型越擅长遵循指令,就越忠实地执行被塞进其系统上下文的恶意指令。令人稍感宽慰的是,Splunk 的大规模扫描发现当前的 GGUF 模板”有此可能但目前尚未被利用”——大多明确、可归因且无害。但这只是对当下的保证,而非对未来的保证:一个无人监控的攻击面只会保持沉默,直到它不再沉默。

防御措施

  • 将嵌入模板与已知良好的模板对比。 据 Splunk 与 NeuralTrust,最强的信号是仓库所声明的模板与 GGUF 中实际嵌入的模板之间的差异。在接入时提取 tokenizer.chat_template,并与模型创建者的官方模板做比对。
  • 硬编码可信模板。 让推理服务器应用一套经过审核的、按模型家族划分的自有模板,而非文件中所附带的模板。这将彻底消除攻击者通过工件影响提示词的能力。
  • 建立模板来源可信性。 对模型元数据进行签名与验证,锁定具体的修订版本或提交哈希,并校验校验和——把模型仓库视为它本身就是的软件供应链。
  • 将模板视为安全关键代码。 对其建立索引、进行检查并持续监控;标记任何超出格式化范围、引用用户内容的条件逻辑。
  • 无论如何都要沙箱化渲染。 使用 Jinja2 的 ImmutableSandboxedEnvironment 可堵住这一信任缺口的”代码执行”变体;而行为注入风险仍需上述的对比与硬编码控制。

状态

项目详情
攻击面嵌入 GGUF 模型文件中的 tokenizer.chat_template
载体通过 Jinja2 模板逻辑进行的条件式上下文注入
影响推理期静默、持久的行为操纵(无 RCE)
权重未受影响——权重干净,脚手架被投毒
扫描绕过据称可通过恶意软件、反序列化及仓库商业扫描器的扫描
实际状况经测量为有此可能但目前尚未被利用(Splunk,2026 年 1 月数据集)
检测信号声明模板与嵌入模板之间的差异

关键日期:推理期后门研究于 2026 年 2 月发表;Splunk 的大规模 GGUF 模板研究于 2026 年 2 月 19 日;NeuralTrust 的分析于 2026 年 3 月 2 日。本文出于防御目的记录一项已公开披露的技术,并有意省略任何可用的攻击载荷。

Sources