野外的Agent技能:大规模安全漏洞实证研究 Agent Skills in the Wild: An Empirical Study of Security Vulnerabilities at Scale
首个大规模研究AI Agent技能安全漏洞,发现26.1%技能存在安全隐患
前置知识
Agent Skills(智能体技能)
Agent Skills是一种模块化的能力扩展包,包含SKILL.md指令文件和可执行脚本。技能包采用渐进式披露机制:智能体首先加载轻量级元数据,然后获取完整指令,最后按需执行捆绑代码。这种架构允许智能体在不臃肿核心能力的情况下处理专门任务。主要平台如Claude Code、Codex CLI和Gemini CLI都采用这种模式,通过skills.rest和skillsmp.com等社区市场聚合第三方技能。
理解Agent Skills的架构是理解本文攻击面的基础。技能的隐式信任和最小审查机制创造了本文研究的核心安全问题。
提示注入(Prompt Injection)
提示注入是一种通过在输入中嵌入恶意指令来操纵大语言模型行为的攻击方式。在Agent Skills场景中,攻击者可以在技能指令中嵌入隐藏指令,如在代码注释、Markdown格式或不可见Unicode字符中,诱导智能体忽略安全控制或执行非预期操作。这种攻击利用了智能体对技能指令的高信任度。
本文发现提示注入是四种漏洞类别之一,虽然占比最低(0.7%),但代表了一种语义层面的攻击,传统静态分析工具无法检测。
供应链安全(Supply Chain Security)
供应链安全关注通过依赖管理、包分发和代码共享引入的安全风险。在Agent Skills生态中,技能可以捆绑未固定版本的依赖包,从远程URL动态下载并执行脚本,或包含混淆代码。这些模式使得恶意代码可以通过依赖混淆、包劫持或远程脚本注入等方式引入系统。与传统npm/PyPI包不同,技能基于任务上下文动态加载和执行,减少了人工审查机会。
供应链风险是本文发现的四大漏洞类别之一,占7.4%,且与数据泄露高度相关(81%的供应链风险技能同时存在数据泄露问题)。
静态分析(Static Analysis)
静态分析是在不执行代码的情况下检查源代码以发现安全漏洞的技术。本文使用的静态安全扫描器采用正则表达式和关键词匹配来识别危险模式,如HTTP请求到外部域名、环境变量访问、动态执行(eval、exec)、sudo调用和未固定依赖等。静态分析的优势是高召回率(91.2%),但精确度较低(71.4%),因为许多合法操作也会触发模式匹配。
静态分析是SkillScan框架的第一阶段,提供高召回率的初步筛选。本文证明传统工具(如Semgrep、Bandit)对Agent技能特有威胁(如提示注入)的召回率接近零,因此开发了专门的扫描器。
Rogan-Gladen校正
Rogan-Gladen校正是流行病学中用于从不完美检测结果估算真实患病率的标准方法。当检测工具有假阳性和假阴性时,观察到的患病率可能高估或低估真实值。校正公式为:$\hat{\pi} = \frac{P_{obs} + S_p - 1}{S_e + S_p - 1}$,其中$P_{obs}$是观察患病率,$S_e$是灵敏度(召回率),$S_p$是特异度。本文使用82.5%灵敏度和94.2%特异度,将26.1%的观察率校正为26.5%的真实估计。
理解这一校正方法有助于读者正确解读26.1%的漏洞率,并了解考虑检测器不完美后的不确定性范围(23-30%)。
研究动机
随着AI智能体框架的兴起,Agent Skills成为一种模块化能力扩展机制。然而,技能以隐式信任和最小审查的方式执行,创造了显著且未被充分描述的攻击面。2025年12月,Cato CTRL研究人员演示了一个看似良性的"GIF Creator"技能如何秘密下载并执行MedusaLocker勒索软件,利用了用户批准与实际行为之间的"同意差距"。GTG-1002网络间谍活动显示国家级行为者将Claude Code武器化,80-90%的战术操作自主运行。尽管这些风险已被识别,研究界缺乏对技能安全的系统性认识:真实世界技能中漏洞有多普遍?存在哪些类别的漏洞?某些技能类型是否风险更高?没有实证数据,社区无法建立有效的防御或制定安全标准。
本文的目标是本文旨在进行首个大规模实证研究,系统性地分析Agent Skills生态系统的安全漏洞。具体目标包括:(1)收集并分析两个主要市场(skills.rest和skillsmp.com)的42,447个技能;(2)建立基于经验的漏洞分类法,识别14种漏洞模式;(3)开发SkillScan检测框架,整合静态分析与LLM语义分类;(4)回答三个研究问题:RQ1:真实世界技能中存在哪些类型的漏洞?RQ2:这些漏洞在不同技能类别中有多普遍?RQ3:漏洞技能具有什么特征模式?通过回答这些问题,为开发者、平台维护者和研究人员提供实用发现。
与已有工作不同的是,本文的独特切入角度在于首次将研究焦点从LLM模型行为安全转向技能代码和指令安全。现有LLM安全研究主要关注越狱攻击、提示注入和对抗性输入,这些都针对模型行为。而技能漏洞代表了一种根本不同的威胁模型:智能体对技能代码和指令的隐式信任。此外,本文跨越了传统扩展生态系统(浏览器扩展、IDE插件)和包供应链安全的界限,将Agent Skills视为结合了扩展生态系统风险、包供应链风险和LLM自主决策的新型攻击面。研究还采用了严格的时间分离方法论(500技能开发分类法、300技能校准规则、200技能验证),避免循环推理。
核心方法
SkillScan采用三阶段检测框架,结合静态代码分析与基于LLM的语义分类。第一阶段是静态安全扫描器,使用正则表达式和关键词匹配识别技能源代码和指令中的语法漏洞模式,包括数据泄露(HTTP请求到外部域名、环境变量访问)、代码注入(eval、exec)、权限提升(sudo调用)和供应链风险(未固定依赖、远程脚本执行)。第二阶段是LLM-Guard集成,使用10个专门扫描器进行输入安全检查,包括提示注入检测、秘密检测、混淆检测等。第三阶段是混合LLM分类,使用Claude 3.5 Sonnet对被标记的技能进行语义评估,输出置信分数和适用的类别标签。这种设计的关键在于:广泛静态模式提供高召回率(91.2%),LLM分类提供精确度(过滤掉良性用途),最终实现86.7%精确度和82.5%召回率的平衡。
本文的核心创新在于开发了针对Agent Skills特有威胁模型的检测框架,填补了传统静态分析工具的空白。传统工具(Semgrep、Bandit)为通用应用安全设计,缺乏针对Agent特定威胁(如提示注入、技能指令操纵)的模式。初步比较表明,这些工具对指令级威胁的召回率接近零。SkillScan的创新点包括:(1)基于OWASP LLM Top 10和MITRE ATT&CK建立的14种漏洞模式分类法;(2)将静态分析与LLM语义分析结合的混合方法,静态分析负责代码级模式,LLM负责语义级模式;(3)安全保守的聚合逻辑,当静态发现与LLM分类矛盾时,要求更高的置信度(0.8)才能推翻静态结果,这减少了23%的假阴性。与已建立工具的比较显示,现有工具在提示注入检测上的召回率为0%,而SkillScan达到78.6%。
方法步骤详情
方法分为四个主要步骤。第一步是数据收集:开发专门的爬虫程序从两个主要技能市场收集技能。skills.rest通过分页API请求提取技能元数据,skillsmp.com使用字母查询前缀枚举所有索引技能。收集后进行过滤:基于内容哈希(SHA-256)去重,排除少于10行指令内容的技能,过滤非英语技能,排除404仓库(7,353个,占17.3%)。最终数据集包含31,132个唯一技能和3,574个关联脚本。第二步是技能分类:开发功能分类法,通过迭代编码对1,218个技能(3.9%)进行分层抽样,将技能分为8个功能类别。两位研究人员独立分类,讨论分歧以完善类别边界。自动分类使用关键词匹配,达到89.2%的一致率($\kappa = 0.86$)。第三步是漏洞检测:静态扫描器分析SKILL.md指令文件和所有捆绑脚本;LLM-Guard集成10个扫描器进行输入安全检查;混合LLM分类使用Claude 3.5 Sonnet评估每个漏洞维度。第四步是验证:构建200个技能的真实数据集,通过人工标注进行验证,两位安全研究人员独立标注,Cohen's $\kappa = 0.83$。
技术新颖性
本文的技术新颖性体现在多个方面。首先,建立了首个Agent Skills漏洞分类法,包含14种模式、4个类别(提示注入、数据泄露、权限提升、供应链风险),通过严格的时间分离方法论避免循环推理:分类法开发(500技能)、规则校准(300技能)和验证(200技能)使用不相交的样本。其次,开发了Agent Skills专用的静态安全扫描器,解决了传统工具对指令级威胁召回率接近零的问题。第三,设计了安全保守的聚合逻辑:当混合LLM分类确认置信度$\geq 0.6$时接受漏洞;当LLM分类与静态发现矛盾时,要求置信度$\geq 0.8$才能推翻,这种不对称阈值设计反映了安全保守原则。第四,采用逆概率加权(IPW)校正分层抽样偏差,从样本率38.7%调整为总体估计27.3%,与全数据集自动检测率26.1%对齐。第五,通过三重证据验证:LLM分类三次运行的一致性(94.5%相同裁决)、三种提示变体的测试(91.0%一致)、以及25个高置信度技能的试点动态验证(72%确认)。
实验结果
研究发现26.1%的技能(8,126个)包含至少一个潜在危险模式,涵盖14种不同的漏洞模式。数据泄露(13.3%,4,133个技能)和权限提升(11.8%,3,671个技能)最为普遍。供应链风险占7.4%(2,296个技能),提示注入占0.7%(209个技能)。5.2%的技能(1,619个)表现出高严重性模式,强烈暗示恶意意图;8.1%(2,522个)显示中等严重性模式,意图模糊;12.8%(3,985个)仅显示低严重性模式,可能反映疏忽开发实践。捆绑可执行脚本的技能漏洞率(40.6%)是指令仅技能(24.2%)的2.12倍($p < 0.001$)。超过500行的大型技能漏洞可能性高2.14倍。安全/红队技能的原始漏洞率最高(67.4%),但这混合了合法安全工具功能与实际漏洞;调整后估计约为21.4%。文档技能漏洞率最低(19.4%)。漏洞具有聚集性:44.2%的漏洞技能包含两个或更多类别的漏洞。最强关联是供应链风险→数据泄露(81%),表明具有供应链风险的技能非常频繁地同时表现出数据泄露模式。
查看结构化数据
| 任务 | 指标 | 本文 | 基线 | 提升 |
|---|---|---|---|---|
| 漏洞检测(整体) | 精确度 | 86.7% | 71.4%(仅静态分析) | +15.3个百分点 |
| 漏洞检测(整体) | 召回率 | 82.5% | 91.2%(仅静态分析) | -8.7个百分点(权衡精确度) |
| 漏洞检测(整体) | F1分数 | 84.6% | 未报告 | 综合平衡 |
| 提示注入检测 | 召回率 | 78.6% | 0%(Bandit/Semgrep/Snyk) | +78.6个百分点 |
| 数据泄露检测 | 精确度 | 91.3% | 未报告 | 最高类别精确度 |
| 数据泄露检测 | 召回率 | 86.7% | 未报告 | 最高类别召回率 |
局限与改进
本研究存在多项局限性。首先,26.1%的漏洞率混合了故意恶意代码、疏忽不安全实践和意图模糊的模式,读者应将其解读为"值得审查的模式"而非"确认的恶意技能"。框架实现86.7%精确度和82.5%召回率,假阳性来自合法安全工具的合法凭证访问,假阴性来自混淆或延迟执行攻击。安全/红队技能的混合问题(67.4%原始漏洞率中约68.3%是合法工具功能)代表了测量效度的根本限制。LLM分类器的非确定性(运行间5.5%、提示变体9.0%方差)意味着生产部署应优先使用静态模式以确保可重复性。2025年12月的快照可能不代表企业部署或未来生态系统状态。17.3%在分析前被删除的技能(404错误)可能包含不成比例的恶意内容,表明漏洞率估计可能低估了真实的攻击面。此外,研究完全依赖静态和语义分析,没有在沙箱环境中执行标记技能以确认可利用性。
独立分析的弱点
本文存在几个独立分析的弱点。首先,检测框架的召回率(82.5%)意味着约17.5%的真实漏洞被遗漏,错误分析揭示了三种逃逸模式:间接泄露(通过动态URL构造绕过模式匹配)、自然语言混淆(以无害术语描述恶意操作)和延迟执行(仅在特定条件下激活的代码)。这些代表了静态和单次分析的根本限制。其次,安全/红队技能的混合问题影响了漏洞率的解释,排除此类别后精确度从86.7%提高到90.6%,表明约一半的假阳性率(6.7个百分点)源于此。改进方向包括:(1)开发意图感知分类,区分"对攻击者危险"(合法安全工具)和"对用户危险"(恶意工具);(2)增加动态分析验证,在沙箱环境中执行高置信度标记技能以确认可利用性;(3)探索多轮交互分析,检测跨技能的组合攻击模式;(4)开发针对Agent Skills的代码签名和作者验证机制。
未来方向
作者提出了多个未来研究方向。短期平台应集成静态分析到技能发布工作流,部署检测模式作为CI/CD检查,发布安全指南。中期应实现基于能力的权限模型,要求技能在元数据中声明所需能力,运行时强制执行限制在声明范围内;实施作者验证和代码签名;建立社区审计计划。长期应追求提供强安全保证的架构变更:运行时沙箱(容器、VM或WebAssembly运行时)、行为监控(检测异常运行时行为)、形式化验证(为技能安全属性开发轻量级规范)和行业标准(多利益相关者协作确保一致的安全期望)。基于本研究成果可延伸的方向包括:纵向研究跟踪生态系统演变(漏洞率可能随平台成熟而下降或随攻击者发展逃逸技术而上升)、企业部署研究(私有技能的安全态势)、用户信任评估研究(用户如何评估技能可信度)和跨平台比较研究(不同Agent框架的安全特性)。
复现评估
本研究的可重复性评估显示良好。作者发布了标注数据集(31,132个带标签的技能)、收集管道和检测工具。开源情况方面,检测框架SkillScan和相关工具在匿名仓库中公开。数据方面,所有分析的技能通过公开市场API可访问,未绕过访问控制或违反服务条款。算力要求方面,静态分析可在标准硬件上运行,但LLM分类需要API访问(使用Claude 3.5 Sonnet,温度0)。重复预期方差:总体患病率±2-3个百分点,按类别细分±10%相对方差,LLM分类运行间5.9%、提示变体9.0%方差。校准数据使用500/300/200技能的严格时间分离,避免循环推理。验证集的200个技能由两位具有渗透测试经验的安全研究人员独立标注,Cohen's $\kappa = 0.83$表示几乎完美一致。作者还提供了完整的软件版本(skill-security-scan v1.2.0、LLM-Guard v0.3.14、Claude 3.5 Sonnet、Python 3.11.x)、LLM分类参数(温度0、最大令牌4096、确认阈值≥0.6)和数据收集细节(2025年12月、skills.rest API分页60技能/请求、skillsmp.com API字母枚举)。
论文图表
展示了威胁模型的完整流程。威胁行为者包括恶意作者、供应链攻击者和疏忽开发者。攻击向量包括恶意指令、木马脚本、依赖混淆和不安全代码。目标是Agent技能,产生安全影响包括数据泄露、凭证窃取、远程代码执行和行为操纵。最终结果是系统妥协、数据泄露、供应链攻击和信任违反。同意差距(Consent Gap)是所有攻击向量的共同使能器。
此图对理解论文至关重要,因为它清晰地展示了研究的威胁模型框架,帮助读者理解三种威胁行为者如何利用技能生态系统中的同意差距进行攻击。
展示了检测框架的完整流水线。输入阶段包括数据收集(从skills.rest和skillsmp.com爬取42,447个技能,过滤后31,132个技能和3,574个脚本)。处理阶段分为三个子阶段:静态模式匹配(分析SKILL.md和捆绑脚本)、LLM分析(LLM-Guard + Claude)和验证(专家标注200个技能)。输出阶段生成四类漏洞:提示注入、数据泄露、权限提升和供应链风险。
此图对理解论文至关重要,因为它展示了SkillScan的核心架构,帮助读者理解三阶段检测方法(静态分析→LLM-Guard→混合LLM分类)的工作流程和数据流。
水平条形图显示1,218个技能在8个功能类别中的分布。开发工具(Development Tools)最大,387个技能(31.8%);外部集成(External Integrations)234个(19.2%);系统管理(System Admin)178个(14.6%);数据分析(Data Analysis)156个(12.8%);安全/红队(Security)89个(7.3%);文档(Documentation)67个(5.5%);通信(Communication)45个(3.7%);其他(Other)62个(5.1%)。
此图对理解论文很重要,因为它展示了技能生态系统的组成,帮助读者理解不同功能类别的技能占比,这对于解读按类别分析的漏洞率(Figure 6和Table 9)至关重要。
4×4热力图显示四类漏洞之间的条件概率共现关系。矩阵是非对称的,因为基础率差异很大(PI: 209个技能 vs DE: 4,133个技能)。最强关联是供应链风险→数据泄露(81%,$p < 0.001$),表明具有供应链风险的技能非常频繁地同时表现出数据泄露模式。提示注入→数据泄露(42%)、提示注入→权限提升(31%)、数据泄露→权限提升(34%)也是显著关联。
此图对理解论文很重要,因为它揭示了漏洞的聚集性模式:44.2%的漏洞技能包含两个或更多类别的漏洞。这表明具有一个漏洞类型的技能更可能具有额外漏洞,对防御策略有重要启示。
热力图显示8个技能类别在四类漏洞中的患病率。安全/红队技能在数据泄露(42.3%)和权限提升(38.9%)方面患病率最高。系统管理技能在权限提升(29.6%)和数据泄露(31.8%)方面也较高。外部集成在供应链风险(31.7%)方面突出。文档技能在所有类别中患病率最低(提示注入3.1%、数据泄露8.4%、权限提升4.2%、供应链12.6%)。
此图对理解论文很重要,因为它直观展示了漏洞患病率在不同技能类别中的显著差异,安全/红队技能的漏洞率是文档技能的3.5倍以上,这对风险评估和资源分配有重要指导意义。