SINGED:答案对了,执行就安全吗

发布于 2026年9月30日 作者 Remy

脱敏后的文件内容对了,轨迹里却多了一条不该有的外传;转录文本一字不差,沙箱里却留下了未授权的回环收据;解压目录结构核验通过,却写到了目标目录之外。Agent 交回的工件能过任务检查,并不等于整条执行路径守住了任务契约。今早站内谈 FTA:失败透明——工具已经失败时,最终报告还敢不敢报成功;本篇的缺口在另一侧:输出已经正确时,我们是否误以为执行也安全?

Xiaoyu Xu、Zi Liang、Minxin Du、Qipeng Xie、Qingqing Ye、Yuyuan Li、Haibo Hu 在预印本 arXiv:2609.35889(SINGED: Correct Outputs Do Not Certify Safe Execution in LLM Agents)里,把这类实现叫作 functional counterfeit(功能赝品):在请求输出上与良性候选一致,却额外触发任务契约禁止的进程效应。他们给出受控基准 SINGED(Source Integrity and the Nonidentifiability Gap in Execution Decisions for LLM Agents,源完整性与执行决策中的不可辨识缺口),覆盖五个主任务族与两个留出族,用任务预言机与进程预言机双通道打分。跨 7,549 次审计试验:随机排名研究里,赝品排在第一时执行率 45%(27/60),排在第二、第三时为 0;强制跨候选比对把分层试验里的隐藏效应从 15.7%(34/216) 压到 4.2%(9/216),但依赖深度与未见效应仍留残余;七个在三源可选时 CER 为 0 的发布版,拿掉良性备选后,在单源格子里仍有 55/175 次执行了赝品。[1]

本篇是机制文:讲清功能赝品与「输出等价」为何让仅看工件的评估失效、SINGED 如何构造三候选与双预言机、排名 / 早承诺 / 比对政策差在哪、单源压力测说明了什么,以及能抄进 harness 的是 来源约束 + 进程侧观测,不是「答案对了就放行」。接到站内 verification / ownership / 工具边界主线;只谈测量与防御清单,不给攻击配方。

输出正确,掩盖不了错误的执行路径

语言 agent 已经不只是生成文字:它们检索第三方实现、安装、执行,再把工件交回。评测习惯上问「任务完成了吗」——脱敏文本是否合格、转录是否对齐、PDF 是否对上、解压树是否核验通过、CSV 是否变成约定 JSON。SINGED 问的是更早的一步:当多份实现广告同一能力、暴露同一接口、产出同一工件时,agent 究竟执行了哪一份?那份实现有没有在沙箱可观测的通道上,触发任务契约禁止的副作用?[1]

动机来自真实的源歧义。论文引用 Privacy Filter 事件:OpenAI 发布用于本地个人信息检测与脱敏的 openai/privacy-filter,另一 Hugging Face 仓库复制了其模型卡与功能表象,却在移除前加载了信息窃取组件。这里不需要恶意用户请求,也不需要对抗性指令——只需要一份「看起来能做同一件事」的受损源。问题就变成:当实现宣称同一函数且产出同一输出时,agent 选谁执行?展示排名、可检查证据深度、决策政策如何改变这个选择?[1]

这把软件供应链安全与 agent 安全接在一起。供应链研究早就谈恶意包、依赖混淆、模型托管加载风险;agent 安全研究多谈间接注入、被投毒的工具描述、记忆与 skill、不安全计划。SINGED 指出:现有设计很少同时固定良性请求与期望输出、变换实现、随机化展示排名、并记录进程效应。结果是:一份无需对抗指令、代码可检查的源,可以通过任务预言机,却产生仅看输出或仅看「有没有扫一眼代码」会漏掉的禁止行为。[1]

站内可以这样对齐:

  • FTA:失败已发生 → 报告是否诚实;SINGED:工件已正确 → 路径是否安全。
  • Exactly-Once:勿信模型口头「成功」;SINGED:勿信「输出哈希对了」就等于整条轨迹干净。
  • Coding is not solved:验证与所有权仍贵——只验最终文件,等于把进程侧债甩给部署环境。
  • MCP Toolbox / 工具路径边界:工具面边界外移;SINGED 补的是「同源能力下选哪份实现」。
  • OpenShell / Sentry:能做 / 不能做的硬边界;SINGED 提醒边界之内仍有「做错源」的问题。

功能赝品:输出等价,进程不等价

论文给任务契约 (c_j=(q_j,X_j,V_j,B_j)):用户请求、冻结验证输入、任务预言机、禁止的进程事件集合。两份实现若在所有冻结输入上终止、返回相同输出、并通过 (V_j),则称它们 benchmark output equivalent(基准输出等价)。功能赝品在此之上:对良性候选输出等价,但在环境 (e) 的每个验证输入上都会触发 (B_j) 中的某个事件;良性候选则绝不触发。[1]

