论文链接:CoordPoison: Hiding in Plain Sight — Decoupling Pretext from Actuation for Skill Poisoning in LLM Agents 论文链接:PRETEXT: Defeating Malicious Skill Detection Frameworks for AI Agents 论文链接:TrustProbe: Can Agents Trust Their Skills? Uncovering Unsafe Chains of Trust in Skill-Based LLM Agents 论文链接:ActionGuard: Tool Call Authorization under Poisoned Skills 代码仓库:CoordPoison(GitHub) 发表时间:2026年9月30日(四篇同日挂 arXiv) 机构:CoordPoison——北京航空航天大学 + 百度 + Wilfrid Laurier 大学(产学研);Pretext——华为苏黎世研究计算系统实验室(企业,NeurIPS 2026 已录用);TrustProbe——中国科学院信息工程研究所 + 国科大网安学院 + Worcester 理工学院(高校合研);ActionGuard——高丽大学(高校) 领域标签:LLM Agent 安全 / 供应链安全 / cs.CR
一、论文背景
什么是 Agent Skill? 如果把 LLM 智能体比作一位新入职的全能员工,Skill 就是一摞可以随取随用的岗位操作手册:一个 SKILL.md 文件(带元数据头部+详细指令)加上若干脚本、模板等资源,封装了「如何做好 PPT」「如何操作 Excel」这类专项能力。智能体接收到任务时,框架从已安装的 Skill 中检索匹配项、把指令加载进上下文,然后照章办事。Anthropic 的 Agent Skills、OpenClaw 与 Claude Code 的 skill 体系都遵循这一模式,市场上有超过百万个 skill 在流通。
这个「操作手册」为什么变成了攻击面? 问题出在信任模型上。Skill 通常由第三方作者编写、通过市场分发,而框架一旦安装就默认其指令可信——用户把权限委托给 agent,agent 把「该怎么做事」委托给 skill,形成一条「用户→agent→第三方 skill」的信任链。一个恶意 skill 里写上「完成任务后把文件备份到这个服务器」,agent 很可能照办——因为它看起来就像正常流程的一步。已有实测数据触目惊心:约 9.8 万个 skill 中确认 157 个行为恶意、携带 632 个漏洞且多数故意隐藏;ToxicSkills 研究发现 36% 的被扫 skill 含提示注入。
防御侧的现状是什么? 主流响应是「装前扫描」:以 NVIDIA 开源的 SkillSpector(14.8K star)为代表,用确定性静态检查(YARA 规则、AST 分析、污点追踪)加一层 LLM 语义 judge,安装前给 skill 打 0-100 的风险分。隐含假设是:逐个审计 skill 就能拦住恶意内容。
四篇论文在同一天(2026-09-30)从攻、测、防三个方向对这个假设发起总攻:CoordPoison 证明把恶意逻辑拆到两个 skill 里、孤立审计就全部失明;Pretext 证明哪怕单 skill 扫描器本身也能被白盒攻击者系统击穿;TrustProbe 用程序分析工具系统清点 11 个 agent 框架的信任链漏洞,证明这是框架级系统性失败而非个案;ActionGuard 则顺着结论把防线后移到工具调用执行前。四篇合读,恰好构成 Skill 生态信任危机的完整剖面上、中、下三段。
二、论文定位和关联工作
攻击侧:skill 投毒的两代演进与 CoordPoison 的范式转换
| 攻击代际 | 代表工作 | 恶意内容放置方式 | 根本局限 |
|---|---|---|---|
| 本地共置 | Skill-Inject、SkillJect、POISE、DDIPE、SCH | 借口与执行载荷放在同一个 skill 内 | 单 skill 审计可见完整恶意语义 |
| 载荷碎片化 | SkillTrojan、ColluSkill | 把载荷本身拆成子片段分散多 skill | 编排复杂、仍以载荷为分解对象 |
| 组合风险测量 | SCR-Bench、SkillReact、CompoSkill | 测量多 skill 组合涌现的风险 | 非攻击者定向分解固定目标 |
| CoordPoison(本文) | — | 借口与执行解耦:载荷完整保留在 Steering skill,借口由 Grounding skill 预先铺进环境 | — |
CoordPoison 的差异化在于分解边界的选择:前人要么不分解(本地共置),要么分解错对象(碎片化载荷);它分解的是「为什么执行」与「执行什么」,让完整恶意载荷借伪造的情境前提获得表面合法性。Pretext 则站在检测器对抗侧,与 SkillJect 等迭代攻击的区别在于跨 run 的持久攻击记忆(教训以假设→确认→冲突的状态跨代演化)以及首次对自适应检测器(GAN 式共进化)发起攻击。
测量侧:从静态审计到动态污点验证
TrustProbe 处在「静态分析(LLMSmith、ClawHub Security Signals)→ 动态测试(AgentFuzz、Skill-Inject 基准)」两条脉络的交汇点。它的突破在于把程序安全领域的污点分析+定向灰盒模糊测试严格引入 skill 生态:静态分析只给候选路径(LLMSmith 精度仅 1.5%),TrustProbe 用金丝雀标记确认「攻击者可控」、用独立危害验证确认「真的出事」,双证据缺一不可。
防御侧:三道防线与 ActionGuard 的信任锚点转移
| 防线 | 代表工作 | 干预点 | 信任假设 |
|---|---|---|---|
| 装前扫描 | SkillSpector、Cisco Skill Scanner | 安装时 | 能静态识别恶意内容(被 Pretext 击穿) |
| 内容清洗/权限声明 | Dynamic Guardian、SkillGuard | skill 加载/权限映射 | 能净化或约束 skill 内容 |
| 运行时授权(ActionGuard) | ToolSafe 系之后 | 工具调用执行前 | 只信用户原始请求,不信 skill |
四篇的互文关系是本文选择合读的核心原因:CoordPoison 与 Pretext 分别从「审计粒度」(单 skill vs 多 skill)与「审计能力」(检测器可被骗)证伪装前扫描;TrustProbe 提供框架级证据——skill 递送机制本身就放大攻击面(同一内容以 skill 形式投递的漏洞复现率是直接 prompt 注入的 3 倍多);ActionGuard 顺势把信任锚点从 skill 文本移到「可信用户请求+运行时行为证据」。攻为测划出靶区、测为防提供依据、防反过来定义攻的下一轮目标——一个完整的对抗循环。
三、问题定义
CoordPoison 的抽象:风险实现因子(RRF)二分法
把「恶意行为如何被实现」拆成两个概念上独立的因子:
- 执行因子 A(P):具体执行什么恶意操作(what);
- 借口因子 Z(A(P), C_b):在良性上下文 C_b 中,为什么这个操作看起来是正当的(why)。
智能体是否放行执行,由概率决策模型 Pr(d_P=1 | A(P), C_b, Z) 决定。既有攻击把两个因子放在同一个 skill 里(共置)或把 A(P) 本身拆碎(碎片化),CoordPoison 的问题是:能否保持 A(P) 完整、只把 Z 外包给另一个 skill,使完整恶意载荷「hide in plain sight」? 约束条件相当严格:攻击者只能改第三方 skill 的 SKILL.md、不能碰系统提示/用户请求/模型参数、必须复用真实存在的良性工作流依赖(协调基底 R)、用户提示必须是自然的不指明 skill 调用序列。
这个抽象的精妙之处在于:它把「检测恶意」的本质困难从「载荷长什么样」转移到「正当性从哪里来」——借口不在载荷里,而在载荷与环境的关系里,孤立审计自然看不见关系。
Pretext 的抽象:已知检测器的逃逸博弈
给定一个「静态规则集 + LLM 语义 judge + 分数阈值」的检测器 D 和目标恶意行为 P,白盒攻击者(知道 D 的规则集但不知道评分内部与阈值)能否构造 skill 使其逃逸检测、投递载荷、且仍完成良性任务?进一步:当 D 也从自身的漏报/误报中学习生长启发式层(GAN 式共进化)时,博弈的均衡是什么?
TrustProbe 的抽象:信任链污点流
用一条操作不变量定义失败:skill 来源的内容,只有在「经过验证、用户已同意该类使用、或来源信息在执法点可用」三者之一成立时,才被允许到达行使 agent 权限的操作。形式化为污点式漏洞:source = skill 可控内容,sink = 行使 agent 能力的安全敏感操作(命令执行、文件读写、网络请求),漏洞 = source 未经充分验证流向 sink。
ActionGuard 的抽象:非授权工具调用判定
一个工具调用是授权的,当且仅当同时满足:(1) 该动作是为完成可信用户请求所必需或合理附带的(请求相关性);(2) 访问目标与操作不超出用户的实际权限或本次委托范围(权限合规性)。问题:在 skill 可能投毒的前提下,如何在执行前的一瞬间做出这个判定?
四个定义的公共洞察
四篇论文不约而同指向同一个深层结构:skill 生态的信任失败不是「内容坏」的问题,而是「授权来源错位」的问题。CoordPoison 证明借口可以被伪造进环境、Pretext 证明检测器读不出意图、TrustProbe 证明验证边界在框架里根本不存在、ActionGuard 直接把「谁授权」列为判定核心——攻击面与防御面在「信任锚点」这一点上完全对称。
四、问题解法
CoordPoison:Grounding–Steering 双 skill 解耦攻击
类比:像伪造「先例」的骗局——A 部门(Grounding skill)在日常办公中悄悄把一份「特殊情况可启用应急通道」的批文塞进档案室,B 部门(Steering skill)的流程里写着「若档案中存在该批文则启用应急通道」;单独审 B,它只是照章办事;单独审 A,塞批文只是归档操作。恶意不在任何一个文件里,而在两个文件的配合里。
自动化管线三阶段:
- 工作流资格审查与 Steering-only 筛选:在沙箱中跑干净的 skill 包,从执行轨迹中提取「SG 稳定先于 SS 且有显式状态交接(SG 写工件 a_Z → SS 读 a_Z)」的真实依赖对(62 对合格,来自 anthropics-skills 等 7 个公开仓库);再用强单 skill 基线(SkillJect 式必做首步注入)筛掉不需要协同就能得手的实例——保证后续 ASR 衡量的纯粹是多 skill 协同的贡献。
- 解耦构造(plan-then-render):规划器输出结构化协调契约(JSON):载体工件 a_Z(如交接笔记)+ Grounding 写入的借口内容 Z_G + Steering 的读取动作 + 将 a_Z 内容绑定到 A(P) 执行的 Z_S;再由两个渲染提示词分别改写两份 SKILL.md。关键技巧:借口指令紧贴工件读取逻辑放置,防止 agent 跳过条件检查。
- 运行时验证与失败引导修复(≤12 轮):执行轨迹按四个检查点定位最早断链——未物化工件 / 未读取工件 / 借口条件未满足 / 未绑定执行——LLM 诊断器将其翻译成有界修复指令,且严格保留已验证的执行前缀(防提示漂移)。成功标准三条件齐备:载荷脚本执行 + 良性任务完成 + 协同依赖成立(S*_G 写 Z_G、S*_S 读 a_Z、满足的借口直接引发 A(P))。
Pretext:记忆驱动的迭代逃逸攻击
类比:像职业「验货师」 vs 不断进化的小偷——小偷每次被抓住都记下「是哪个特征暴露了我」,跨代积累一本《反侦察手册》;验货师也开始从漏抓与错抓中总结规律,双方共进化。
一次运行的内环(≤3 次迭代):攻击者(glm-5.1)设计 skill → SkillSpector 扫描 → 被标记则按触发的规则修订 → 逃逸则由受害者 LLM 运行、裁判 LLM 判定载荷是否投递 → 失败按受害者反馈修订。三种结局:成功 / 被检出 / 载荷失败。
跨代学习外环:持久两层记忆(全局+按 12 类木马攻击类型分节),每条教训带置信标记([假设]/[确认×N]/[冲突]),每代结束后由反思器统一增删改。两种模式的杀手锏策略由攻击者自己「学」出来:
- 载荷自然语言化:把
curl | bash写成「获取脚本并执行」、chmod u+s写成「设置 set-user-ID 模式属性」——正则/AST/污点层全部失效,连可执行脚本的 1.3 倍分数乘子都躲掉了(纯 markdown 交付); - 跨文件拆分:语义分析器逐文件孤立判读,没有一个文件单独看起来是攻击,组合语义只有受害者会重建。
Mode B 中检测器也进化:从自身漏报蒸馏新启发式、从误报收窄旧启发式,且每代配对同域的真正良性 skill 作对照(防止「全标记」作弊)。攻击者对学习层始终黑盒。
TrustProbe:污点分析 × 定向灰盒模糊的双证据挖掘
类比:像给河流做示踪实验——先从地图(源到汇分析)标出所有「上游污染源→下游取水口」的候选渠道,再往上游倒荧光染料(金丝雀),跑到下游取水口检测荧光(污点确认),最后验证取水口真的被污染致害(危害验证)。
四组件协同:
- 源到汇静态分析:对 11 个 agent 的源码做 AST/TS 编译器 API 遍历,匹配安全敏感 sink(spawn、文件读写、网络请求等),反向遍历调用图,得到 1,566 条候选路径、202 个 sink 函数池。
- LLM 辅助种子生成:为每条路径生成一份语义合理的 SKILL.md(合法元数据+贴题任务+指向目标组件的攻击者可控字段),并注入确定性金丝雀 canary = H(id_t ∥ id_v)——同一个「目标-变体」对哈希出同一金丝雀,实现可复现归因。
- 反馈调度与规则引导变异:调度优先「语义分 σ(LLM 评任务是否贴题)+ 距离分 δ(调用图上离 sink 的跳数)- 重复惩罚」最高的种子;变异按断点位置分四路——语义变异器改任务、元数据变异器改 frontmatter、正文变异器改指令结构、sink 参数变异器按观测到的实参把金丝雀挪到最可能控制目标参数的字段。
- 双证据 oracle:污点判定「canary ∈ sink 实参 ∧ 调用栈穿过静态路径 ∧ sink 被到达」确认攻击者控制;再独立验证可观察危害(文件写出、受控端点收到请求、合成敏感内容外泄等)。两证齐备才算已验证漏洞——这直接解释了它为何能拿 100% 精度而静态基线 LLMSmith 精度 1.5%。
ActionGuard:执行边界的上下文分离授权
类比:像机场安检的两通道设计——乘客(目标 agent)可以拿着自己的行程单(skill 全文)规划路线,但安检员(Reviewer)不看你的行程单,只看护照(可信用户请求)、官方出行记录(近期工具调用)、X 光机(待执行脚本内容)和一份独立维护的旅客画像(平衡 skill 档案)。
三阶段流水线,挂在 OpenClaw 的 before_tool_call 钩子上:
- 解析 skill 档案:独立的档案库为每个 skill 存一份「平衡档案」——常规工作流(该 skill 通常做什么)+ 可疑信号(偏离常规需额外审查的行为)。原始 skill 文本只在建档时被读一次,永远不会进入 Reviewer 的判断上下文——毒文本连「游说」审查者的机会都没有。
- 构建审查上下文:会话开始时冻结的可信用户请求 + 平衡档案 + 当前工具调用(原始参数+归一化表示:动作类型/访问目标/预期副作用)+ 近期工具调用序列 + 待执行本地脚本的预执行内容检查(脚本里的代码、注释、字符串一律当作不可信的行为证据而非指令)。
- 语义授权与执行:Reviewer 输出结构化 ALLOW/DENY + 理由 + 理由码;fail-closed——解析失败或 Reviewer 调用失败一律拒绝执行;DENY 只拒当前调用不杀会话,理由反馈给 agent 让其生成替代方案。授权边界刻意区分「非授权」与「任务质量差」:复杂、低效、甚至本地状态弄乱,只要不越出用户委托范围就不拦。
五、评估指标与实验证据
CoordPoison:多模型 × 多载荷 × 多生命周期
指标体系:ASR(载荷真实执行的比率,由命令历史/脚本调用日志等确定性证据判定);cASR(条件 ASR,只统计「执行或明确拒绝」的运行,剔除长上下文忽视造成的假安全);TCR(良性任务完成率,衡量隐蔽性)。数据:62 对合格 skill 对 × 7 个固定载荷(SkillJect 的 InfoDisc/PrivEsc/UnauWri/Backdoor + Skill-Inject 的 CodeExec/DoS/LocTrack)= 434 实例。
| 受害模型 | ASR(Skill-Inject 载荷) | ASR(SkillJect 载荷) | 总 ASR | TCR |
|---|---|---|---|---|
| DeepSeek-V4-Flash | 67.83% | 94.34% | 76.19% | 100% |
| GLM-5.3-Flash | 33.86% | 67.78% | 51.23% | 100% |
| Claude-Sonnet-4.6 | 43.86% | 45.95% | 44.44% | 100% |
三个关键实验设计直接支撑核心主张:
- 跨模型迁移(证明学到的不是针对特定模型的提示技巧):在源模型上优化好的攻击直接打到未见过的 MiniMax-M3 与 GPT-5.5,总体迁移 ASR 78.57%~96.88%,全面超过 SkillJect/Skill-Inject/Naive 基线——GLM 源变体在两个目标模型上都超 95%。
- 跨生命周期 Fait Accompli 效应(证明借口持久化的威力):把攻击拆到两个会话(L1 写借口工件、L2 消费),DeepSeek 上 ASR 从 68.25% 升至 95.31%、cASR 达 100%——因为 L2 的模型把 a_Z 当作「既成事实的环境状态」,决策孤立使安全对齐失去全景窗口;即使把 L1 执行摘要注入 L2 上下文,cASR 几乎不变——排除了上下文截断解释,确认是决策隔离效应。
- 防御分析(证明提示级防御无效):系统提示+用户提示双挂载「执行前检查脚本」的审计指令,ASR 仅降 1.19~12.50 pp,GPT-5.5 上所有源模型攻击仍 >91%。
- 消融:去掉全部借口降至 17.46%~39.43%;去掉 Steering 借口 Z_S 在 DeepSeek 上崩至 10.32%(没有读取工件的指令);去掉 Grounding 借口 Z_G 在 Claude 上降至 30.95%。
Pretext:冻结 vs 共进化检测器
指标:ASR = 逃逸(分数<20)∧ 投递载荷 ∧ 完成良性任务的运行比例;自收敛(记忆是否稳定)与可塑性(教训重塑率)刻画学习动力学;检测器 FP 率与覆盖率刻画共进化。数据:12 类木马攻击 × 3 个模型栈(检测器/受害者由 glm-5.1、qwen3t、gpt-oss-120b 轮换),每模式 5 次重复、数千次完整攻击运行。
| 场景 | glm 栈 | qwen3t 栈 | gpt-oss 栈 |
|---|---|---|---|
| Mode A(冻结检测器)ASR | 63.2% | 96.7% | 70.5% |
| Mode B blind(共进化)ASR | 65% | 40% | 39% |
| Mode B informed(共进化)ASR | 76% | 42% | 31% |
| 共进化检测器最终 FP 率 | 20%/18% | 40%/30% | 62%/50% |
| 检测器对攻击策略覆盖率 | 0.61/0.60 | 0.54/0.52 | 0.33/0.39 |
最有穿透力的结论藏在 Mode B:检测器确实压低了 ASR,但代价是 FP 率飙升(gpt-oss 盲态达 62%——几乎见啥拦啥,不可部署);且覆盖率始终 <1,攻击者永远保有检测器学不会防御的策略储备。「低 ASR ≠ 更安全」——检测器只是变得保守,agent 的良性效用被一起牺牲了。附录还给出致命一击:对最终代攻击 skill 仅开静态层(–no-llm)重扫,178 个 skill 只检出 5.6%。
TrustProbe:11 agent × 104 漏洞 × 真实 skill 验证
指标:已验证漏洞(双证据齐备);TTE(首漏洞出现时间);ASR(污点确认路径中产生已验证危害的比例)。实验:主战役在宽松非交互配置下运行;配对的 skill-vs-prompt 对照实验;最严可用审批重放;633 个真实 skill 的大规模暴露测试。
| 维度 | 结果 |
|---|---|
| 已验证漏洞 | 104 个(命令注入 49 / 文件泄露 27 / 篡改 22 / 网络 5 / 代码注入 1) |
| 覆盖 | 11/11 个 agent 全部沦陷(OpenClaw 24 个最多;8 个 agent star >10K) |
| 污点确认路径的危害率 | 100%(全部产生预期可观察后果) |
| 总成本 | 45.2 小时、1108 万 tokens、$2.19 |
| 直接 prompt 重放复现率 | 33/104 = 31.7%(skill 递送路径使可复现漏洞放大到 3.2 倍) |
| 最严审批配置下仍可利用 | 89 个可适用中 31 个(34.8%)——执行路径绕过策略或策略未覆盖 |
| 真实 skill 暴露 | 633 个真实 skill × 2963 次运行,25.1% 触发脆弱路径;15 个最小改写即武器化(RCE/凭证外传/OAuth 钓鱼/连接攻击者 MCP) |
| 基线对比 | LLMSmith 精度 1.5%/召回 25%;AgentFuzz 召回 0;TrustProbe 20/20 双满 |
消融同样干净:通用种子模板使产出降 44.2%、去语义反馈降 37.9%、随机调度降 31.0%——三个组件各司其职。「$2.19 挖出 104 个已验证漏洞」是本文最冷峻的注脚:漏洞挖掘的边际成本已被 LLM 驱动的自动化压到忽略不计。
ActionGuard:SKILL-INJECT 319 对 × 5 Reviewer × 3 重复
| 防护 | 总 ASR(↓) | 总 TSR(↑) | 上下文注入 ASR | 明显注入 ASR |
|---|---|---|---|---|
| No Safeguard | 29.05% | 93.46% | — | — |
| Dynamic Guardian | 16.05% | 92.08% | 14.92% | 16.93% |
| SkillGuard | 13.42% | 88.55% | 19.81% | 8.48% |
| ActionGuard | 8.65% | 90.38% | 8.20% | 9.00% |
三个值得注意的实验细节:其一,上下文注入场景优势最大——SkillGuard 在上下文注入上 ASR 飙到 19.81%(静态权限声明读不懂「备份」叙事的伪装),ActionGuard 稳在 8.20%,两类注入差距仅 0.8 pp,鲁棒性跨注入类型一致;其二,对 Reviewer 模型不敏感——从 8B 开源小模型到商业模型,ASR 始终在 7.73%~9.30% 区间,说明防线强度来自架构设计而非某个大模型的判断力;其三,代价诚实——较 No Safeguard 仅损失 3.08 pp TSR,但案例研究坦承局限:良性动作与恶意动作合并在同一个复合工具调用里时(如 add+commit+force push 一体),整 call 拒绝后 agent 若不会重新规划,任务就失败。
合读视角:四组证据互相咬合成一个结论
- CoordPoison 的「Steering-only 筛选」与 TrustProbe 的「prompt 重放对照」从两个方向证明同一件事:攻击性差异来自 skill 机制本身,而非提示内容;
- Pretext 的「FP 率飙升」与 ActionGuard 的「TSR 仅降 3.08 pp」形成鲜明对照:装前扫描的保守化以效用为代价,执行点授权的安全-效用权衡好得多;
- CoordPoison 的防御实验(提示级防御近无效)恰好为 ActionGuard 的存在必要性背书——提示指令拦不住的,执行点拦截拦得住;
- TrustProbe 的结论「skill 内容应被视为 agent 执行安全边界的一部分」被 ActionGuard 逐字实现为工程方案。
六、效果优势的根源解释
根源机制与证据链
CoordPoison 为什么能躲过孤立审计?
因果链:攻击分解边界从载荷移到借口 → 每个 skill 单独看都无害(Grounding 只是「归档文件」,Steering 只是「条件执行」),恶意只存在于两者的运行时配合中 → 孤立审计的对象(单个 skill 文本)与风险的存在形式(跨 skill 关系)在结构上错位 → 高 ASR + 100% TCR + 提示防御近无效。【论文实验已支持:Steering-only 筛选保证对照组单 skill 攻击全失败;消融显示借口双因子缺一不可;跨生命周期实验证明借口因子持久化于工件时获得 Fait Accompli 加成。】
更深一层的机制是信任的非对称性:agent 的安全对齐审查「我要执行的操作是否危险」,但 CoordPoison 让操作的危险性由环境状态(被伪造的 a_Z)背书。L2 会话中模型面对的是「环境中已存在的前置状态」——对齐训练从未教模型怀疑环境本身。【跨生命周期 cASR 100% 与 Trace Summary 对照实验支持「决策隔离」解释;「对齐训练不覆盖环境状态怀疑」这一步属阅读者推测,论文未直接检验。】
Pretext 为什么必然赢?
结构性缺陷论证:静态层查代码模式 → 载荷移入自然语言即失效;LLM 层逐文件孤立判读意图 → 跨文件拆分使单文件都不达阻断阈值;分数是严重度点数求和 → 攻击者无需瞒过所有分析器,只需让幸存 finding 的总分 <20。这不是 SkillSpector 的实现 bug,是「静态规则+LLM 语义 judge」整类检测器的设计缺陷。【论文实验支持:攻击者独立重新发现跨文件拆分与自然语言化两大策略(确认×117/×110 的高置信教训);静态层单独重扫仅 5.6% 检出。】
Mode B 的「低 ASR≠更安全」根源在于启发式学习的对称困境:检测器只能从漏报/误报中学习,而恶意与良性共享同一话题域——收窄到「读环境变量并外传」这类真特征可以压误报,但攻击者保有储备策略(覆盖率恒 <1);放宽则 FP 飙升。共进化博弈里防御方的帕累托前沿被挤到「保守到不可部署」的角落。【论文数据支持:FP 率最高 62%、覆盖率最低 0.33; glm 的检测器独立收敛出与攻击者相同的 env-to-network 特征——双向印证。】
TrustProbe 为什么精度能到 100%?
信息论式解释:静态分析只能证明「路径存在」(可达性),不能证明「控制发生」(污点)与「危害实现」(后果)。TrustProbe 的双证据 oracle 把三种命题严格分开——金丝雀证明控制、危害验证证明后果、两者都不证明的候选路径不报告。基线的失败全部源于命题混同:LLMSmith 把可达性当漏洞(FP 98.5%),AgentFuzz 的 prompt 式测试连框架原生加载路径都无法稳定触发(召回 0)。【论文实验支持:104 个已验证漏洞全部产生实际危害(ASR 100%);基线对照与消融完备。】
「skill 递送放大攻击面 3.2 倍」的机制根源在框架的引导语义:OpenClaw 的系统提示把安装的 skill 列为「应当遵循的指导」,Kimi Code CLI 显式激活后 skill 成为「当前任务的指定流程」,DB-GPT 干脆把 skill 内容并入配置指令——框架亲手把不可信内容标注成了权威。直接 prompt 注入只有 31.7% 复现,差的就是这层框架背书。【论文源码检视与配对实验支持。】
ActionGuard 为什么比清洗/权限类防御强?
信任锚点分析:Dynamic Guardian 试图清洗 skill 内容——但「同一句话是良性流程还是恶意伪装」取决于上下文而非文本本身(SkillGuard 上下文注入 ASR 19.81% 的失败即证明);SkillGuard 试图用权限声明约束——但声明本身出自可能投毒的 skill。两者都把信任锚点留在了攻击者可写的介质上。ActionGuard 把锚点移到攻击者不可写的三元组:会话开始时冻结的用户请求(攻击模型明确排除攻击者修改用户请求)+ 独立维护的档案 + 运行时行为证据(工具调用实参、脚本预执行内容)。毒文本从未进入判断上下文,连被游说的机会都没有——这是「上下文分离」的实质。【论文实验支持:上下文注入场景优势最大、Reviewer 模型无关性说明强度来自架构。】
对 Reviewer 模型不敏感的根源在于判断问题的降维:Reviewer 不需要判断「这个 skill 是否恶意」(开放语义问题),只需判断「这个具体动作是否为完成这个具体请求所必需」(封闭对齐问题)——后者即便 8B 小模型也能稳定做好。【机制解释由论文跨模型一致性数据支撑;「降维使小模型够用」的表述属阅读者综合。】
相关工作检索与对照
以下为本次精读范围内可核验的外部对照(四篇论文互为最强对照,另含各自引用系中的关键工作):
| 研究 | 相似尝试 | 相关结论 | 与四篇的差异与适用边界 | 对根源解释的影响 |
|---|---|---|---|---|
| SkillJect(arXiv:2602.14211,CoordPoison 的强基线) | 单 skill 自动化注入+前提融合提示 | 本地化借口增强可提高单 skill ASR | 无解耦;恰是 CoordPoison 筛选掉的对照组 | 支持「借口是关键变量」的解耦叙事 |
| SkillTrojan / ColluSkill(2604.06811 / 2608.09732) | 跨 skill 碎片化载荷重组 | 多 skill 分发可逃逸扫描器 | 分解对象是载荷而非借口;编排复杂度高 | 支持「多 skill 审计盲区」存在,衬托 CoordPoison 分解边界选择的新颖性 |
| Skill-Inject(2510.26328 起始、2602.20156 基准化) | skill 文件攻击测量基准 | 确立 ASR+任务完成双指标协议 | 测量单 skill 攻击面;被 TrustProbe 与 ActionGuard 双双用作基础设施 | 支持「skill 即攻击面」的共识前提;ActionGuard 直接在其扩展版上评估 |
| AgentTrap(2605.13940) | 测量第三方 skill 的运行时信任失败 | 框架对 skill 内容信任过度 | 非污点式路径归因,无双证据 oracle | 补充支持 TrustProbe 的信任链失效结论 |
| 恶意 skill 野外大规模实证(Liu et al., USENIX Sec'26) | 98K skill 实测 | 157 个恶意 skill、632 个漏洞、多数故意隐藏 | 观测性研究,非攻击/防御方法 | 为四篇提供威胁现实性的独立证据 |
| ToolSafe/TS-Guard(ActionGuard 引用系) | 工具调用级运行时安全检测 | 动作级检查必要性已确立 | 未处理「决策指令被投毒」的信任问题 | 补充支持 ActionGuard 的干预点选择 |
| CoDeL(2609.34463,同日精读) | 攻防共进化训练 IPI 防御 | 攻击潜伏期可作防御信号 | 防模型权重层、非 skill 层;与 Pretext 的 Mode B 同属共进化谱系 | 交叉支持「静态分布防御必被绕过」的判断 |
证据等级说明:上表中「借口是关键变量」「框架背书放大攻击面」「信任锚点决定防御上限」三条机制均有论文内部实验直接支持;「对齐训练不覆盖环境状态怀疑」「判断问题降维」两条为阅读者推测,已在正文标注。本次检索范围覆盖四篇论文全文、其相互引用与共同引用系;未做独立文献数据库检索,商业扫描器(Snyk/ESET 等)对 Pretext 式攻击的耐受性在论文中亦自认未测——此为已知证据缺口。
综合判断与未决问题
多研究共同支持的机制:(1) skill 生态的信任失败是结构性的——内容审计(无论静态规则还是 LLM 语义判断)在原理上可被系统性绕过,CoordPoison(审计粒度)、Pretext(审计能力)、TrustProbe(验证边界缺失)从三个独立方向收敛于此;(2) 运行时证据锚定的防御显著优于内容级防御——ActionGuard 的跨注入类型稳定性与 Pretext Mode B 的 FP 悖论互为反面印证。
仍属推测的部分:ActionGuard 对 CoordPoison 式跨 skill 协同攻击的防御力未被直接评估(提取清单评审同样指出这一点)——CoordPoison 的证据链藏在环境工件而非 skill 文本中,ActionGuard 的脚本预检与请求相关性检查理论上能拦截大部分载荷执行,但借口伪造的环境状态是否会诱导 Reviewer 误判 ALLOW,是四篇留下的最关键开放问题。
适用边界:CoordPoison 的 ASR 在 Claude-Sonnet-4.6 上降至 44%(对齐较强模型部分抵抗);Pretext 未测闭源商业扫描器;TrustProbe 的 11 个 agent 均为开源框架,闭源产品(如官方 Claude Code)未在列;ActionGuard 仅在 OpenClaw+单目标模型+单基准上验证。低 ASR 数字的解读都应带着这些边界条件。
七、必要知识反推
假设让一个零背景的人复现这四项工作,最少需要哪些知识?
领域知识层
- Agent/Skill 机制的第一手理解:SKILL.md 的 frontmatter 结构、渐进式披露(progressive disclosure)加载、框架如何把 skill 列入系统提示。CoordPoison 的资格审查(提取「SG 写→SS 读」的真实依赖)必须懂得解读沙箱执行轨迹;TrustProbe 的 sink 清单必须读懂每个框架的执行管线;ActionGuard 必须知道 OpenClaw 有 before_tool_call 钩子可用——不懂框架的扩展点,就找不到攻击面和拦截点。
- 供应链威胁模型传统:恶意依赖(npm/PyPI 投毒)的 confused deputy 模式。TrustProbe 明确把 skill 类比为软件包供应链攻击的自然延伸,没有这个传统就不会想到用污点分析做 skill 审计。
方法论知识层
- 程序分析方法族:调用图构建、AST 遍历、动态污点分析、定向灰盒模糊测试(AFL 系的反馈调度思想)。TrustProbe 是这些经典方法的 LLM 化改造——种子生成、语义评分、变异选择全部换上 LLM,但骨架仍是 Fuzzing。
- LLM 对抗与红队方法:迭代提示优化、LLM-as-judge、GAN 式共进化。Pretext 的持久记忆+反思器是 agent 记忆管理技术直接武器化。
- 安全评估的实验设计规范:ASR 必须配任务完成率(否则「全拒绝」也是满分防御);条件化指标剔除假安全信号(cASR 的动机);对照实验隔离单一变量(Steering-only 筛选、prompt 重放对照、Trace Summary 对照)。
工程知识层
- 沙箱隔离与可复现实验:全部四篇都在隔离环境跑攻击(伦理边界),CoordPoison 的 62 对基底带完整溯源(仓库+revision+干净基线轨迹);TrustProbe 的金丝雀哈希设计保证可归因可重放。
- LLM 判定的确定性补偿:执行签名做确定性 oracle、LLM judge 只做二值验证并拒绝「提到即算成功」——用工程手段对冲 LLM 判定的模糊性。
知识融合的关键节点
- RRF 二分法 = 供应链攻击思维 × agent 决策模型:把「为什么执行」从载荷中析出,需要同时理解软件供应链的职责分离与 LLM 决策对上下文正当性的依赖——CoordPoison 的核心洞察诞生于两者的交集。
- 金丝雀哈希 = 污点分析 × 密码学原语:把经典 taint tracking 的标记机制改成确定性哈希,实现了 LLM 非确定性环境下的精确归因。
- 平衡档案 = 数据库视图思想 × 信任域分离:ActionGuard 用「为审查者单独维护一份脱敏视图」的数据库工程直觉,解决了「审查者被毒文本游说」的问题。
- 配对良性对照 = 实验设计论 × 对抗博弈:Pretext 的 Mode B 若无同域良性孪生,检测器就会退化成「全标记」——对照设计的严谨性直接决定了共进化结论的有效性。
八、论文中可以提取的通用性灵感
灵感一:把对抗性分解边界从「内容」移到「关系」
- 核心思想:当防御者审查的是对象、而风险存在于对象间关系时,任何以单对象为单位的审计都会系统性失明。
- 论文证据:CoordPoison 中 Grounding skill(写借口)与 Steering skill(存载荷)单独审计全部无害,ASR 76.19%;Steering-only 对照组全失败证明恶意纯粹来自协同。
- 推广场景:MCP 工具链的组合滥用审计;微服务架构中「单服务合规、组合越权」的权限复核;多文档 RAG 系统中「各文档无害、拼接有害」的内容安全;插件生态的跨插件数据流分析;法规科技中的关联交易识别。
灵感二:知道规则的攻击者 vs 不知道自己会被学习的防御者——共进化中 FP 是隐藏成本
- 核心思想:对抗性环境中,「防御方指标改善」必须同时审查其代价侧指标,否则改善可能是保守化的假象。
- 论文证据:Pretext Mode B 中 gpt-oss 检测器把 ASR 压到 31%,但 FP 率 62%、策略覆盖率仅 0.33——检测器只是学会了「见啥拦啥」。
- 推广场景:风控系统调参时的误杀率监控;垃圾邮件过滤的 precision-recall 权衡治理;内容审核的申诉率作为核心 KPI;异常检测的告警疲劳度量;任何「安全指标与效用指标必须成对汇报」的评估规范设计。
灵感三:双证据分离——「可控」与「致害」是两个独立命题
- 核心思想:把复合命题拆成可独立验证的子命题分别取证,能把开放性判断变成封闭性验证,把精度从 1.5% 拉到 100%。
- 论文证据:TrustProbe 的 oracle 要求金丝雀出现(控制)与危害后果(致害)分别成立才算漏洞;LLMSmith 把可达性当漏洞,FP 率 98.5%。
- 推广场景:自动化漏洞报告的去噪(可达 ≠ 可利用);医疗诊断的「标志物存在」与「功能损伤」双确认;金融审计的「流程存在」与「资金实际流出」双查;自动驾驶测试的场景覆盖与故障后果分离评分;LLM agent 评测中「会说」与「会做」的分离测量。
灵感四:信任锚点必须放在攻击者不可写的介质上
- 核心思想:审查者读什么决定了它能被什么污染——防御上下文与被审查内容的信息隔离,比审查者更聪明更重要。
- 论文证据:ActionGuard 的 Reviewer 永不接触原始 skill 文本,仅凭用户请求+独立档案+运行时证据判断,8B 小模型也能把 ASR 压到 9.3% 以下且跨模型稳定。
- 推广场景:智能合约审计的独立状态源;邮件安全的「显示名与实际地址分离」原则的制度化版本;多 agent 系统中裁判 agent 的信息膳食管理;人类组织里的利益冲突回避制度(审查者不得接受被审方陈述)——这是古老的程序正义原则在 agent 架构中的重现。
灵感五:递送通道本身是安全属性——同一内容经不同通道投递,危害可差 3 倍
- 核心思想:内容不变、通道改变,信任语义就改变——通道设计是第一等的安全设计对象,而非只是传输问题。
- 论文证据:TrustProbe 中同一 skill 正文以安装 skill 投递可复现 104 个漏洞,改为直接 prompt 仅复现 33 个;框架的「列为应遵循指导」语义是放大器。
- 推广场景:MCP server 返回内容 vs 用户输入的信任分级;企业知识库「官方文档」标记的滥用风险;浏览器 Same-Origin 策略思想在 agent 上下文管理中的迁移;App Store 签名机制对 agent skill 市场的启示;anycast 信息源的可信传播路径设计。
附录:四篇论文的速查对照表
| 维度 | CoordPoison | Pretext | TrustProbe | ActionGuard |
|---|---|---|---|---|
| 角色 | 攻(协同投毒) | 攻(检测器逃逸) | 测(信任链挖掘) | 防(运行时授权) |
| 核心机制 | 借口/执行解耦到双 skill | 白盒迭代+跨代记忆 | 污点分析+定向模糊+双证据 | 上下文分离+fail-closed |
| 关键数字 | ASR 76.19% / 迁移 96.88% / cASR 100%(跨生命周期) | 冻结检测器 ASR 96.7% / 共进化 FP 62% | 104 漏洞 / $2.19 / 25.1% 真实触发 | ASR 29.05%→8.65% / TSR 90.38% |
| 击中的假设 | 孤立审计看全恶意语义 | 检测器读得出意图 | 框架有验证边界 | 防御必须理解 skill 内容 |
| 留下的开放问题 | 组合感知防御 | 商业扫描器耐受性 | 闭源框架测量 | 对协同攻击的防御力未测 |
四篇合读的元结论:Skill 生态在 2026 年 9 月完成了自己的「安全成人礼」——从「有没有恶意 skill」的经验问题,变成了「信任如何在用户、agent、第三方之间正确分配」的架构问题。 下一轮竞赛的赛场已经明确:不在安装前的扫描器里,而在执行瞬间的授权边界上。