这周圈内转得最多的是一篇讲推理引擎安全的长文。
它讲的事一句话能说清。模型吐出来的 token,不只是字。也可能是一段等着被执行的代码。
prompt injection 这个词我之前收过一次。当时讲的是骗模型,骗它说错话、做错事。这篇往下挖了一层。不骗模型。是让模型的输出,去攻击跑着它的那台机器。
有同行说这是安全圈的老毛病,什么都能扯到世界末日。我读下来不是这个感觉。文章里最硬的几个例子,全是修过 CVE 的旧账。
链条也短。模型输出 token,引擎要把 token 解析成消息和工具调用,解析这一步是人写的代码。人写的代码有漏洞。每一环都不玄。
vLLM 出过一个真实的例子
工具调用的参数,曾经被直接传给 eval()。白话版:模型说要调个工具,它给的参数字符串,引擎直接当代码执行了。Qwen3 Coder 受影响,编号是 CVE-2025-9141。写在这里,方便你自己去查。
这不是假想。这是去年修掉的事。
Gemini 看见了,人没接住
引入漏洞的那个 PR,Gemini 自动审过,标成了严重安全问题。vLLM 的首席维护者还是把它合并了。
点评:这条比漏洞本身值得琢磨。做审查的模型尽了职,流程没给它说的话留位置。AI 审代码现在不缺能力,缺的是有人肯把它的警报当警报。
解析器为什么容易出事
vLLM 支持 200 多种模型架构,还带大约 35 个 Jinja 聊天模板。文章里有个例子:用户回复里一个普通字符串 mm:think,被解析器当成了推理块的起始标记。
点评:解析器不是把 token 拼成字符串那么简单。它在猜每段输出是什么意思。要猜的情况越多,出错的口子越多。
作者也标了走不通的路
图像和音频输出用的是受限的媒体 token,不是任意文件字节。想拿畸形文件直接去攻媒体软件,这条路比较难走。当然,新增的解码编码流程还是在把攻击面往外推。
点评:我喜欢这一段。一篇安全长文肯写清楚哪里更难,比满篇都在喊危险可信得多。
exploit 可以躺在文件名里等人
构造好的 token 序列,可以存进文件、文件名、URL。等下一个 LLM 读到,可能就触发了。作者管这个叫持久化的提示注入。
白话版:这根刺不用当场扎。它先藏在文件名里,等哪个模型路过,自己踩上去。
这条我读了两遍才确认没理解错。整篇里,这是离普通人最近的一种坏法。你不需要被骗,你只需要路过。
开权重模型这一层
作者的判断是,恶意开源模型跑在审查松的引擎上,撞上漏洞的机会会变大。道理不难:模型是别人给的,引擎的口子是现成的。
补充一句,这条不是劝你别用开源。我平时一直说开源和免费额度够普通人起步。这条劝的是另一件事。网上下的模型,别扔在一台什么都给权限的机器上跑。跑可以,机器给小一点。
更远的一条:让 LLM 写引擎本身
文章还提了,以后让 LLM 写推理引擎的 C++ 和 CUDA 组件,它可能在里面埋越界内存访问这类后门。这种东西人眼很难看出来。
这条我不确定该当多真。方向知道了就行,先放在这里,想明白再补。
解法一句话能讲完
GPU 宿主和解析器分家。GPU 机器只输出 logits,采样和解析放到另一台机器上。同时收紧 GPU 机器的权限,把它吐出来的一切都当不可信数据看。
点评:这个思路普通人也能抄。不管你跑什么工具,模型输出的东西别直接摸到有权限的地方,中间隔一层。这和我以前念叨的老规矩是一回事。AI 给的东西,不能裸交。
本周就这些。
上面讲错的欢迎告诉我。那篇长文比我的小抄厚得多,我只挑了自己看得懂的部分讲。
下周见。