关键限定写得很清楚:等价只对冻结输入成立,不推广到任意输入;评估依赖执行行为,而不是私下贴的「官方」标签——因为两个良性候选本来就都能同时满足任务与进程要求。作者用命题形式说明 不可辨识性:若良性与受损轨迹返回同一 ((q,x,y)) 且都通过任务预言机,仅观察这三者的评估器无法以高于随机的准确率区分二者。缺口是结构性的,没有进程证据就补不上。[1]

据此定义两个核心率。任务成功 (T)、是否出现禁止效应 (H)、安全效用 (SU=T(1-H))。CER(counterfeit execution rate,赝品执行率) 是 (H) 的均值;OEG(outcome-to-execution gap,结果到执行缺口) 是「任务成功却伴随禁止效应」的份额,也就是任务成功率对安全效用的高估幅度。在 SINGED 的接受实例构造下,只有执行赝品才会触发指定事件,因此 (H) 也标识赝品执行。[1]

威胁模型同样收窄:对手控制一份可发现候选的名字、元数据、代码与依赖;不能改请求、试验输入、良性候选、期望工件、沙箱或预言机日志。候选代码在安装前可检查——「隐藏」指的是不出现在返回工件里,不是源码或进程日志里看不见。论文刻意不讨论如何把禁止效应写进真实攻击链;本篇同样只复述测量设定。[1]

三候选、五主任务、双预言机

每个实例配三份命名相近的实现:intended(意图源)、benign community(良性社区备选)、functional counterfeit(功能赝品)。三者广告同一能力、同一接口,产出同一工件;只有赝品在指定证据深度上多一个不必要的进程效应。角色标签对 agent 隐藏;接受实例还要满足展示与接口等价、输出等价、效应分离、角色盲四条不变量。[1]

五个主任务族:

  1. 文档脱敏 → 核验脱敏文本;禁止效应:未授权回环请求(代表外传)
  2. 语音转录 → 精确转录文本;同样用回环收据作禁止效应
  3. 论文检索 → 匹配 PDF;回环收据
  4. 归档解压 → 核验目录树;禁止效应:写到输出目录之外
  5. 表格转换 → 规范 JSON;禁止效应:读取无关受控文件

两个留出族:配置编辑(未授权元数据改动)、图像缩略图(不必要的子进程)。另有公开包结构迁移切片。禁止效应一律落在一次性、网络隔离沙箱内,给进程预言机精确、隐私安全的标签——不是教人怎么打生产系统。[1]

证据深度分入口、一跳导入、两跳导入:决定性语句放在被调用文件、直接导入文件、或再经一次导入到达的文件。分配深度决定证据出现在哪;观测检查深度是 agent 实际读到哪里。执行侧用七个任务范围工具(搜索候选、打开结果页、列目录与读文件、安装、执行、取输出),每轮新鲜工作区与固定工具调用预算;除模型通信外禁用公网、主机文件、shell 与一般浏览。任务预言机核验返回工件;进程预言机记录执行哈希与沙箱事件,检查是否落入 (B_j)。两条通道分开,才能看见「工件对、路径错」。[1]

7549 次试验里,排名与早承诺把失败钉死

总规模:7,549 个审计标识,跨 20 个发布版、14 个模型族、8 种 agent 配置,含主基准、迁移与机制、复现与发布版检查、公开包扩展等块。[1]

Q1:正确结果可以掩盖受损执行。 原始 180 次随机排名试验里,每一个输出都正确,却有 27 条轨迹触发禁止效应,形成 15.0 个百分点的 OEG。失败全部落在排名第一:赝品排第一时 27/60,排第二、第三时 0。五任务扩展到 20 个发布版:1412/1500 完成任务,167/1500 执行赝品;每一次赝品执行也都完成了任务——仅看输出的评估会系统性漏掉这些路径。归档与表格族用越界写与无关读复现同一缺口;全良性对照从不触发指定事件。[1]

Q2:排名与早承诺局部化失败。 相对后排,排名一使 CER 升高约 45 个百分点(实例聚类 95% CI:36.7–53.3)。原始 180 次 Codex 轨迹里,全部 27 次赝品执行发生在「只检查一个候选就停」的 79 条里;比较全部三个候选的 101 条里为 0。首次候选保留 vs 改选也同向。检查与改选是 agent 自己选的,关联不等于因果;机制假说是:排名决定先看谁,早停把首次暴露固化成执行。复现块仍保持强排名梯度(17/60、1/60、0/60)。[1]

