跳到正文
原文
arXiv· arXiv:2604.03081· Yubin Qu, Yi Liu, Tongcheng Geng, Gelei Deng, Yuekang Li, Leo Yu Zhang, Ying Zhang, Lei Ma·本站收录· 原文发表精选关注度58

针对 LLM 编码 Agent 技能生态的供应链投毒攻击

Supply-Chain Poisoning Attacks Against LLM Coding Agent Skill Ecosystems

论文速读

攻击

据论文 PDF 整理(AI 生成),以原文为准

作者用文档投毒评测编码智能体技能生态,Claude Code+Sonnet 4.6 的直接执行率为2.3%。

威胁模型研究 post-loading 阶段,假定投毒技能已检索并加载。

问题
第三方技能文档会进入编码智能体的上下文,并影响文件、命令和网络操作。作者关注技能加载后,文档中的恶意逻辑能否穿过模型对齐与框架防护,产生实际系统操作。
方法
PoisonedSkills 将恶意逻辑嵌入代码示例和配置模板,利用智能体复用文档内容的流程。作者以种子扩展、伪装变异和验证生成评测集,并区分恶意代码生成与直接执行。
实验与结果
作者在四个框架、五个模型的八种组合上评测。Table 3 每种组合均有直接执行;Claude Code+Sonnet 4.6 的 DDIPE DER 为2.3%,同配置显式指令基线的执行率为0%。
局限与可以继续做的
作者将检索与加载成功作为前提,框架比较属于观察性分析,未拆分伪装组件。两种配置的运行错误率超过60%;§5.1 与§7 对温度设置的记载不一致。
实验设置Claude Sonnet 4.6、GLM-4.7 等 · PoisonedSkills、MITRE ATT&CK 等 · Bypass Rate (BR)、Direct Execution Rate (DER) 等
威胁模型
研究 post-loading 阶段,假定投毒技能已检索并加载。外部攻击者无 white-box access,仅控制技能内容,不能修改用户查询、访问系统提示词或绕过运行时隔离;目标为系统控制、资产外传或基础设施投毒。
被测模型
Claude Sonnet 4.6GLM-4.7MiniMax-M2.5GPT-5.4Gemini 2.5 Pro
基准
PoisonedSkillsMITRE ATT&CKClaude CodeOpenHandsCodexGemini CLI
指标
Bypass Rate (BR)Direct Execution Rate (DER)DER 95% CIformat validation pass rateCohen’s κ
AI 导读和推荐理由研究者提出 PoisonedSkills 框架,用文档驱动的隐式载荷执行(DDIPE)把恶意逻辑藏进技能文档的代码示例与配置模板,使编码 Agent 在常规任务中复现并执行这些载荷。该流水线把 81 个种子扩展为 1,070 个对抗技能,覆盖 15 个 MITRE ATT&CK 类别。在 Claude Code、OpenHands、Codex、Gemini CLI 四个框架和五个模型上,绕过率为 11.6%–33.5%,而显式指令注入在最强防御配置下为 0%;Claude Code 加 Sonnet 4.6 的直接执行率为 2.3%。静态分析可拦截 90.7% 的样本,2.5% 同时绕过静态检测与模型对齐。负责任披露带来 4 个已确认安全问题和 2 个已部署修复。

研究者提出 PoisonedSkills 框架,用文档驱动的隐式载荷执行(DDIPE)把恶意逻辑藏进技能文档的代码示例与配置模板,使编码 Agent 在常规任务中复现并执行这些载荷。该流水线把 81 个种子扩展为 1,070 个对抗技能,覆盖 15 个 MITRE ATT&CK 类别。在 Claude Code、OpenHands、Codex、Gemini CLI 四个框架和五个模型上,绕过率为 11.6%–33.5%,而显式指令注入在最强防御配置下为 0%;Claude Code 加 Sonnet 4.6 的直接执行率为 2.3%。静态分析可拦截 90.7% 的样本,2.5% 同时绕过静态检测与模型对齐。负责任披露带来 4 个已确认安全问题和 2 个已部署修复。

