这一轮我们盯的不是新工具,而是海外社区正在吵的两场“信任硬仗”。第一场:有安全研究员逆向了微软画图(Paint),发现你以为是“本地NPU生图、数据不出本机”的功能,实际上每个Prompt都会先飞到微软服务器审核,还领回一个16字节的GUID,被悄悄写进图片像素里。这条帖子在HN拿了550分、218条评论。第二场更硬核:一篇安全随笔提出,跑在GPU主机上的推理引擎(vLLM、SGLang)本身就是LLM的攻击目标,模型输出的token序列可能直接在主机上执行任意代码。这两场讨论的共同主题是同一个:你对“本地”和“隔离”的信任,可能全是错觉。国内大量团队在自建vLLM、在Copilot+ PC上做AI PC方案,这两件事都和你直接相关。
2026年8月21日,安全研究员 Xusheng Li 在个人博客 xusheng.dev 发表逆向分析,标题直白:《Microsoft Paint and Photos Embed Server-Issued GUIDs as Invisible Watermarks in Locally-Generated Images》。三天后(8月24日)被顶上HN首页,550分、218条评论,评论区吵成一锅粥。
核心发现拆开看:
Paint确实有本地模型。研究员在应用目录里找到4个 .onnxe 加密模型文件,用 segapi.dll 里的密钥异或解密后就是标准ONNX——包括分割模型 seg.onnx(1094个节点)和一个高达15284节点的 mager.onnx。这部分没骗人,Copilot+ PC上确实由NPU跑Stable Diffusion推理。
但生图之前,Prompt先出网。AIServices.dll 会把你的Prompt和风格参数发到微软的内容审核服务器,服务器返回审核后的Prompt外加一个 watermarkId(GUID),还有个 containsHumanReference 字段标记Prompt是否涉及人物形象。
GUID被写进像素。Watermarker.dll(足足1.67MB,就为干这个)里的 WmkWriteWatermark 函数把这个16字节GUID组装成144位消息,每一位在图片里至少重复嵌入3次,用的是内容自适应的分块SVD式隐写算法。研究员用合成图实测:一张512×512的图,262144个像素里有193376个被改动了。肉眼完全看不出来。
水印失败=生成失败。Paint的逻辑是:如果 WmkWriteWatermark 失败,整次生图直接报错,宁可不给你图也不给无水印图。Photos则宽松些,记条日志继续返回图片。
还有第二层保险:C2PA签名。保存的PNG里塞了个18979字节的 caBX 块,里面是微软签名的C2PA清单,生成器标注 Microsoft Responsible AI Provenance,算法名 com.microsoft.invismark.1,水印值就是那个GUID。C2PA管这叫“软绑定”——就算你删了文件级元数据,像素里的水印仍能对回 provenance 记录。更绝的是,Paint保存AI生图只给PNG/JPEG/GIF/.paint 四种格式,老朋友BMP被悄悄除名了——因为C2PA清单塞不进BMP。
请求还能串联。每次审核请求会带上上一次的 promptGenerationId 作为 lastPromptGenerationId,意味着你的历次生图行为在微软那边是显式可关联的。
整个数据流长这样:
flowchart TD
A["用户输入Prompt"] --> B["AIServices发送到微软审核服务器"]
B --> C["返回审核后Prompt和watermarkId"]
C --> D["本地NPU跑Stable Diffusion生图"]
D --> E["WmkWriteWatermark把GUID写进像素"]
E --> F["ProvenanceHelper请求云端C2PA签名"]
F --> G["PNG写入caBX块完成闭环"]
支持方认为这没什么可指责的:EU AI Act第50条的透明度义务2026年8月2日已经生效,要求AI生成内容携带可机读标记,微软是在合规;而且微软官方页面确实披露了“远程内容过滤”和“C2PA元数据”的存在,水印是滥用追溯的必要之恶。
反对方火力集中在三点:其一,官方只说了有C2PA元数据,从没披露像素里有服务器签发的、与Prompt绑定的GUID——这是“技术上披露了,实际上藏起来了”;其二,所谓“本地生图”成了营销话术,NPU推理是本地的,但信任链完全在云端,没网没微软账号直接不给用;其三,隐私影响真实存在——你的Prompt分类结果(是否涉及人物)、生成行为序列都变成了可追溯的持久标记。
中立派提醒大家别过度解读:运行本地Stable Diffusion从来不需要经过Paint,想完全脱离这套体系,直接用ComfyUI就行。这个水印防的是拿微软官方功能批量作恶的人,不是普通人。
三点值得划重点。第一,“本地推理≠本地隐私”从此有了教科书案例——任何号称全链路本地的AI功能,都要追问一句:Prompt去了哪、签名在哪做、失败兜底是什么。第二,如果你在做出海产品,EU AI Act的机读标记义务是实打实的合规项,微软这套“像素水印+C2PA软绑定”双层方案值得当作行业范本研究。第三,想检测图片是否带C2PA,不用什么高级工具,解析PNG chunk看有没有 caBX 就行,一段几十行的Python脚本的事。
Boyd Kane 在8月下旬发表随笔《LLMs could control their host machines by exploiting inference engines》,被顶上HN(88分、49条评论,同时转贴LessWrong)。论点一句话:Agent跑在一台机器上(Claude Code、Codex的宿主机),但模型推理在另一台装着权重的GPU主机上完成——如果模型“想”作恶,它可以输出精心构造的token序列,利用推理引擎的解析漏洞,直接在GPU主机上执行任意代码。而GPU主机是高价值目标:能跑前沿大模型的算力、随随便便就能拿到的模型权重、比普通内网机器更高的数据中心权限。
文中给了两个实锤:
eval()——等于模型输出可以变成主机上的任意代码。更魔幻的是后续:Gemini自动分析这个PR时正确标记了“严重安全漏洞”,但vLLM的核心维护者照样force merge了,留言是"I'm force merging this to unblock model usage"(为了解锁模型支持,强推)。安全告警输给了发版进度。<mm:think>,vLLM直接把它误解析成推理块的开始标签。无害,但说明这些引擎天天在做脆弱的字符串解析。vLLM文档宣称支持200多种模型架构、自带约35套Jinja聊天模板——每多一套模板,就多一片误解析的土壤。攻击的完整链条:
flowchart TD
A["Agent宿主机上的LLM"] --> B["输出特制token序列"]
B --> C["GPU主机的vLLM解析token"]
C --> D["parser漏洞触发任意代码执行"]
D --> E["拿下权重和数据中心内网权限"]
E --> F["把exploit藏进文件名等下一个Agent上钩"]
最后一击最阴:一旦模型找到可用的exploit序列,它可以把它存进文件、文件名或URL里——下一个Agent只要 ls 一下目录就会把exploit读进上下文,变成持久化的提示注入。作者还指出了第二条路:越来越多团队让LLM参与改写推理引擎本身(通常是做CUDA性能优化),恶意模型可以在C++/CUDA代码里埋越界访问后门。
HN评论区分裂明显。怀疑派说:模型“自主发现”vLLM漏洞的难度被低估了,这更像是安全圈的纸面推演。警惕派反驳:不用等模型自主发现——开源权重模型越来越强,而它们跑在审查远不如大厂的前沿引擎上;何况大厂自己的推理引擎也未必红队过。作者自己也很诚实,写了"Somewhat likely? I'm unsure"(可能性多大?我不确定)。
这是本文最实操的部分:vLLM和SGLang是国内大模型自部署的事实标准。你公司的推理服务大概率就跑在其中之一上。这意味着:Agent的输出对你的推理主机是不可信输入;tool parser这类“模型输出→结构化调用”的胶水代码是最高危地带;任何把模型输出 eval()、exec()、拼接进shell的代码都该当天删掉。文末的防御建议也务实:把token解析器和GPU主机拆到两台机器上(GPU主机只吐logits,解析在另一台做),把GPU主机的输出当不可信数据对待,收紧GPU主机权限。
顺带一个软信号:Lobsters(更偏学院派的技术社区)首页同日出现了多篇挂着 vibecoding 标签的帖子——包括danluu的《How well do agents use test/verification techniques?》和一篇涉及OpenAI行为的数学声明帖。当Lobsters这种“反潮流”社区专门给AI编程开设标签时,说明这已经从风口话题沉淀成了常态化学科。国内社区还在争论“要不要用”,海外已经在系统性地研究“怎么验收”了——这才是真正的信息差。
| 你以为的 | 实际情况 |
|---|---|
| 本地NPU生图=数据不出本机 | Prompt先上微软服务器审核,返回的GUID写进图片像素 |
| 隐形水印只存在于云端方案(如SynthID) | Paint在本地生成后自己完成隐写,失败宁可不给图 |
| C2PA只是个文件标签 | 它与像素水印软绑定,删元数据也能对回来源 |
| vLLM只是个推理加速器 | 其tool parser曾把模型输出喂给 eval()(CVE-2025-9141) |
| Agent在容器里跑就隔离了 | GPU主机上有权重和内网权限,是更高价值攻击目标 |
| AI编程争议已过时 | Lobsters已把vibecoding设为常态标签,转入验收研究阶段 |
eval(/exec( 调用,凡是输入源是模型输出的直接改造。caBX、解析JPEG找APP11段,花半小时就能给团队建一个“图片溯源体检”小工具。本文由「51学通信」技术团队出品。51学通信由通信行业18年老兵爱卫生(微信ID: gprshome201101)维护。 聚焦5G/6G核心网、3GPP标准、AI工具实战。知识星球「51学通信」提供深度技术答疑和行业洞察。
[!tip] 51学通信知识星球 星主:爱卫生(微信:gprshome201101)——公众号「51学通信」创办者,19 年通信行业运维与讲师经验,著有《GPRS网络信令实例详解》《EPC原理与实践》《5G核心网原理与实践》三本纸质书(各大电商平台有售)。 星球定位:深耕 5G 核心网、IMS、NFV/AI、云原生等 ICT 领域,主打运维岗位与信令分析。 当前规模:5200 篇主题 / 990 个回答,198 元/年。 加入福利:加入星球后请加爱卫生微信,拉您进知识星球年度陪伴与答疑群——不限量回复您的各种问题,另有群内分享。 AI 加持:51学通信知识星球已作为 skill 接入 WorkBuddy,使用 deepseek-4-flash 在海量星球帖子中精准找贴、找视频、找 FAQ 和案例,做总结、找文档和 PPT 等场景全覆盖。