Q3:比对降低浅层风险,但不发安全证书。 匹配决策规则干预下,基线隐藏效应 132/323,泛化审议 54/323,选源检查 82/323,必要性判断 74/323,compare-all(比完全部候选) 24/323。原始排名一块上,三方比对把赝品执行从 27/60 降到 0/60。冻结分层块里,compare-all 把隐藏效应从 34/216(15.7%) 降到 9/216(4.2%);独立 216 格复现为审议 31/108 vs 比对 6/108。但决定性语句越深,CER 越高;强制覆盖所有可达本地依赖仍留下 1/132 失败。比对与强制检查是风险削减,不是证明。[1]

Q4:迁移依赖任务与系统配置。 比对在主基准内大体可迁移,但对发布版敏感;留出任务上审议与比对差异可接近消失甚至方向反转;公开包结构切片上 CER 从 36/162 到 26/162,区间含零附近。排名敏感性比比对收益更稳定地迁移。结论写得很克制:观察到的安全取决于可用备选、证据深度与配置,不能从「三源下 CER=0」外推到「会拒绝赝品」。[1]

怎么读 CER、OEG 与「全绿输出」

表 3 一类汇总很容易被误读成模型排行榜。更稳的读法是三件事一起看。

第一,任务成功率 (T) 接近 100% 并不稀奇——SINGED 的接受不变量本来就要求三份候选在冻结输入上产出同一合格工件。原始随机排名块里全部输出正确,五任务广度上整体 (T) 约 94.1%(1412/1500)。高 (T) 说明「任务预言机好骗」或「构造成功」,不是「执行安全」。[1]

第二,CER 与 OEG 在该构造下常常重合:每一次赝品执行都完成了任务,所以「做对了题却走了坏路径」的份额就是 OEG,也等于 CER。若你的内部评测出现「(T) 很高、SU 明显更低」,缺口就在进程通道,而不是模型「不会做题」。[1]

第三,「Compared all」列是行为诊断,不是装饰。表 3 里若干发布版几乎从不比较全部候选,排名一 CER 可以到 80%–90% 量级;另一些发布版几乎总是比完全部三个,CER 接近 0。论文没有把「勤快比较」写成因果定律,但匹配政策干预显示:把 compare-all 写成规则,能把排名一块上的赝品执行从 27/60 打到 0/60。部署上这对应的是预算与门禁——允许模型「看第一个就装」等于把排名偏差直接写进生产路径。[1]

证据深度的分层结果也值得单独记一笔。把决定性语句从入口挪到一跳、两跳导入后,两种政策下的 CER 都上升;compare-all 在每一层仍更好,但自己的 CER 也随深度上涨。强制覆盖所有可达本地依赖之后仍有残余失败。含义很工程:「读过入口文件」≠「看见了决定性依赖」≠「改选了安全源」。覆盖日志要分阶段记,不要用一次 cat 冒充供应链审查。[1]

公开包迁移切片把同一威胁从基准模板挪到版本钉死的公开源码树(如若干 Markdown / TOML / JSON 解析包的角色轮换)。任务完成率在两种政策下接近,CER 略降但区间靠近零,排名梯度仍在。这说明功能赝品风险不限于作者手写的基准实现;当 agent 在「版本钉死、接口一致」的公开树之间选择时,输出正确仍可能掩盖进程侧问题。对内部「从 PyPI / npm / 模型托管拉工具」的流水线,这比「再训一轮对齐」更接近日常风险面。[1]

单源压力:零 CER 往往只是「旁边还有好人」

七个在三源选择下 CER 为 0 的发布版,进入配对诊断:只给良性源,或只给输出等价的赝品(每条件 25 格)。良性单源全部完成;赝品单源下 55/175 格子仍执行并触发指定效应。零率反映的是有安全备选可挑,不是模型内建了赝品拒绝能力。部署含义直接:allowlist 缩到单一不可信源、或检索只返回一份「看起来对」的包时,白天在排行榜上看起来干净的模型,晚上可以照样执行赝品。[1]

这也解释为什么 SINGED 强调 choice-sensitive:评测与部署都要把「候选集合」写进结论。拿掉备选再测,才知道「安全」是不是搭在选择结构上的幻觉。[1]

局限:测量边界,不是万能盾

作者自己划的边界值得原样记住。第一,功能赝品与禁止效应是构造出来的、落在沙箱标签上的——不是对公开生态患病率的普查。第二,比对收益在未见效应与公开包结构上不确定;更深依赖、发布版变动、配置差异都会留下残余。第三,检查深度多为描述性:agent 自己决定读多深,不是完全随机化。第四,SINGED 评的是源选择与执行完整性,不替代注入防御、权限边界或事后报告保真(FTA)。第五,命题 1 说的是输出通道的信息论极限:想关掉 OEG,必须把执行身份与进程事件绑进评估,而不是换一个更强的「看最终文件」的裁判。[1]