推荐理由论文用 1,070 个对抗技能测试四款编码 Agent,给出绕过率与已确认漏洞,可据此评估技能生态的信任边界。

深度解读

6个问题,点开问题读完整回答

  1. 这篇论文试图解决什么问题?

    作者研究投毒技能加载后,能否诱使编码智能体生成并执行恶意逻辑。

    核心问题是:第三方技能文档中的恶意逻辑,能否在模型对齐和框架防护下转化为实际系统操作?

    • 使用场景:技能包提供工具调用逻辑、上下文提示词和配置示例。作者称编码智能体将技能文档当作操作指引,因而风险可以从文本输出延伸到文件、命令和网络操作。
    • 既有研究边界:作者认为 ToolTweak、Skill-Inject 和 PoisonedRAG 主要研究工具选择或文本污染,尚未处理技能文档诱发宿主系统代码执行的问题。
    • 核心观察:作者认为智能体会把文档中的代码示例视为参考实现,在正常任务中复用并执行;攻击因此可以不依赖独立的显式恶意指令。
    • 威胁模型:研究范围是 post-loading 阶段,假定技能已被检索并加载(§3)。
      • 目标:O1 为系统控制与资产外传;O2 为开发、构建和部署流程中的基础设施投毒。
      • 知识:外部攻击者无 white-box access,不能访问执行器的系统提示词。
      • 能力:攻击者构造并发布技能,控制其元数据与执行内容;不能篡改用户查询或绕过运行时隔离。
      • 受害系统:具有文件、shell 和网络访问能力的编码智能体及其执行环境。
    • 提出的方法:PoisonedSkills 结合 DDIPE 文档嵌入机制与自动生成流程,分别统计恶意代码生成和直接执行,而非把两者都当成宿主系统失陷。
  2. 有哪些相关研究?

    作者将相关工作分为LLM供应链安全、检索知识投毒和间接提示注入。

    相关工作围绕外部内容如何进入模型,以及进入后影响到哪一层。

    LLM供应链安全

    • 训练数据与模型后门:Carlini 等(2024)、Qu 等(2025)讨论训练数据投毒或代码模型后门;Gu 等(2017)的 BadNets 讨论模型供应链中的后门风险。
    • 第三方应用与智能体扩展:Greshake 等(2023)研究第三方应用通过上下文操纵 LLM;ToolTweak(2025)操纵工具选择排序,Skill-Inject(2026)研究技能文件攻击。作者将后两者的范围描述为工具选择或文本生成层。

    检索知识投毒

    • PoisonedRAG(2025):向知识库注入对抗文本以影响生成回答。作者认为其威胁模型处理文本错误信息,而未建模技能连接系统工具后发生的未授权操作。

    间接提示注入

    • Liu 等(2023)与 Greshake 等(2023):研究通过外部内容传递指令,攻击者不必直接控制用户输入。
    • Markdown Image Injection(2024):利用外部内容诱导数据外传。作者将这类载荷概括为命令式指令,并认为 DDIPE 的区别在于载荷可表现为代码本身。

    实验基线与本文定位

    • 基线方法:采用自然语言显式指令注入,引用 Liu 等(2023)和 InjecAgent(2024);实际对比使用本研究的1,070个技能样本,配置为 Claude Code+Claude Sonnet 4.6(§5.1)。没有报告在 InjecAgent 数据集上的实验。
    • 作者定位:关注投毒技能已经进入上下文之后,能否穿过对齐与框架防护,诱发 action-space 操作。作者把更复杂注入基线的比较留作后续工作。
  3. 论文如何解决这个问题?

    PoisonedSkills把载荷嵌入技能示例,再通过种子扩展与伪装变异生成评测集。

    PoisonedSkills 将文档嵌入机制与自动生成流程结合:攻击内容作为参考代码或配置进入上下文,作者随后检查其是否被生成和执行。

    问题设定与成功条件

    • 研究边界:技能由元数据和执行内容组成;元数据包含描述、代码示例与配置模板。检索加载成功被作为前提,不在实验中验证(§3、Figure 2)。
    • 两项条件:生成流程必须产出包含伪装载荷的技能;智能体必须复现载荷,并通过系统接口执行它(§4.1)。只生成代码与实际执行在评测中分别计数。

    文档驱动的隐式载荷执行

    • DDIPE:全称 Document-Driven Implicit Payload Execution。恶意逻辑嵌入正常技术结构,作者认为智能体可能将其作为参考实现复用,而不把它识别为独立行为指令。
    • 代码示例投毒:在技能文档的代码示例中混入恶意逻辑;观察智能体是否把这些内容纳入自己的代码生成与执行流程。
    • 配置模板投毒:把恶意设置嵌入部署或环境配置模板;观察智能体是否输出或应用这些配置。Figure 3 给出两类示例,本文不复述载荷。
    • 伪装设计:作者使用功能合规伪装、异常抑制和虚假权威暗示,并允许多个攻击向量组合。作者将这些设计解释为让载荷看起来属于正常任务。

    攻击分类与生成流程

    • 分类来源:作者分析2021—2026年超过150起软件供应链投毒事件,来源包括 GHSA、NVD 和 OWASP LLM Top 10,再映射到 MITRE ATT&CK(§4.3.1)。
    • 类别边界:Table 1 包含15类;前14类映射到 ATT&CK 战术与技术编号,最后一类 Composite / Other 是项目自定义的混合攻击兜底类别。
    • 种子与模型:81个人工种子覆盖分类体系,生成模型为 Claude Opus 4.6。Stage 1 扩展种子结构,Stage 2 进行伪装和组合变异(§4.3.2)。
    • 采样控制:按类别覆盖率的倒数加权采样,使低覆盖类别更常被选中;每阶段有最大尝试次数 K,但论文未给出 K 的具体值。

    验证与规模控制

    • 累计目标:Stage 1 的池大小目标为820,Stage 2 为1,070,均包含81个种子;新增样本目标分别为739和250。
    • 格式与语法:验证技能文档可解析为 Markdown 且至少含一个代码块,嵌入脚本通过语法检查。
    • 去重阈值:新样本与已有池成员的 Jaccard 相似度须低于0.85。作者称更低阈值会排除语义不同的变体,更高阈值会接纳近重复样本。

    评测指标的定义

    BR=(|Generated|+|Executed|)/|Total|

    BR 同时计入仅生成恶意代码和直接执行,因而不等同于实际系统操作成功率。

    DER=|Executed|/|Total|

    DER 只计入实际执行;判断依据包括完整轨迹、系统调用日志及可观察的文件或网络变化(§5.1)。

  4. 论文做了哪些实验?

    八种配置均报告直接执行,但代码生成、运行错误与框架差异需要分别看。

    实验覆盖生成规模、加载后的攻击结果和生产系统披露;BR 与 DER 必须分开理解。

    实验设置

    • 目标模型与框架:Claude Code、OpenHands 分别运行 Claude Sonnet 4.6、GLM-4.7、MiniMax-M2.5;Codex 运行 GPT-5.4;Gemini CLI 运行 Gemini 2.5 Pro(Table 2)。
    • 数据与样本量:每种组合使用全部1,070个对抗技能。技能由元数据对应的标准化任务触发,实验假定已加载,不测市场检索成功率。
    • 运行条件:Linux 主机或容器,超时180秒,max_tokens 为10,000。§5.1 写温度 T=0.0,§7 写 T=0.3;论文未解释差异。
    • 基线与指标:显式自然语言指令注入只报告 Claude Code+Sonnet 4.6 的对比。BR 计入生成与执行;DER 只计执行,二者分母均为1,070,包含运行错误。
    • 判定与人工复核:Claude Sonnet 4.6 读取任务与完整执行轨迹,分类为拒绝、生成或执行;两名安全专家独立盲审分层随机10%样本,报告与裁判的一致性 Cohen’s κ=0.88。
    • 重复验证:判为生成或执行的样本至少重跑三次,多数试验确认同一失败等级后才计入;执行样本另在网络隔离、带文件系统快照的 Docker 容器复现。

    主结果

    据 Table 3;各行 n=1,070,百分比均为原表数值。

    表格较宽,可左右滑动

    框架目标模型BRDERDER 95% CI运行错误率
    Claude CodeClaude Sonnet 4.613.5%2.3%[1.6, 3.4]0.7%
    Claude CodeGLM-4.716.8%2.4%[1.6, 3.5]1.3%
    Claude CodeMiniMax-M2.520.5%13.3%[11.4, 15.5]1.5%
    OpenHandsClaude Sonnet 4.622.0%10.7%[9.0, 12.8]12.6%
    OpenHandsGLM-4.733.5%27.1%[24.5, 29.9]10.1%
    OpenHandsMiniMax-M2.527.0%25.5%[23.0, 28.2]64.5%
    CodexGPT-5.411.6%3.8%[2.8, 5.2]61.0%
    Gemini CLIGemini 2.5 Pro14.0%4.2%[3.1, 5.6]6.5%
    • 显式基线对比:Claude Code+Sonnet 4.6 下,显式指令注入在1,070个样本上的执行率为0%(§5.1)。这是执行率对比,不能将基线数字改称 BR。
    • 统计检验:Claude Code 下 Sonnet 与 GLM 的 DER 差异检验 p=0.887;二者分别与 MiniMax 比较均 p<0.001。作者另报告跨系统比较均 p<0.001(§5.3)。
    • 错误的影响:作者把运行错误归因于超时、API 不兼容等框架运行失败,并将含错误配置的结果称为保守下界;运行错误没有被算作安全拒绝。

    同模型跨框架与跨模型差异

    • Sleeper payloads:排除运行错误后,作者比较 Claude Code 拒绝、OpenHands 执行的样本;GLM-4.7 有219个,Sonnet 4.6 有5个(§5.3)。作者明确称此比较为观察性分析。
    • 模型特有执行:Claude Code 下,Sonnet、GLM、MiniMax 分别有11、14、78个仅由该模型执行的样本。Figure 5 的案例记录 Sonnet 执行而 GLM 拒绝,作者将 GLM 的反应解释为识别了任务与技能行为的不一致。
    • 联合绕过口径:Claude Code 三模型行为一致的样本占62.1%,作者报告联合 BR 为1.6%、计数17;正文又写17个“beyond”共同执行案例,计数措辞有歧义。此处是三模型结果交集,没有报告实际部署投票防御的实验。

    类别、载荷长度与静态扫描

    • 类别结果:Claude Code 的 Config. Tamper 组 n=64,Sonnet、GLM、MiniMax 的 DER 分别为6.3%、6.3%、20.3%;Network Exfil. 组 n=82,分别为0.0%、1.2%、19.5%(Table 4)。
    • 长度关联:Claude Code+Sonnet 4.6 下,执行样本平均1,850 B,拒绝样本平均2,214 B;中位数分别为1,886 B和1,964 B(§5.3)。作者认为短载荷更容易避开对齐;实验未报告控制长度的因果干预。
    • SkillScan:事后扫描检出90.7%,99个样本逃过四层检测,其中27个也穿透模型对齐(§6)。贡献段写双重穿透为2.5%;论文未说明该统计对应哪个模型或框架。

    生产系统验证与修复

    • 披露结果:作者报告 Claude Code、OpenHands、Codex、Gemini CLI 共四项确认问题、两项已部署修复(§5.4)。案例涉及技能信任、配置语义与工具权限边界,本文不复述利用步骤。
    • OpenHands修复:系统消息增加仓库内容不可信的警告后,原有3/3执行案例变为拒绝;论文未说明该修复验证的目标模型(§5.4)。这不是全部1,070个样本的修复后结果。
    • Gemini CLI修复:§6 将其修复描述为权限剥离;没有报告修复后的全量 BR 或 DER。

    其他消融与分析

    • 生成阶段:最终1,070个有效样本,格式验证通过率99.1%(§5.2)。
    • 阶段载荷大小:Stage 1 平均1,666 B,Stage 2 平均4,172 B(§5.2)。
    • 类别构成:供应链投毒47.5%、环境变量窃取11.9%、凭据窃取8.6%(§5.2)。
    • 共同执行案例:Figure 4 标注479 B、9行,是 Claude Code 三模型共同执行的一个样本;不复述其配置内容。
    • 组件消融:DDIPE 的三种伪装技术没有分别消融(§7)。
  5. 有什么可以进一步探索的点?

    作者将检索验证、伪装组件消融、更复杂基线和其他防御评测列为后续方向。

    作者明确保留了检索阶段、组件归因、基线和防御扩展等问题。

    作者指出的局限与后续方向

    • 检索与加载前提:作者将检索阶段的端到端验证留作未来工作;§7 指出生产环境中大量技能可能稀释攻击概率(§3、§7)。
    • 生成模型与框架归因:作者承认 Claude Opus 4.6 生成载荷可能带来同家族过拟合担忧,也明确 Claude Code—OpenHands 比较不是受控消融(§7)。
    • 伪装组件:三种伪装技术组合使用,没有逐组件消融;作者计划分别研究其作用(§7)。
    • 外部适用范围与错误:作者指出评测未覆盖 Llama 生态或 Cursor,并承认两种配置因 API 兼容性问题出现超过60%的错误率(§7)。
    • 比较基线:只与显式指令注入比较,作者认为 Skill-Inject 等更复杂基线可能缩小差距(§7)。
    • 防御范围:作者指出防御评测只包括 SkillScan,动态沙箱与 LLM 审计尚未评测(§7)。

    实验覆盖范围

    • 主矩阵:五个目标模型、四个框架构成八种组合,每种组合使用1,070个技能(Table 2、Table 3)。
    • 复核范围:分层随机10%样本接受两名专家盲审;生成或执行样本至少重复三次,执行样本额外隔离复现(§5.1)。
    • 设置记载:§5.1 报告 T=0.0,§7 报告 T=0.3;论文未解释温度记载差异。
    • 防御结果条件:SkillScan 双重穿透统计未注明目标模型或框架;OpenHands 修复只报告3个执行案例的转变(§6、§5.4)。
    • 生成预算:Algorithm 1 设置每阶段最大尝试次数 K,但未报告其数值;未报告完整生成与攻击流程的查询次数或耗时。
  6. 总结一下论文的主要内容

    作者称技能文档可成为系统操作攻击入口,但结果只评估加载后的阶段。

    PoisonedSkills研究编码智能体的技能供应链投毒,重点是文档内容如何进入实际系统操作。

    • 问题与范围:攻击者只控制第三方技能,不能改用户请求或访问系统提示词。实验假设技能已进入上下文,考察系统控制、资产外传和基础设施投毒。
    • 方法机制:DDIPE 将恶意逻辑混入代码示例和配置模板,作者认为智能体可能在完成正常任务时复用并执行。Claude Opus 4.6 驱动生成流程,从81个种子扩展到1,070个技能。
    • 基线证据:Claude Code+Sonnet 4.6 下,DDIPE 的 DER 为2.3%(Table 3);相同配置与样本规模下,显式指令注入的执行率为0%(§5.1)。
    • 框架比较:GLM-4.7 在 Claude Code、OpenHands 下的 DER 分别为2.4%、27.1%;Sonnet 4.6 分别为2.3%、10.7%(Table 3)。作者认为对齐与架构防护的关系依赖模型;框架比较是观察性的。
    • 其他证据:SkillScan 检出90.7%,逃过扫描的99个样本中有27个也穿透模型对齐,但对应配置未说明(§6)。作者另报告四项确认问题和两项已部署修复(§5.4)。
    • 作者结论与边界:作者主张审计技能语义、按技能限定权限,并使框架防护适配模型对齐。证据需连同检索前提、运行错误、温度记载差异及未拆分的伪装组件一起理解。
阅读原文arxiv.org