SkillJect:为技能型 Agent 自动生成基于技能的提示注入
SkillJect: Effectively Automating Skill-Based Prompt Injection for Skill-Enabled Agents
作者报告SkillJect在Claude Code上四后端平均ASR为80.7%,Naive为0.0%。
black-box攻击者可在分发前改写SKILL.md并加入辅助脚本,但不能控制路由、模型参数、系统提示词或安装后的执行,也不能强迫选中。
- skill安装后会被反复当作可信任务指导加载。作者称直写或手工嵌入的恶意指令常被拒绝或忽略,因而要自动生成能在选中执行时触发隐藏载荷的投毒skill。
- SkillJect把载荷藏进辅助helper脚本,并把SKILL.md改成文档开头的必做前置步骤。Attack Agent用轨迹反馈只改文档、固定载荷;实验中该角色为GPT-3.5-Turbo。
- Claude Code上Naive的ASR为0.0%,SkillJect四后端平均Overall为80.7%(Table I);OpenClaw的Overall为80.5。30个skill子集上,GPT-5.4与Claude-Opus-4.6为28.7%与29.2%。
- 作者称成功只计选中后的helper执行,未研究强迫路由;100个skill与两个平台可能盖不住全部生态和审批设置。防御只测提示词加固和现有扫描器。主表未写精炼轮数与重复次数。
- 威胁模型
- black-box攻击者可在分发前改写SKILL.md并加入辅助脚本,但不能控制路由、模型参数、系统提示词或安装后的执行,也不能强迫选中。目标是投毒skill被选中执行时,使受害智能体显式执行隐藏helper脚本。成功按轨迹级payload执行判定,不要求下游危害全部实现。
- 被测模型
- Claude-4.6-SonnetGPT-5-miniGLM-4.7MiniMax-M2.1DeepSeek-V4-flashGLM-5.1MiniMax-M2.7MiMo-V2.7GPT-5.4Claude Opus 4.6
- 基准
- ClawHub(100 agent skills)Claude CodeOpenClawSkill-Inject的Obvious Injections with Body + Script
- 指标
- ASRSNSdetection accuracy
研究者提出 SkillJect,一个针对技能型 Agent 自动生成投毒技能的提示注入框架,作者称其为该方向首个自动化框架。它通过两条通道植入载荷,产物通道把载荷藏进辅助脚本,指令通道改写 SKILL.md,将注入内容前置并把辅助脚本包装成必须执行的初始化步骤,同时给出脚本路径和示例命令。框架采用闭环多智能体流程,由 Attack Agent 生成投毒技能、Victim Agent 执行下游任务、Evaluate Agent 检查执行轨迹判断载荷是否被执行,再把反馈用于改写 SKILL.md 而保持载荷不变。在多个技能平台、后端 LLM 和攻击类别上的实验显示,其效果明显优于朴素直接注入和此前的手动技能注入攻击。
深度解读
这篇论文试图解决什么问题?
作者要自动生成能触发隐藏helper执行的投毒skill,以替代易失效的手工注入。
如何自动生成能让skill启用的代码智能体执行隐藏载荷的投毒skill。
- 场景:作者称agent skill以SKILL.md、可执行脚本和资源打包,安装后可被反复加载为任务指导,比网页、检索文档或工具输出更持久,形成供应链攻击面(引言、Fig. 1)。具体影响取决于运行时权限、沙箱、网络和用户审批。
- 现有不足:作者称公开收集的恶意skill里,嵌入指令多数被拒绝或忽略,只有小部分触发目标行为(Fig. 2标注有2.5、5.0、7.5等Attack Success,纯文本无法可靠对应到每个模型的图例)。既有演示多为手工,难以跨skill、任务和受害系统稳定激活。
- 核心观察:显式有害意图可能被安全机制拒绝;与原工作流或当前任务结合弱的指令则可能被忽略。作者因此把恶意功能与可疑措辞拆开。
- 本文提出:SkillJect用辅助脚本藏载荷、用前置诱导改写SKILL.md,并由Attack Agent、Victim Agent、Evaluate Agent按轨迹反馈迭代改写文档、固定载荷。作者称这是首个针对agent skill的自动化提示注入框架。
- 威胁模型:
- 知识:作者写明为black-box。不控制路由、模型参数、系统提示词或安全机制,安装后不能直接干预执行。
- 能力:分发前可改文档和捆绑产物;渠道包括公开skill注册表、共享仓库或可导入skill包。
- 目标与判定:投毒skill被选中并执行时,轨迹应满足对应helper被执行的谓词。成功计payload执行,不要求下游危害全部落地。
- 受害系统:任务驱动、从注册表按当前任务选skill的代码智能体;选中后载入文档,执行中可使用捆绑产物。不假设能强迫路由在无关任务上选中投毒skill。
有哪些相关研究?
相关工作多是手工skill注入或运行时提示注入;作者用自动隐藏与反馈精炼来区分。
智能体skill生态
- Anthropic的Agent Skills规范把能力包组织为SKILL.md加可选脚本与资源;Claude Code、Codex CLI、Gemini CLI采用同类按需加载的插件式能力包。
- 论文讨论工具增强智能体与代码智能体,并称公开网站、GitHub和官方集合降低了复用成本,也使已安装skill可被反复选中并当作可信扩展。
智能体中的提示注入
- 间接提示注入把指令放进网页、文档、检索段落或工具输出。Liu等研究真实LLM应用中的提示注入及朴素策略的局限;Wang等分别研究网页或工具输出对web agent的劫持,以及视觉加文本的跨模态注入。
- 论文将其与用户直接提交的越狱分开,并称既有研究多关注一次性运行时输入。相对而言,skill位于可复用的能力扩展内,作者称其持久性更强、影响更直接。
Skill安全与手工攻击
- 生态研究指出公开仓库已出现提示注入、数据外传、提权、凭据泄露和可疑执行逻辑;另一项工作称只检查skill本身会高估恶意性,仓库级上下文能提高分类稳健性。
- Schmotz等展示skill文件中的恶意指令可在执行中被信任;Skill-Inject衡量智能体对恶意skill文件的脆弱性;SkillAttack用对抗提示对良性skill做红队。论文称这些攻击主要靠手写恶意指令或预定义内容,显式意图可能被拒,弱结合指令可能被忽略。
防御与安装前审查
运行时方向包括在系统或任务提示中加安全指令、指令层级训练、结构化查询,以及基于可信控制流/数据流的能力策略;AgentDojo提供工具增强智能体的动态攻防基准。论文称它们主要针对网页、文档、检索、邮件或工具输出,对被视为可信扩展、且意图分布在文档与脚本中的skill注入,只能减弱、不能消除。
安装前扫描包括Cisco的Skill Scanner、Skill Vetter、SlowMist Skill Scanner和ClawGuard Auditor。论文称静态扫描能抓住显式恶意指令、危险命令、凭据访问或已知外传模式,但可能漏掉意图只在文档、辅助产物、仓库上下文和执行行为交互中出现的攻击。
基线与基准:Naive(Direct Injection)把恶意命令直接写入SKILL.md,不用helper、隐藏或混淆。与Skill-Inject对比时,使用其Obvious Injections with Body + Script设置,以及相同的clean skills和恶意脚本。自建数据为ClawHub上100个skill及对应任务。
作者把本文定位为用载荷隐藏、轨迹验证和反馈精炼自动生成投毒skill,而不是再做手工注入。
论文如何解决这个问题?
SkillJect把载荷藏进helper,把SKILL.md改成前置必做步骤,再按轨迹反馈改写文档。
SkillJect把投毒拆成文档诱导和产物藏载荷,再用执行轨迹只迭代改写文档、保持载荷不变。
问题设定
- skill包写作S=(d, A):d是SKILL.md,A是可选的脚本、配置等辅助产物。给定目标行为类别B,攻击者构造S'=(d', A')。
- 双通道写为d′=INJECT(d, π), A′=HIDEPAYLOAD(A)=A ∪ amB。含义是:文档插入诱导提示π,产物集追加与B对应的隐藏helper脚本。
- 成功谓词为M(τ; B)∈0,1。含义是:轨迹τ包含对该helper的显式执行则为1,否则为0。论文按此计ASR,不要求每个下游危害都实现。
- 不假设能强迫路由选中S'。只在S'属于智能体为任务t实际执行的skill集合时,追求该谓词以高概率成立。
双通道隐藏
- Artifact channel:恶意操作放在看似普通的.py或.sh helper中。论文举例为helper.sh、run.sh、tool.py。A'保留原产物并追加该脚本。
- Instruction channel:诱导放在SKILL.md最前,把helper写成必做前置或第一步,写明脚本路径并给出可执行示例命令,使其像正常初始化。
- 对齐:诱导须与隐藏脚本的行为对齐,使文档看起来连贯。作者称显式恶意内容不放在改写后的文档里。
闭环生成
- 载荷理解:Attack Agent分析新helper及其文件名,得到结构化理解,包括名义功能、输入输出、预期执行阶段和在工作流中的角色。
- 约束生成:以原文档、上述理解、行为类别B和前置约束生成初版SKILL.md。该约束把helper指令放在文档开头,以提高显著性和执行优先级。
- 反馈精炼:载荷只生成一次,之后A'固定。Victim Agent在任务批上运行投毒skill;Evaluate Agent返回是否执行,以及ignored、refused、partially triggered或incorrectly executed等诊断和证据。Attack Agent据此重写文档,直到成功或达到预算。
- 角色与提示:实验里Attack Agent是带前置约束的GPT-3.5-Turbo。论文未写明Evaluate Agent是否为某个命名LLM。附录A给出载荷理解、约束生成和反馈精炼的完整提示词;附录B给出算法。
成功判定
- 检查工具调用、命令执行、文件操作以及中间或最终输出,只判断隐藏helper是否被显式执行。
- 作者称轨迹级执行把控制从文档转到攻击者控制的可执行产物;最终影响仍取决于沙箱、文件系统权限、网络、用户审批和运行时强制。
论文做了哪些实验?
在Claude Code上,Naive的ASR为0.0%,SkillJect四后端平均Overall为80.7%。
实验设置
- 平台:主平台为Claude Code,另在OpenClaw上测跨平台。两者在沙箱Docker中执行命令和工具动作。
- 被测后端:主实验为Claude-4.6-Sonnet(表中写作Claude-Sonnet-4.6)、GPT-5-mini、GLM-4.7、MiniMax-M2.1。扩展为DeepSeek-V4-flash、GLM-5.1、MiniMax-M2.7、MiMo-V2.7、GPT-5.4、Claude Opus 4.6(表中Claude-Opus-4.6)。
- 攻击方:GPT-3.5-Turbo加前置约束生成恶意skill。论文未写明Evaluate Agent的模型名。
- 数据与行为:ClawHub上100个skill,覆盖软件开发与DevOps、数据与金融分析、内容创作与营销、研究与智能体工具四类领域。每个skill一个任务,任务要求使用对应skill并触发其正当功能;附录C写明100个任务都有instruction.md,71个含辅助工作区文件,指令14–36词、平均26.84词。四类行为为InfoDisc、PrivEsc、UnauWri、Backdoor。扩展实验从100中随机抽30个skill/任务,报告四类平均的Overall ASR。
- 指标与基线:ASR为观察到对应helper被执行的任务比例。另有SNS和扫描器detection accuracy。基线为Naive直接注入,以及Skill-Inject在Obvious Injections with Body + Script、相同clean skills和恶意脚本下的对比。论文未在主表写明精炼轮数、查询次数或重复次数。
主结果
Table I为Claude Code上SkillJect的ASR(%)。Naive在全部格子中为0.0%,表中不再重复。
表格较宽,可左右滑动
后端 InfoDisc PrivEsc UnauWri Backdoor Overall GLM-4.7 98.0% 95.0% 98.0% 98.0% 97.2% MiniMax-M2.1 95.0% 95.0% 95.0% 94.0% 94.7% GPT-5-mini 88.0% 79.0% 84.0% 84.0% 83.8% Claude-Sonnet-4.6 34.0% 55.0% 57.0% 42.0% 47.0% Average 78.8% 81.0% 83.5% 79.5% 80.7% - 作者称直接把显式恶意指令写入SKILL.md基本无效,有效注入还需要藏载荷并自动构造诱导。
- 作者称平均Overall ASR为80.7%;类别平均最高为UnauWri的83.5%,最低为InfoDisc的78.8%。
- Claude-Sonnet-4.6的Overall为47.0%,低于另外三个后端。作者称它相对更抵抗,但ASR仍非零。Table I最低单元格是该模型的InfoDisc 34.0%。
跨平台与更新模型
- OpenClaw(Table II):Naive在四个后端上均为0。SkillJect为GLM-4.7 97、MiniMax-M2.1 95、GPT-5-mini 87、Claude-Sonnet-4.6 43,Overall 80.5。该表未写百分号,也未按行为类别分列。作者称排序与Claude Code一致,效果不依赖单一脚手架。
- 更新模型(Table III):随机30个skill/任务,Naive均为0.0%。SkillJect的Overall为DeepSeek-V4-flash 95.8%、GLM-5.1 92.4%、MiniMax-M2.7 90.2%、MiMo-V2.7 74.3%、GPT-5.4 28.7%、Claude-Opus-4.6 29.2%,六模型平均68.4%。作者认为后两者下降可能来自更强的安全对齐、更谨慎的工具使用或对任务相关性的推理,并称模型缩放与更强对齐并不能完全消除该风险。
对比、迁移与跨任务
- 同脚本对比(Table V,Claude Code):Skill-Inject的Overall为32.3%,SkillJect为69.1%。分模型从40.0%到82.2%(GLM-4.7)、35.6%到80.9%(MiniMax-M2.1)、26.7%到64.4%(GPT-5-mini)、26.7%到48.9%(Claude-Sonnet-4.6)。作者称双方使用相同良性skill和恶意脚本,提升主要来自自动诱导和反馈精炼。Table IV把手工攻击、Naive、SkillJect的Overall ASR写为32.3、0.0、69.1,与Table I的80.7%不是同一设置。
- 跨模型(Table VI):在GLM-4.7上生成后不做目标特异精炼。MiniMax-M2.1的Overall为79.8%(InfoDisc 81.0%、PrivEsc 76.0%、UnauWri 77.0%、Backdoor 85.0%);GPT-5-mini为49.8%;Claude-Sonnet-4.6为35.8%。作者称相对源模型97.2%,分别下降17.4、47.4、61.4个百分点。
- 跨任务(Fig. 4,GLM-4.7):同一投毒skill在另20条LLM生成的任务指令上直接评测,不重新生成或精炼。原任务四类为98%、98%、95%、98%;跨任务为80%、72%、77%、70%(顺序为Backdoor、InfoDisc、PrivEsc、UnauWri)。作者称并未只拟合源任务,但效果仍取决于新指令是否激活注入工作流。论文未写明生成这20条指令的模型名。
防御评测
- 指令级提示(Fig. 8,GLM-4.7):要求执行前检查被引用脚本。作者称Backdoor从98%降到40%,InfoDisc从98%降到10%,PrivEsc从95%降到66%,UnauWri从98%降到77%;四类平均从97.3%降到48.3%,绝对下降49.0个百分点。Table I中同一后端Overall为97.2%,与97.3%不是同一处数字。作者称该防御能减弱但不能消除风险,PrivEsc与UnauWri在防御后仍为66%与77%。
- 扫描器(Table VII):对象是SkillJect在GLM-4.7上生成的投毒skill。detection accuracy为Cisco 63.8%、Vetter 53.1%、SlowMist 64.2%、Auditor 65.0%,Overall 61.5%。作者称漏检较多,主因是可见文档把helper写成兼容良性工作流的前置步骤,恶意操作在辅助产物中,要到执行时才变得与安全相关。论文未报告该集合的条数。
其他消融与分析
- Table VIII(GLM-4.7,Overall):完整方法97.2%;去掉载荷理解91.0%;去掉前置策略78.8%(UnauWri 78.0%、Backdoor 75.0%);去掉精炼反馈80.5%(PrivEsc从95.0%到73.0%)。
- Fig. 6:作者称五轮后GLM-4.7、MiniMax-M2.1、GPT-5-mini、Claude-Sonnet-4.6的ASR为97.2%、94.6%、83.8%、52.8%;早期轮次增益更大,之后趋于平台。图注提取中有94.26%一类标注,与正文94.6%不完全一致。
- Fig. 7的SNS(GLM-4.7,越高表示与原skill更一致,不表示安全):Naive/SkillJect为Backdoor 0.223/0.429、InfoDisc 0.318/0.415、PrivEsc 0.340/0.429、UnauWri 0.259/0.462。附录D称高SNS不意味着skill良性;评审模型名称未写明。
- Fig. 5展示两类表面形式:结构上伪装成前置小节,以及强调式初始化警告。具体注入句不转述。Fig. 2中公开恶意skill的Attack Success标注包括2.5、5.0、7.5,正文称多数被拒绝或忽略。
有什么可以进一步探索的点?
作者把成功限定为选中后的helper执行,并称生态、部署和更强防御仍可继续研究。
作者指出的局限与后续方向
- ASR衡量的是helper是否被执行,作者不声称每次执行都会在所有部署中实现全部下游后果;最终影响取决于沙箱策略、文件权限、网络、用户审批和运行时强制(Section V)。
- 评测是post-selection:投毒skill须先被路由或检索选中。作者写明未研究如何强迫路由在无关任务上选中恶意skill(Section V)。
- 基准含100个真实skill和代表性任务指令,作者称可能覆盖不了全部skill生态、智能体脚手架或部署策略(Section V)。
- 已评测多个后端LLM和两个skill平台,作者称行为仍可能随系统提示词、工具权限、沙箱配置和人在回路审批而变化(Section V)。
- 防御评测聚焦实用的提示级缓解和现有skill扫描器。作者称更强防御仍是未来工作(Section V)。结论还称未来防御应联合考虑skill文档、辅助产物、执行轨迹和运行时工具策略。
实验覆盖范围
- 主结果后端为Claude-4.6-Sonnet、GPT-5-mini、GLM-4.7、MiniMax-M2.1;平台为Claude Code与OpenClaw;行为为四类;数据为ClawHub的100个skill及一一对应的任务。
- 更新模型实验为6个后端、随机30个skill/任务,只报告四类平均的Overall ASR(Table III)。
- 攻击生成模型为GPT-3.5-Turbo。论文未在主结果表写明精炼轮数、查询次数或重复次数;Fig. 6的分析写明五轮。
- 防御包括Fig. 8的指令级提示加固,以及Table VII的四款扫描器。论文未报告扫描集合条数,也未报告SNS评审模型名称,以及跨任务指令所用LLM的名称。
- 迁移包括以GLM-4.7为源、不做目标特异精炼的跨模型评测(Table VI),以及同一skill上另20条任务指令的跨任务评测(Fig. 4)。
总结一下论文的主要内容
SkillJect用双通道和闭环精炼投毒skill;主结果平均ASR 80.7%,Naive为0.0%。
SkillJect是针对可安装agent skill的自动化提示注入框架。作者要解决的是:公开或手工放入skill的恶意指令常常被拒绝或忽略,而skill一旦安装就会被反复当作可信指导加载。
- 做法:black-box攻击者在分发前改包,安装后不能干预执行,也不能强迫路由选中。载荷放进辅助helper脚本;SKILL.md把该脚本写成文档开头的必做前置步骤,并写明路径和示例命令。GPT-3.5-Turbo担任Attack Agent,按轨迹诊断迭代改写文档,载荷保持固定。成功只看helper是否被显式执行。
- 主结果:自建数据为ClawHub的100个skill。Claude Code上Naive的ASR全为0.0%;SkillJect四后端平均Overall为80.7%,其中GLM-4.7为97.2%,Claude-Sonnet-4.6为47.0%(Table I)。OpenClaw的Overall为80.5(Table II)。
- 其他结果:与Skill-Inject使用相同良性skill和恶意脚本时,Overall从32.3%到69.1%(Table V)。随机30个skill上,GPT-5.4与Claude-Opus-4.6为28.7%与29.2%(Table III)。GLM-4.7上的指令级防御后,四类平均由作者报告的97.3%降到48.3%,PrivEsc与UnauWri仍为66%与77%。四款扫描器的Overall detection accuracy为61.5%。
- 作者结论:作者称可复用skill生态在投毒skill被选中并执行时,可以成为一个持续的攻击向量;现有提示级防御和扫描器只能部分缓解。作者建议把skill当作安全敏感的软件产物,并联合检查文档、辅助产物、轨迹和运行时工具策略。