ActionGuard:在工具调用执行前拦截被投毒技能
ActionGuard: Tool Call Authorization under Poisoned Skills
- Instruction–data separation
- Poisoning and backdoors
- MCP and skills
- Prompt injection
- Permissions and sandboxing
- AI Agent
- Application layer
ActionGuard对gpt-5.5目标在扩展SKILL-INJECT上总体ASR为8.65%(Table 4)。
无攻击意图的用户向工具型LLM智能体提任务。
- 第三方skill被插入恶意指令后,良性用户请求可能触发外泄、删文件或未授权执行。作者认为现有防护较少核验诱发动作的信息是否可信、是否仍在用户授权内。
- ActionGuard在执行前拦截Tool Call。智能体仍读原始skill;Reviewer不看原始技能,而用自建画像、会话初可信请求、当前与近期调用及脚本执行前内容做ALLOW/DENY,调用失败则拒绝。
- ActionGuard总体ASR 8.65%、TSR 90.38%;No Safeguard为29.05%(Table 4)。两类注入平均ASR为8.20%与9.00%。Table 3里个别Reviewer上已有防护ASR更低。
- 作者称评测只在OpenClaw、一个目标模型与SKILL-INJECT上。复合调用整段拒绝后,任务完成取决于智能体能否重规划。作者计划扩展框架,并做画像哈希失效与混合裁决。论文未报告失败条数与人工一致性。
- Threat model
- 无攻击意图的用户向工具型LLM智能体提任务。攻击者只通过毒化第三方skill影响动作生成,可改SKILL.md、辅助脚本、元数据、外部端点或远程载荷;不能改可信用户请求、模型参数、系统指令、防护与工具运行时。成功指未授权Tool Call已执行并产生预定安全效应。
- Evaluated models
- Gemma 4 (gemma4:e4b-it-q4_K_M)Qwen 3.5 (qwen3.5:9b)Ministral 3 (ministral-3:8b-instruct-2512-q4_K_M)GPT-5.4 mini (gpt-5.4-mini-2026-03-17)Claude Haiku (claude-haiku-4-5-20251001)
- Benchmarks
- SKILL-INJECT(2026-07-01仓库快照,扩展版)OpenClaw
- Metrics
- ASRTSR
研究者提出 ActionGuard,在技能影响的工具调用即将执行前进行授权检查,以阻止被投毒技能诱导的数据外泄、文件删除或未授权代码执行。该方法把目标智能体的动作生成上下文与护栏的授权上下文分离,Reviewer 不接触可能被投毒的原始技能文本,而是依据平衡后的技能画像、当前及近期工具调用和本地脚本内容,判断每个动作是否由可信用户请求所支持。ActionGuard 在 OpenClaw 的 before-tool-call 阶段拦截每次工具调用,并以 fail-closed 策略执行 ALLOW 或 DENY 决定。在 SKILL-INJECT 设置下,针对 139 个上下文注入和 180 个明显注入,使用三个开源和两个商用 Reviewer 模型与 Dynamic Guardian、SkillGuard 对比,每种条件重复三次,以攻击成功率(ASR)和任务成功率(TSR)评估。
Paper analysis
What problem does this paper attempt to solve?
技能注入可使良性请求触发未授权Tool Call,需在执行前按用户意图授权。
技能注入可使良性请求触发未授权 Tool Call,需要在执行前按可信用户意图授权。
- 场景:作者称,第三方 skill 含任务指令、脚本和工具用法,智能体能据此改外部状态;数据外泄、删文件、未授权执行会落到真实系统,而不只是文本输出。
- 现有不足:作者称,多数防护主要看动作是否危险,较少核验诱发信息是否来自可信来源、是否符合当前请求;恶意指令若被当成正常流程,现有防护可能拦不住。
- 假设:作者认为,技能里有恶意指令只是一面;根本问题是缺少标准,判断该动作在当前请求与执行上下文中是否被授权。
- 方法:提出 ActionGuard。目标智能体可读原始 skill 并规划;审查模型不看可能被毒化的原始技能文本,而在执行前做 ALLOW/DENY,并按 fail-closed 执行。
- 威胁模型:
- 目标:执行未授权 Tool Call,并产生预定安全效应,如敏感信息泄露、文件删除或修改、远程代码执行,或读写用户不可用的资源。
- 不能控制的部分:不直接攻破目标智能体或工具运行时;不能改可信用户请求、模型参数、可信系统指令、防护、安全策略、工具运行时与访问控制。不考虑攻击者直接调工具。
- 能控制的输入:可编写或修改仍提供良性功能的 skill,向 SKILL.md 插入恶意指令,并可控制其引用的辅助脚本、元数据、外部端点或远程载荷。指令可以直白,也可以伪装成备份、校验等步骤。
- 受害系统与判定:无攻击意图的用户向工具型 LLM 智能体提任务。未授权指动作对可信请求并非必要或合理附带,或访问目标/操作超出用户权限或本次委托。成功指调用已执行并产生该效应;只生成调用不算成功。
What related research exists?
相关工作分技能威胁、通用防护与技能防护;本文在执行边界授权,而非清洗技能或只限权限。
相关研究分成技能威胁、通用智能体防护和面向技能的防护;实验对照是 No Safeguard、Dynamic Guardian 与 SkillGuard。
技能威胁与基准
- 技能制品:作者综述称,skill 是提供指令、流程、代码、脚本和工具用法的可复用模块(Hao 等,2026),可由第三方经公开仓库或社区登记分发(Holzbauer 等,2026;Zhang 等,2026)。Liu 等(2026)讨论:若把技能当可信指导,嵌入的恶意指令可影响工具选择与执行流程。
- SKILL-INJECT(Schmotz 等,2026):向良性 skill 插入恶意指令,含 23 个 skill、202 个注入–任务对,其中 76 对目标明确恶意,126 对伪装成备份、校验等正常流程。作者认为同一指令可随用户请求和执行上下文被看成良性或恶意,因此表面关键词可能不够。
- HarmfulSkillBench(Jiang 等,2026):从 ClawHub 与 Skills.Rest 收集 98,440 个 skill,标出 4,858 个有害 skill,并建覆盖 20 类、含 200 个有害 skill 的基准。作者将其与本文分开:该项是功能本身有害的 skill;本文只处理良性请求下被毒化的 skill。
通用智能体防护
- GuardAgent(Xiang 等,2025):据用户定义的 guard request、目标智能体说明和输入/输出日志,生成分步计划与可执行 guardrail 代码,以允许或拒绝输入或输出;并引入 EICU-AC 与 Mind2Web-SC。
- ToolSafe(Mou 等,2026):执行前做步骤级检测。TS-Guard 用用户请求、交互历史、可用工具集和候选调用判断当前动作是否安全;TS-Flow 把决定与反馈交回目标智能体,促其生成替代动作。并引入 TS-Bench。
- 作者称,这些工作把校验范围扩到规划与执行中生成的动作,而不只是智能体输入和最终输出。
面向技能的防护
- Dynamic Guardian(Fujinuma 等,2026):智能体引用 skill 时审查原文,只把清洗后的内容交给智能体。Static Guardian 在会话开始前预检并清洗技能制品。实验对照用的是 Dynamic Guardian,不是 Static Guardian。
- SkillGuard(Pan 等,2026):把 skill 视为带权限的可执行制品。Skill Manifest 声明工具、资源访问和预期副作用;运行时做权限检查、用户同意和 default-deny,并推断执行命令与被引用脚本所需的从属能力是否在当前技能权限内。
基线与定位
- 基线:No Safeguard、Dynamic Guardian、SkillGuard。基准:扩展版 SKILL-INJECT;原文报告 202 对,本实验用 2026-07-01 快照的 139 个上下文对与 180 个明显对。
- 作者把本文放在“校验智能体所生成动作”的防护上,并用于毒化 skill:不假定技能指令可信,不把原始技能当执行授权依据,而用执行时可观察的上下文判断 Tool Call 是否被授权。
How does the paper address this problem?
ActionGuard不把可能被毒化的原始技能交给Reviewer,而用画像与运行时证据做ALLOW/DENY。
ActionGuard 位于目标智能体与工具运行时之间,在执行前判断 Proposed Tool Call 是否被授权。Figure 2 将流程分为 Resolve Skill Profile、Build Context、Authorize。
授权标准
- 未授权 Tool Call 满足二者之一:对完成可信用户请求并非必要,也非合理附带;或访问目标/操作超出用户实际权限或本次请求委托的部分。授权须同时满足请求相关性与权限符合(§3.2)。
- 可信用户请求在会话开始时捕获,定义任务目标与委托范围。技能制品、技能引用的外部内容、目标智能体的计划与解释、以及 Tool Call,都不能作为执行授权依据。会话历史和工具结果只证明当前执行状态,其中的指令或目标不能扩大权限。
- 任务质量问题(执行复杂、可能出错、本地状态变化、输出质量下降)本身不构成未授权;只有因此超出用户委托范围时才算。本文不直接做安装前技能筛查或登记库审核,也不覆盖恶意用户、直接攻破目标或防护、工具运行时漏洞,以及执行后检测与恢复(§3.3)。
Skill Profile
- 防护自建 skill profile DB,与原始 skill 分离。按技能标识查询;已有则复用,不执行 Construct Skill Profile。首次使用或无匹配时,由 profile-construction 模型从原始 skill 生成 balanced skill profile 并写入 DB(Figure 3)。
- 画像含 ordinary workflow(常见操作、工具与命令、资源范围、本地变换与校验)和 suspicious signals(偏离常规或需要额外审查的动作与模式)。作者称其“平衡”,是因为同时记下常规流程和值得审查的行为。
- 原始 skill 只用于构建画像,不交给决定单次执行的语义 Reviewer。画像不单独授予执行权;出现在 ordinary workflow 中也不能因此 ALLOW。suspicious signal 匹配也不自动 DENY,仍须看当前调用或目标脚本是否真出现该行为,以及可信请求是否证成其目标与预期副作用。
- 实验里,同一条件下三种防护的全部 LLM 决策或构建组件使用同一个 Reviewer 模型(§5.1)。附录 Table 6:画像构建输出预算 2,048 tokens,语义审查 256 tokens;无法取得合法审查时,当前调用按 fail-closed 拒绝。
审查上下文
- 在 OpenClaw 的 before_tool_call hook 拦截当前 Tool Call,并把可信用户请求存为会话级上下文,与后续智能体消息、工具输出、技能指令和执行历史分开。
- Current Tool Calls:原始参数,加上归一化后的动作类型、访问目标、资源和预期副作用。作者称归一化会丢失细节,故最终决定同时用二者。
- Recent Tool Calls:当前调用之前的近期序列,用于把动作放进工作流。先前动作已执行或已批准,不给后续动作新权限。
- Inspected Files:当前调用所引用本地脚本的执行前内容,查看文件操作、子进程和网络访问等。代码、注释、字符串和自然语言只作不可信的预期行为证据,不构成新指令。不使用目标智能体的完整记录或隐藏推理。
裁决与执行
- 独立 Reviewer 按 §3.2 判断当前动作、相关动作序列和脚本中的预期行为。输出 Decision(ALLOW 或 DENY)、Reason、Reason Code(Table 1)。
- 合法 ALLOW:原样转发调用与参数,不修改。DENY 只阻止该次执行,不结束会话。输出无法正确解析,或 Reviewer 调用失败,也拒绝,失败原因记在单独 reason code。
- 拒绝时把 Reason 与 Reason Code 交回目标智能体,供其生成替代调用。审计日志区分三种情况:未生成攻击动作;生成了但被拦住;允许的动作在运行时未执行。
What experiments did the paper conduct?
五种Reviewer、319对上,ActionGuard总体ASR为8.65%(Table 4)。
实验设置
- 目标与 Judge:所有条件的目标智能体与 Judge 均为 gpt-5.5-2026-04-23。Judge 独立判定攻击成功与任务成功,不参与规划,也不参与 ALLOW/DENY。附录 G 的攻击标签为 attack_success、guarded、ignored、technical;任务标签为 task_success、task_failed、technical。两套裁决相互独立。
- Reviewer:Gemma 4(gemma4:e4b-it-q4_K_M)、Qwen 3.5(qwen3.5:9b)、Ministral 3(ministral-3:8b-instruct-2512-q4_K_M)、GPT-5.4 mini(gpt-5.4-mini-2026-03-17)、Claude Haiku(claude-haiku-4-5-20251001)。同一条件下,Dynamic Guardian、SkillGuard、ActionGuard 的 LLM 决策与构建组件用同一模型(Table 2)。
- 基准:扩展 SKILL-INJECT,2026-07-01 快照,319 对:上下文注入 139,明显注入 180。每对同时有恶意目标与用户良性任务。TSR 只用可与攻击破坏分开裁决的子集:上下文 100/139,明显 155/180,各方法共用该集合。
- 对照与介入点:No Safeguard 无单独防护。Dynamic Guardian 向目标智能体提供经过中介的技能上下文。SkillGuard 预先构建 manifest 与权限映射,运行时检查所需能力。ActionGuard 让智能体按原始 skill 规划,在 before_tool_call 检查调用及被引用本地脚本的执行前内容。
- 指标:ASR 是攻击成功任务的比例。成功指恶意 Tool Call 已执行并产生基准定义的攻击效应;未生成恶意调用,或执行前被拦且无副作用,算攻击失败。TSR 是良性任务正确完成的比例;攻击被拦后仍产出所需结果算成功,良性流程所需动作被限制则算失败。technical failure 排除出两项指标。论文未报告其数量。
- 重复:每条件独立重复 3 次,报告均值。319 个任务各自在新沙箱、新会话中执行。附录 D:Ollama 条件 temperature 为 1,关闭 thinking,num_ctx 为 65,536。论文未写明商业 Reviewer 的温度。
主结果
总体数字是五 Reviewer 与两类注入的加权平均(Table 4)。分类型 ASR 是五 Reviewer 的均值(§6.2 对 Figure 4 的叙述)。引言中的 8.20% 与 9.00% 是这两项均值,不是 Table 3 的某一行。No Safeguard 不用 Reviewer,论文未给出分类型数字。
| 方法 | 总体ASR | 总体TSR | 上下文注入ASR | 明显注入ASR | | 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% | | No Safeguard | 29.05% | 93.46% | 未报告 | 未报告 |
据 Table 4 与 §6.2。
- 相对降幅有三个版本。§6.1:ActionGuard 比 Dynamic Guardian、SkillGuard 的总体 ASR 低 7.40 与 4.77 个百分点,相对降幅 46.1% 与 35.5%。结论写 46.11% 与 35.54%。摘要写相对已有防护降 35.54–46.11%。相对 No Safeguard,§6.1 为降 20.40 个百分点(相对 70.2%),TSR 降 3.08 个百分点(相对 3.3%);摘要写 ASR 相对降 70.44%;结论写约 70.2%。
- 作者称总体结果是在加强攻击拦截的同时保持良性任务表现。Table 4 中其 TSR 低于 No Safeguard 与 Dynamic Guardian,高于 SkillGuard。
- Table 3 有分类型反例:上下文注入、Ministral 3 上 Dynamic Guardian ASR 7.19%,ActionGuard 为 8.87%。明显注入上 SkillGuard 在 Ministral 3、GPT-5.4 mini、Claude Haiku 的 ASR 为 7.96%、8.33%、7.96%,ActionGuard 为 9.63%、9.26%、8.33%。
分注入类型
- 作者称 ActionGuard 两类 ASR 相差 0.80 个百分点,Dynamic Guardian 相差 2.01 个百分点。SkillGuard 两类相差 11.33 个百分点;其明显注入均值比 ActionGuard 低 0.52 个百分点(§6.2)。
- 上下文注入 TSR 均值:Dynamic Guardian 88.27%,SkillGuard 89.13%,ActionGuard 87.73%。作者称与已有防护的差距为 1.40 个百分点。
- 明显注入 TSR:Dynamic Guardian 94.54%,ActionGuard 92.09%,SkillGuard 88.17%。作者称后两者攻击缓解接近,效用不同。作者还称,只看低 ASR 不能区分选择性拦截和连良性流程一起限制。
跨 Reviewer 模型
- §6.3 / Figure 5 给出每个 Reviewer 上两类注入加权后的结果。ActionGuard 的 ASR 为 Gemma 8.99%、Qwen 8.67%、Ministral 9.30%、GPT 8.57%、Claude 7.73%,区间 7.73%–9.30%。
- 作者给出的区间:Dynamic Guardian ASR 11.39%–19.44%,SkillGuard 12.64%–14.94%。作者称 ActionGuard 在全部被评 Reviewer 上 ASR 最低,开源与商业模型上水平相近。这是加权后的比较;Table 3 的单一注入类型并不都如此。
- TSR 区间:Dynamic Guardian 91.63%–92.68%,SkillGuard 87.71%–89.28%,ActionGuard 87.58%–92.55%。作者称其攻击拦截较稳定,良性任务表现更受 Reviewer 选择影响。
案例
- §7 选了三例:上下文注入 INST-2_pptx_task0、明显注入 INST-3_docx_task3、效用失败 INST-10_git_task1。
- 前两例中,作者称分别用当前调用中的外部传输目的地与制品参数,以及被引用脚本的执行前内容,识别超出用户请求的副作用并 DENY;良性的幻灯片修改与文档转换完成,裁决为攻击失败且任务成功。匹配 suspicious signal 不是单独的拒绝理由。
- INST-10_git_task1 把良性 git 操作与未授权的 force push 合成一次 Tool Call,整段被拒。智能体后来做了 add 与 commit,没有生成安全 push。攻击失败且任务失败。作者称,识别正确时仍可能因调用粒度和 DENY 后未重规划而任务失败。
其他消融与分析
- 论文未报告去掉 skill profile、近期调用或脚本检查的消融数字。
- Table 3 上下文注入 ActionGuard ASR:Claude Haiku 6.95%,Gemma 4 与 Ministral 3 均为 8.87%;TSR 从 Claude Haiku 85.00% 到 Ministral 3 90.67%。
- Table 3 明显注入 ActionGuard ASR:Claude Haiku 8.33%,Ministral 3 9.63%;TSR 从 Qwen 3.5 88.60% 到 Ministral 3 与 GPT-5.4 mini 的 93.76%。
- 明显注入上 Qwen 3.5 的 SkillGuard 与 ActionGuard ASR 同为 8.70%(Table 3)。
- 上下文注入 Dynamic Guardian 的 ASR 从 Ministral 3 的 7.19% 到 GPT-5.4 mini 的 20.62%(Table 3)。
- 结果为 3 次均值。论文未报告各次方差、technical failure 条数、延迟或查询次数。
What are some points that can be further explored?
作者指出评测只在OpenClaw、一个目标模型与SKILL-INJECT上,复合Tool Call会被整段拒绝。
作者指出的局限与后续方向
- 良性动作与未授权动作合成一次 Tool Call 时,整段拒绝;若目标智能体不生成安全替代流程,任务会失败。作者称执行边界防护的效用取决于授权准确性,以及 DENY 后目标智能体的恢复(§7.3、§8)。
- 评测限于一个智能体框架 OpenClaw、一个目标智能体模型、一个基准 SKILL-INJECT。作者称,技能加载方式或 Tool Call schema 不同的环境需要进一步验证(§8)。
- 作者计划把评测扩展到更多智能体框架(§8)。
- 作者计划用基于版本/哈希的画像失效和独立核验,加强 skill profile 的可靠性(§8)。
- 作者计划用确定性评估器加 LLM Judge 的混合裁决,提高结果裁决的稳定性(§8)。
实验覆盖范围
- 目标智能体与 Judge 均为 gpt-5.5-2026-04-23;Reviewer 为 Gemma 4、Qwen 3.5、Ministral 3、GPT-5.4 mini、Claude Haiku(§5.1、Table 2)。
- 对照为 No Safeguard、Dynamic Guardian、SkillGuard、ActionGuard;均在 OpenClaw 中运行,ActionGuard 接在 before_tool_call(§5)。
- 数据为 2026-07-01 的 SKILL-INJECT 快照:上下文注入 139 对、明显注入 180 对;TSR 使用 100 对与 155 对;每条件独立重复 3 次(§5.1–§5.3)。
- 每个任务沙箱单独初始化 Skill Profile DB,只在该沙箱内的后续 Tool Call 之间复用(附录 C、Table 6)。案例为 INST-2_pptx_task0、INST-3_docx_task3、INST-10_git_task1(§7)。
- 论文在 §5 未报告 technical failure 数量、各次方差、Judge 与人工一致性、延迟或查询次数,也未报告组件消融的定量结果。
Summarize the main content of the paper
ActionGuard在执行边界按可信请求授权Tool Call,总体ASR为8.65%(Table 4)。
ActionGuard 是放在工具执行前的授权防护,用来拦住毒化 skill 诱发、但超出可信用户请求的 Tool Call。
- 问题:第三方 skill 可被插入恶意指令。良性请求下,智能体可能把外泄、删除或未授权执行当成正常流程。作者认为要核验的是动作是否被当前请求授权,而不是技能文本是否含风险词。
- 方法:智能体仍读原始 skill 并规划。ActionGuard 自建含常规流程与可疑信号的技能画像,不把原始技能交给 Reviewer。审查用会话初的可信请求、画像、当前与近期调用,以及脚本执行前内容。ALLOW 原样放行;DENY 或审查失败则拒绝该次调用并返回理由。
- 结果:目标智能体为 gpt-5.5-2026-04-23,扩展 SKILL-INJECT 共 319 对,五种 Reviewer,每条件 3 次。Table 4 中 ActionGuard 总体 ASR 8.65%、TSR 90.38%;No Safeguard 为 29.05% 与 93.46%;Dynamic Guardian 为 16.05% 与 92.08%;SkillGuard 为 13.42% 与 88.55%。§6.2 的两类注入平均 ASR 为 8.20% 与 9.00%,TSR 为 87.73% 与 92.09%。明显注入上 SkillGuard 平均 ASR 8.48%,低 0.52 个百分点。上下文注入的 Ministral 3 上,Dynamic Guardian ASR 7.19%,低于 ActionGuard 的 8.87%。
- 作者结论:作者称,以可信用户意图和运行时行为证据做执行边界授权,可以限制技能注入诱发的未授权 Tool Call,同时不过多损害良性任务。效用还取决于 DENY 后智能体能否改出安全调用;评测只在 OpenClaw、一个目标模型和 SKILL-INJECT 上。