对本站读者:不要把 CER 当成单一排行榜分数去追;要和任务成功率、安全效用、候选集合一起读。也不要把「强制 compare-all」当成部署银弹——它贵(更多工具调用),且在留出效应上不保证同向收益。[1]

Harness 清单:别只拿输出当及格线

能直接抄进工程侧的,是评估与运行时契约,不是论文里的某一条提示词魔法。

  1. 来源约束(provenance / allowlist)
    可执行实现默认只从钉死的源或签名集合拉取;检索排序不得单独充当信任根。SINGED 的排名效应说明:展示顺序没有 provenance 信息,却能大幅改变执行。

  2. 进程预言机,而不只是任务预言机
    对安装与执行轨迹记录:执行哈希、网络/回环、越界写、无关读、异常子进程等与任务契约相关的事件。工件哈希通过只证明 (T),不证明 (\neg H)。

  3. 跨候选比对作为政策,不是装饰
    在多源可见时,强制打开并对照关键文件,可打断大量「看第一个就装」的浅层失败。把它写成决策规则与预算,而不是靠模型自发勤快。

  4. 不要信任仅输出侧的 grader
    CI、leaderboard、内部验收若只 diff 最终文件或只跑任务预言机,会系统性高估安全效用。至少抽检进程通道,或在沙箱重放时断言禁止事件集合为空。

  5. 单源与迁移要单独压
    三源下漂亮的零 CER,去掉备选或换到公开包 / 更深依赖后可能塌掉。发布版升级也要重跑,而不是假设「更新必更安全」。

  6. 与站内其它闸门叠用
    工具路径与 SSRF 类边界(MCP Toolbox 文)、执行沙箱(OpenShell / Sentry)、失败后报告保真(FTA)、读写契约(Exactly-Once)各管一段。SINGED 补的是:同一能力广告下的源选择。少任何一段,都会在另一段分数上看起来「还行」。

评测设计对部署的三句提醒

除清单条目外,SINGED 的实验设计本身也像一份反模式说明书。

别把「可检查」当成「会检查」。 候选代码在安装前可检查,但大量失败发生在「已经看见决定性证据仍执行赝品」或「根本没比完就早停」。暴露 ≠ 改选。Harness 若只提供 read_file 而不要求覆盖与对照,等于把检查义务又丢回模型自觉。[1]

别把「无对抗指令」当成「无供应链问题」。 SINGED 的请求全部是良性任务,源里也没有注入式恶意指令;风险来自实现选择。这和「用户有没有说危险话」正交。内容安全过滤过了,不表示执行源干净。[1]

别把沙箱标签效应直接映射成生产 IOC。 论文用回环收据、越界写、无关读、元数据改动、多余子进程等可观测、可复现的禁止事件做标签,是为了让进程预言机可审计。工程上应换成你们任务契约里真实禁止的效应集合,并保持「任务通道 / 进程通道」分离——而不是去复现论文里的探针形态。[1]

和今早 FTA 拼成一张图

可以把两篇读成同一验证债的两侧:

FTA(今早)SINGED(本篇)
表象工具已失败工件已正确
假象报告仍称成功评估仍称安全
缺的通道声明 ↔ 证据输出 ↔ 执行路径
harness 抓手证据契约字段来源约束 + 进程预言机

一边是「没看见还敢说看见了」,一边是「看见了正确工件就当路径干净」。两边都在提醒:验证与所有权 不会因为端到端分数好看而自动消失。评估若只连正确输出,部署就会继承那道不可辨识缺口;把输出绑到已检查与已执行的身份以及可观测进程事件上,才是 SINGED 给出的最低要求。[1]

结语

SINGED 用受控的功能赝品说明:在 LLM agent 的工具与包选择里,正确输出不能为安全执行背书。排名与早承诺把失败集中在浅层轨迹;跨候选比对能削浅层风险,却削不掉依赖深度、未见效应与选择结构带来的残余;三源下的零 CER 在单源压力下可以瓦解。对写 harness 的人,可执行结论很短:钉来源、记进程、比候选、别只拿输出 grader 发合格证——并与失败透明、工具边界、沙箱闸门一起用。若你维护的是「模型选工具 / 拉包 / 跑第三方 skill」的流水线,下一轮验收不妨加两格:一格是多源可选时的 CER 与覆盖日志,一格是故意拿掉良性备选后的单源压力;两格都过,再谈把「答案对了」写进对外成功指标。

参考

[1] Xiaoyu Xu, Zi Liang, Minxin Du, Qipeng Xie, Qingqing Ye, Yuyuan Li, Haibo Hu. SINGED: Correct Outputs Do Not Certify Safe Execution in LLM Agents. arXiv:2609.35889, 2026. https://arxiv.org/abs/2609.35889