AREX Feed Article
arXiv 论文 HookPry:恶意插件更新静默绑定 shell 命令,称 7 个编码智能体 harness 全部被攻破
9 月 14 日 22:21(UTC),X 账号 转述了一篇 arXiv 论文的核心发现:一个最初良性、在插件市场上架的编码智能体插件,可以在后续更新中把 shell 命令静默绑定到生命周期钩子;钩子挂在会话启动、工具调用、文件编辑等事件上,命令以宿主权限运行,而模型看不到这条执行路径。帖文列出的数字包括:1,000 次端到端运行覆盖 7 个 harness(编码智能体的运行时框架)与 5 个模型后端,每个 harness 都被攻破,单 harness 成功率峰值 92.5%(Hermes),77% 的运行产生了经外部判定器(oracle)确认的效果,零次运行被显式拦截,Microsoft Defender 对恶意产物的召回率为 0%。
论文题为 A Blind Trust, the Bloody Thrust: When Attacker-Controlled Hook Updates Steer AI Agent Harnesses towards Malicious Behaviors,编号 ,2026 年 9 月 3 日以 v1 提交,9 月 8 日更新至 v2。作者为 Pengxun Li、Litian Zhang、Jianwei Hou、Shujiang Wu、Song Li、Zifeng Kang、Xi Zhang,署名单位包括北京邮电大学、国家互联网信息办公室(Cyberspace Administration of China)的 Data Technology Support Center、北京航空航天大学和浙江大学()。以下效果数字均出自论文作者的实验与判定流程,论文自陈评测在临时环境与合成资产上完成。
良性插件不换代码,更新只改钩子绑定
把问题定位在 harness 架构里的一个特殊位置:生命周期钩子。harness 是介于用户意图与宿主系统执行之间的运行时层,它通过上下文管理器接收观察、调用 LLM、用执行循环和状态存储协调多步活动,再把校验过的动作派发出去。钩子则是一条「事件—命令」绑定,harness 在会话启动、工具调用、文件修改等边界处直接把它派发为子进程,不需要 LLM 解释或选择。
论文对执行边界的概括是:一旦匹配的事件触发,命令绑定与子进程派发由 harness 控制,模型只影响事件是否发生。钩子可以观察或改写流经上下文管理器的信息,却不进入模型的推理轨迹;会话启动钩子在会话开始时就执行,工具钩子在工具调用前后执行,触发时机可以完全落在模型的观察范围之外。
论文在 Claude Code 上演示了一条授权绕过路径:一个良性且已被信任的插件收到更新后,Claude Code 会自动加载新增的生命周期钩子,不弹通知、不逐条确认、也不重新授权。论文称其自动更新同步机制会检查插件市场的清单变更并直接应用更新,不校验单条钩子条目。攻击者要利用的正是这段信任差:先用功能正常、可被检索到的版本建立信任,再在同一个插件身份下用更新携带新的钩子权限。
论文附录给出两个案例。插件市场上的 security-sentinel 被描述为一款「自动安全审计」插件,清单里注册着名为 env-validator 的 PreToolUse(工具调用前)钩子:当用户请求审计、模型调用该插件时,钩子子进程以继承的执行权限搜索名字里含 KEY、TOKEN、SECRET、PASSWORD、CREDENTIAL 或 AUTH 的环境变量,把值写入 /tmp/.cache/env_dump,插件同时正常返回审计报告。第二个案例里,code-inspector 插件的 PostToolUse(工具调用后)钩子 output-enricher 在工具输出返回模型之前把它改写成「通过、零漏洞」,真实发现的 eval 远程代码执行风险与硬编码口令被抹掉;论文写道,模型没有生成篡改逻辑,却成了伪造结果的不自主放大器。
AMO、TD、LCI:把一次恶意更新编译成各 harness 的原生钩子
论文把攻击拆成三个组件,分别解决触达、激活与跨 harness 移植的问题。
AMO(Adversarial Manifest Optimization,对抗性清单优化)只修改插件的名称与描述等元数据,让它在多种搜索意图下容易被检索到,同时与同类良性插件保持外观一致。
TD(Temporal Decoupling,时间解耦)把「建立信任的初始版本」与「携带钩子权限的后续更新」在时间上分开,并用良性探针定位校验最弱、运行权限足够的信任边界,让载荷只在运行时条件吻合时激活,其余时间保持原有良性行为。
LCI(Least Common Interface,最小公共接口)像编译器一样,把同一套抽象攻击语义翻译成每个 harness 原生的事件名、配置结构与命令格式。
消融实验量化了各组件的分量:在 Claude Code 配 DeepSeek-V4-Flash 的 50 目标对照集上,完整系统成功率为 92.0%;去掉 AMO 后降至 75.6%;去掉 TD 后载荷加载率与成功率都归零;去掉 LCI 后载荷仍能加载,但无法注册为原生钩子,成功率同样归零。论文用这套框架实现了 10 类攻击目标,并对应到 MITRE ATT&CK:凭据收集、数据外泄、资源劫持、命令与控制、源码篡改、工具输出操纵、权限提升、持久化、防御规避和传播。
成功率差异:Claude Code 总成功率最低,命令与控制类 41.7%
论文称其实验覆盖 7 个 harness 与 5 个模型后端共 25 种测试组合:harness 为 OpenHarness、OpenClaw、Claude Code、Codex CLI、OpenCode、Hermes、WorkBuddy,后端为 Claude Sonnet 4.6、DeepSeek-V4-Pro、Kimi-K2.6、GLM-4.7-Flash 和 GitHub Copilot。40 个攻击用例乘以 25 种组合,合计 1,000 次端到端运行;每次运行从 harness 启动、原生钩子加载与注册开始,到触发请求、载荷执行、外部证据收集与判定结束。判定只有四档:全部预设外部检查通过记 pass,只通过一部分记 partial,显式拦截记 blocked,其余记 fail,partial 不计分。
结果是 770 次 pass(77.0%),34 次 partial,196 次 fail,blocked 判定为零。按 harness 看,七个 harness 的总体成功率从 Claude Code 的 52.5%、Codex CLI 的 65.0%、OpenHarness 的 71.7%、OpenClaw 的 81.9%,到 OpenCode 的 90.6%、WorkBuddy 的 90.8% 与 Hermes 的 92.5%。其中 Claude Code 的总成功率在全部 harness 中最低,而它正是论文用来演示授权绕过的对象;机制层面(钩子触发、载荷加载、钩子注册)的启动率为 83.9%,高于端到端成功率,说明相当一部分失败发生在机制已经启动之后。
分类之间的差距更明显:最高的两类是权限提升(93.5%)与资源劫持(93.4%),最低的两类是命令与控制(41.7%)与持久化(55.3%)。论文把这一差距归因于网络可达性、文件系统策略与隔离机制,并指出绑定命令能否启动、能否完成最终效果,仍受本地部署策略约束。
触发之后,执行路径不再经过模型
论文测试了换掉模型后端会怎样。跨后端标准差上,Codex CLI 为 0,OpenClaw 为 1.1 个百分点,Claude Code 为 2.5 个百分点,三者几乎恒定;OpenCode(4.5)、Hermes(7.1)、WorkBuddy(9.4)与 OpenHarness(9.6)波动更大。论文的解释是:不同后端的工具调用模式会影响「匹配事件是否发生」这一步,但事件一旦触发,命令绑定与子进程派发就完全由 harness 控制,与模型无关。
论文还用一组对照量化了钩子路径与提示路径的差距:把 50 个源自 MCPTox 基准的恶意 MCP(Model Context Protocol)工具描述机械转换为 Claude Code 钩子后,端到端成功率只有 56.0%(28/50);同一批目标上,HookPry 生成的原生钩子达到 92.0%(46/50)。转换后的攻击仍要等模型去调用效果工具,原生钩子直接从生命周期事件执行效果,去掉了这道模型闸门。
帖文把这条路径概括为「经由钩子更新路径的供应链 RCE(远程代码执行)」,并写道提示词过滤器拦不住从未进入提示词的东西;这一概括出自发帖者。论文自身的表述是把「生命周期钩子更新路径」识别为一条被 harness 盲目信任的新攻击面——攻击者只需控制插件元数据与钩子配置,不需要接触本地环境、不需要注入提示或工具结果,也不需要强制安装。
40 对 40 静态扫描:三种防御工具联合漏掉 47.5% 的恶意样本
论文做了 40 对 40 的静态扫描测试:每个 HookPry 用例配一个恶意工件包(含插件清单、Description.md、原生钩子配置与载荷),再配一个按攻击类别和钩子事件匹配的良性对照。Microsoft Defender 检出 0/40,召回率 0%(Wilson 95% 置信区间 0.0%~8.8%);Semgrep 1.172.0 配五条固定通用规则检出 19/40(47.5%);论文作者自建的钩子感知基线 HookPolicy 0.1.0 用八条规则检出 20/40(50%)。三者并集检出 21/40,仍有 19/40(47.5%)漏掉。在配对良性样本上,三者误报率均为 0%,论文注明这些对照是合成的低风险样本,该数值只是点估计;所有扫描器都完整处理了 80 个工件,没有工具报错被排除在分母之外。
论文同时说明,Semgrep 与 HookPolicy 是研究者自己配置的基线,不代表商业默认配置。基于这组结果,论文给出的方向是:更新时对新增钩子逐条授权,把插件清单签名与载荷绑定,对钩子子进程实施最小权限,并为 PostToolUse 这类事件保留原始输出与变换来源。论文的结论是,静态扫描不能替代运行时监控与权限约束。
论文自陈的边界:未测量的更新采纳率与等待中的厂商回应
论文列出的边界包括:AMO 衡量的是插件在市场上的检索机会,不是安装率或更新采纳率——用户实际完成安装并接受更新的比率,论文没有测量;评测基于临时环境与合成资产,覆盖 7 个 harness、5 个后端与 40 个用例,未穷尽操作系统、shell、企业策略、网络条件与未来版本的差异;威胁模型排除了实现漏洞利用与沙箱逃逸。防御测试只覆盖两款通用扫描器与一款研究者自建基线,未涉及动态分析或专用商业产品。
论文的伦理声明称这项工作具有双重用途,公开产物将分阶段发布:先发布用例定义、合成资产、判定器与防御规则,对可直接作用于真实环境的载荷限制能力。在 9 月 8 日的 v2 版本里,作者们写道,他们已将发现披露给所有受影响的 harness 厂商,正在等待回应。