开源项目

SkillSpector

专为AI agent技能设计的安全扫描工具,检测64种漏洞模式,覆盖提示注入、数据泄露、权限提升等16类风险。支持Git仓库、URL、目录等多种输入格式,提供两阶段分析(快速静态扫描+可选的LLM语义评估),并实时查询OSV.dev漏洞库。亮点在于针对AI agent生态的安全空白,填补了技能安装前的风险审查需求,尤其适合使用Claude Code、Codex CLI等工具的开发者。

README

SkillSpector

AI 智能体技能安全扫描器。 在安装智能体技能前检测漏洞、恶意模式和安全风险。

Python 3.12+ License: Apache 2.0

概述

AI 智能体技能(被 Claude Code、Codex CLI、Gemini CLI 等使用)在执行时带有隐式信任且缺乏审核。研究表明,26.1% 的技能包含漏洞,5.2% 的技能显示出恶意意图。

SkillSpector 帮助你回答:“这个技能安装安全吗?”

文档

  • 开发指南 — 架构、包布局以及如何扩展分析器流水线。

特性

  • 多格式输入:扫描 Git 仓库、URL、zip 文件、目录或单个文件
  • 16 个类别共 64 种漏洞模式:提示注入(prompt injection)、数据外泄(data exfiltration)、权限提升(privilege escalation)、供应链(supply chain)、过度代理(excessive agency)、输出处理(output handling)、系统提示泄露(system prompt leakage)、内存投毒(memory poisoning)、工具滥用(tool misuse)、恶意智能体(rogue agent)、触发器滥用(trigger abuse)、危险代码(AST)、污点追踪(taint tracking)、YARA 签名(YARA signatures)、MCP 最小权限(MCP least privilege)和 MCP 工具投毒(MCP tool poisoning)
  • 两阶段分析:快速静态分析 + 可选的 LLM 语义评估
  • 实时漏洞查询:SC4 查询 OSV.dev 获取实时 CVE 数据,并自动离线回退
  • 多种输出格式:终端、JSON、Markdown 和 SARIF 报告
  • 风险评分:0–100 分,附带严重性标签和清晰建议

快速开始

安装

首先创建并激活虚拟环境(所有 make 目标假定虚拟环境已激活)。使用 uv 或 pip;Makefile 优先使用 uv,否则使用 pip。

# 克隆仓库
git clone https://github.com/NVIDIA/skillspector.git
cd skillspector

# 创建并激活虚拟环境
uv venv .venv && source .venv/bin/activate
# 或:python3 -m venv .venv && source .venv/bin/activate

# 安装用于生产使用
make install

# 或安装开发依赖
make install-dev

基本用法

# 扫描本地技能目录
skillspector scan ./my-skill/

# 扫描单个 SKILL.md 文件
skillspector scan ./SKILL.md

# 扫描 Git 仓库
skillspector scan https://github.com/user/my-skill

# 扫描 zip 文件
skillspector scan ./my-skill.zip

输出格式

# 终端输出(默认)— 格式化打印
skillspector scan ./my-skill/

# JSON 输出 — 机器可读
skillspector scan ./my-skill/ --format json --output report.json

# Markdown 输出 — 用于文档
skillspector scan ./my-skill/ --format markdown --output report.md

# SARIF 输出 — 用于 CI/CD 集成和 IDE 工具
skillspector scan ./my-skill/ --format sarif --output report.sarif

LLM 分析

为获得最佳结果,请配置一个兼容 OpenAI 的 LLM 端点用于语义分析。通过 SKILLSPECTOR_PROVIDER 选择提供商;每个提供商自带捆绑的默认模型。SkillSpector 也支持本地 OpenAI 兼容服务器(Ollama、vLLM、llama.cpp)和托管推理网关。

提供商 (SKILLSPECTOR_PROVIDER) 凭证环境变量 端点 默认模型
openai OPENAI_API_KEY (+ 可选 OPENAI_BASE_URL) api.openai.com(或任意 OpenAI 兼容 URL) gpt-5.4
anthropic ANTHROPIC_API_KEY api.anthropic.com claude-opus-4-6
nv_build NVIDIA_INFERENCE_KEY build.nvidia.com deepseek-ai/deepseek-v4-flash
# 标准 OpenAI
export SKILLSPECTOR_PROVIDER=openai
export OPENAI_API_KEY=sk-...
skillspector scan ./my-skill/

# Anthropic
export SKILLSPECTOR_PROVIDER=anthropic
export ANTHROPIC_API_KEY=sk-ant-...
skillspector scan ./my-skill/

# NVIDIA build.nvidia.com
export SKILLSPECTOR_PROVIDER=nv_build
export NVIDIA_INFERENCE_KEY=nvapi-...
skillspector scan ./my-skill/

# 本地 Ollama 或任意 OpenAI 兼容端点
export SKILLSPECTOR_PROVIDER=openai
export OPENAI_API_KEY=ollama
export OPENAI_BASE_URL=http://localhost:11434/v1
export SKILLSPECTOR_MODEL=llama3.1:8b
skillspector scan ./my-skill/

# 覆盖提供商的默认模型
export SKILLSPECTOR_MODEL=gpt-5.2
skillspector scan ./my-skill/

# 跳过 LLM 分析(更快,仅静态分析)
skillspector scan ./my-skill/ --no-llm

漏洞模式

SkillSpector 检测 16 个类别共 64 种漏洞模式:

Prompt Injection(提示注入,5 种模式)

ID Pattern Severity Description
P1 Instruction Override HIGH 命令忽略安全约束
P2 Hidden Instructions HIGH 注释/不可见文本中的恶意指令
P3 Exfiltration Commands HIGH 将上下文外部传输的指令
P4 Behavior Manipulation MEDIUM 调整智能体决策的微妙指令
P5 Harmful Content CRITICAL 可能导致人身伤害的指令

Data Exfiltration(数据外泄,4 种模式)

ID Pattern Severity Description
E1 External Transmission MEDIUM 向外部 URL 发送数据
E2 Env Variable Harvesting HIGH 收集 API 密钥和机密信息
E3 File System Enumeration MEDIUM 扫描目录查找敏感文件
E4 Context Leakage HIGH 将对话上下文外部传输

Privilege Escalation(权限提升,3 种模式)

ID Pattern Severity Description
PE1 Excessive Permissions LOW 请求超出声明功能的权限
PE2 Sudo/Root Execution MEDIUM 调用提升的系统权限
PE3 Credential Access HIGH 读取 SSH 密钥、令牌、密码

Supply Chain(供应链,6 种模式)

ID Pattern Severity Description
SC1 Unpinned Dependencies LOW 包没有版本约束
SC2 External Script Fetching HIGH curl | bash 以及远程代码执行
SC3 Obfuscated Code HIGH Base64/十六进制编码执行
SC4 Known Vulnerable Dependencies HIGH 具有已知 CVE 的依赖项(实时 OSV.dev 查询)
SC5 Abandoned Dependencies MEDIUM 没有安全更新的未维护包
SC6 Typosquatting HIGH 与流行包相似的包名

Excessive Agency(过度代理,4 种模式)

ID Pattern Severity Description
EA1 Unrestricted Tool Access HIGH 无限制的工具访问,没有约束
EA2 Autonomous Decision Making HIGH 无人工参与的、高影响力的决策
EA3 Scope Creep MEDIUM 能力超出声明目的
EA4 Unbounded Resource Access MEDIUM 资源消耗没有速率限制或配额

Output Handling(输出处理,3 种模式)

ID Pattern Severity Description
OH1 Unvalidated Output Injection HIGH 模型输出未经清理直接使用
OH2 Cross-Context Output MEDIUM 输出跨越信任边界未经验证
OH3 Unbounded Output MEDIUM 输出大小或生成速率没有限制

System Prompt Leakage(系统提示泄露,3 种模式)

ID Pattern Severity Description
P6 Direct Leakage HIGH 暴露系统提示或内部规则的指令
P7 Indirect Extraction MEDIUM 通过改述、翻译或侧信道提取
P8 Tool-Based Exfiltration HIGH 通过文件写入或网络请求外泄系统提示

Memory Poisoning(内存投毒,3 种模式)

ID Pattern Severity Description
MP1 Persistent Context Injection HIGH 设计为跨交互持久存在的内容
MP2 Context Window Stuffing MEDIUM 填充内容挤走安全约束
MP3 Memory Manipulation HIGH 篡改智能体内存或存储状态

Tool Misuse(工具滥用,3 种模式)

ID Pattern Severity Description
TM1 Tool Parameter Abuse HIGH 构造参数以实现非预期行为(shell=True、--force)
TM2 Chaining Abuse HIGH 绕过单项安全检查的工具链
TM3 Unsafe Defaults MEDIUM 过于宽松的默认值(禁用 TLS、无认证)

Rogue Agent(恶意智能体,2 种模式)

ID Pattern Severity Description
RA1 Self-Modification CRITICAL 运行时修改自身代码或配置
RA2 Session Persistence HIGH 通过 cron 作业或启动脚本进行未授权持久化

Trigger Abuse(触发器滥用,3 种模式)

ID Pattern Severity Description
TR1 Overly Broad Trigger MEDIUM 匹配常用词的触发模式
TR2 Shadow Command Trigger HIGH 影射内置命令或其他技能的触发器
TR3 Keyword Baiting Trigger MEDIUM 设计为最大化激活的通用触发器

Behavioral AST(行为 AST,8 种模式)

ID Pattern Severity Description
AST1 exec() Call CRITICAL 直接 exec() 调用,允许任意代码执行
AST2 eval() Call HIGH 直接 eval() 调用,执行任意表达式
AST3 Dynamic Import HIGH __import__() 运行时加载任意模块
AST4 subprocess Call HIGH 通过 subprocess 执行外部命令
AST5 os.system / exec-family HIGH 通过 os 模块执行 shell 命令
AST6 compile() Call MEDIUM 从字符串创建代码对象
AST7 Dynamic getattr() MEDIUM 使用非字面量名称进行任意属性访问
AST8 Dangerous Execution Chain CRITICAL exec/eval 结合动态来源(网络、编码数据)

Taint Tracking(污点追踪,5 种模式)

ID Pattern Severity Description
TT1 Direct Taint Flow HIGH 数据直接从源流向汇点,未经清理
TT2 Variable-Mediated Taint Flow MEDIUM 数据通过中间变量从源流向汇点
TT3 Credential Exfiltration Chain CRITICAL 凭证(环境变量、机密)流向网络输出汇点
TT4 File Read to Network Exfiltration HIGH 文件内容流向网络输出汇点
TT5 External Input to Code Execution CRITICAL 网络或用户输入流向 exec/eval/subprocess 汇点

YARA Signatures(YARA 签名,4 种模式)

ID Pattern Severity Description
YR1 Malware Match CRITICAL YARA 规则匹配已知恶意软件签名
YR2 Webshell Match CRITICAL YARA 规则匹配 webshell 模式
YR3 Cryptominer Match HIGH YARA 规则匹配加密货币矿工迹象
YR4 Hack Tool / Exploit Match HIGH YARA 规则匹配黑客工具或利用代码

MCP Least Privilege(MCP 最小权限,4 种模式)

ID Pattern Severity Description
LP1 Underdeclared Capability HIGH 代码使用了未在声明权限中列出的能力
LP2 Wildcard Permission MEDIUM 权限列表包含通配符(*、all、full、any)
LP3 Missing Permission Declaration MEDIUM 没有权限字段,但代码具有可检测的能力
LP4 Overdeclared Permission LOW 权限已声明但未发现相应的代码能力

MCP Tool Poisoning(MCP 工具投毒,4 种模式)

ID Pattern Severity Description
TP1 Hidden Instructions HIGH 元数据中的隐藏指令(HTML 注释、零宽字符、base64、data URI)
TP2 Unicode Deception HIGH 工具元数据中的同形字、RTL 覆盖、混合脚本标识符
TP3 Parameter Description Injection MEDIUM 参数定义中的注入模式(覆盖、系统令牌、恶意默认值)
TP4 Description-Behavior Mismatch MEDIUM 声明的工具描述与实际代码行为不匹配(LLM 增强)

所有检测到的模式均列在上表中。

风险评分

分数计算

  • CRITICAL 问题:+50 分
  • HIGH 问题:+25 分
  • MEDIUM 问题:+10 分
  • LOW 问题:+5 分
  • 可执行脚本:1.3 倍乘数

严重性级别

分数 严重性 建议
0–20 LOW 安全
21–50 MEDIUM 谨慎
51–80 HIGH 不要安装
81–100 CRITICAL 不要安装

示例输出

终端输出

 SkillSpector 安全报告  v2.0.0

技能:suspicious-skill
来源:./suspicious-skill/
扫描时间:2026-01-29 10:30:00 UTC

        风险评估
 指标           值
 分数           78/100
 严重性         HIGH
 建议           不要安装

        组件(3个)
 文件              类型      行数  可执行
 SKILL.md          markdown    142  否
 scripts/sync.py   python       87  是
 requirements.txt  text          3  否

问题(2个)

  HIGH:环境变量收集(E2)
    位置:scripts/sync.py:23
    发现:for key, val in os.environ.items():...
    置信度:94%
    解释:此代码收集包含 API 密钥和机密的环境变量,
    然后将它们发送到外部服务器。

  HIGH:外部传输(E1)
    位置:scripts/sync.py:45
    发现:requests.post("https://api.skill.io/env"...
    置信度:89%
    解释:数据正在发送到外部服务器。结合上面的环境变量收集,
    这表明凭证外泄。

配置

环境变量

变量 描述 必需
SKILLSPECTOR_PROVIDER 活跃的 LLM 提供商:openai、anthropic 或 nv_build。每个提供商有自己的 model_registry.yaml 和默认模型(参见上方 LLM 分析表)。默认为 nv_build。 可选
NVIDIA_INFERENCE_KEY nv_build 提供商(build.nvidia.com)的凭证。 当 SKILLSPECTOR_PROVIDER=nv_build 且需要 LLM 分析时必需
OPENAI_API_KEY OpenAI 提供商(SKILLSPECTOR_PROVIDER=openai)的凭证。在凭证瀑布流中,当活跃提供商无凭证时也作为第二层回退。 当 SKILLSPECTOR_PROVIDER=openai 且需要 LLM 分析时必需
OPENAI_BASE_URL 覆盖 OpenAI 端点(例如指向 Ollama)。 可选
ANTHROPIC_API_KEY Anthropic 提供商(SKILLSPECTOR_PROVIDER=anthropic)的凭证。 当 SKILLSPECTOR_PROVIDER=anthropic 且需要 LLM 分析时必需
SKILLSPECTOR_MODEL 覆盖活跃提供商的默认模型。参见上方 LLM 分析表中每个提供商的默认值。 可选
SKILLSPECTOR_MODEL_REGISTRY 使用自定义路径覆盖捆绑的按提供商 YAML 注册表(src/skillspector/providers/<provider>.yaml)。 可选
SKILLSPECTOR_LOG_LEVEL 日志级别:DEBUG、INFO、WARNING、ERROR(默认:WARNING)。 可选

CLI 选项

skillspector scan --help

Options:
  -f, --format [terminal|json|markdown|sarif]  输出格式 [default: terminal]
  -o, --output PATH                            输出文件路径
  --no-llm                                     跳过 LLM 分析(仅静态)
  -V, --verbose                                显示详细进度
  --help                                       显示此帮助信息并退出

开发

设置

所有 make 目标假定已创建并激活虚拟环境。Makefile 优先使用 uv,否则使用 pip。

# 克隆、创建虚拟环境、激活、安装开发依赖
git clone https://github.com/NVIDIA/skillspector.git
cd skillspector
uv venv .venv && source .venv/bin/activate
# 或:python3 -m venv .venv && source .venv/bin/activate
make install-dev

# 运行测试
make test

# 运行测试并生成覆盖率报告
make test-cov

# 运行 lint
make lint

# 格式化代码
make format

工作原理

SkillSpector 使用两阶段检测流水线:

阶段 1:静态分析

  • 基于正则表达式的快速模式匹配,覆盖 11 个静态分析器
  • 基于 AST 的行为分析,检测危险调用(exec、eval、subprocess 等)
  • 通过 OSV.dev 实时查询依赖项中的已知 CVE
  • 扫描技能中的所有文件
  • 高召回率(捕获大多数问题)
  • 中等精确度(存在一些误报)

阶段 2:LLM 语义分析(可选)

  • 评估上下文和意图
  • 过滤误报
  • 提供人类可读的解释
  • 将精确度提升至约 87%

LLM 提示包含反越狱保护,防止恶意技能操纵分析过程。

实时漏洞查询(SC4)

SC4 使用 OSV.dev API 检查依赖项与完整的开源漏洞数据库 — 覆盖 PyPI 和 npm 上的数万条公告。

  • 无需 API 密钥 — OSV.dev 免费且无需认证。
  • 批量查询 — 所有依赖项通过一次 HTTP 调用检查。
  • 自动回退 — 如果 OSV.dev 不可达(气隙/离线),则使用内置的小型回退列表。
  • 缓存 — 结果在内存中缓存 1 小时,避免会话期间重复 API 调用。

该工具需要出站 HTTPS 访问 api.osv.dev 以获取实时漏洞数据。当无法访问时,发现仅限于静态回退列表。

局限性

  • 非英语内容:可能遗漏其他语言的模式
  • 基于图像的攻击:无法分析图像中的文本
  • 加密/二进制代码:无法分析已编译或加密的内容
  • 运行时行为:仅静态分析,无动态执行
  • 离线 SC4:如果没有网络访问 api.osv.dev,SC4 使用小型静态回退列表

研究背景

基于研究《Agent Skills in the Wild: An Empirical Study of Security Vulnerabilities at Scale》(Liu 等人,2026):

  • 数据集:来自主要市场的 42,447 个技能
  • 存在漏洞:26.1% 包含至少一个漏洞
  • 高严重性:5.2% 显示出恶意意图
  • 关键发现:包含可执行脚本的技能漏洞概率高出 2.12 倍

Python API 集成

from skillspector import graph

# 调用 LangGraph 工作流
result = graph.invoke({
    "input_path": "/path/to/skill",
    "output_format": "json",   # terminal, json, markdown, 或 sarif
    "use_llm": True,           # False 表示仅静态分析
})

# 访问结果
print(f"风险分数:{result['risk_score']}/100")
print(f"严重性:{result['risk_severity']}")
print(f"建议:{result['risk_recommendation']}")

for finding in result["filtered_findings"]:
    print(f"[{finding['severity']}] {finding['rule_id']}: {finding['message']}")

许可证

Apache License 2.0 — 详见 LICENSE。

贡献

欢迎贡献!请阅读我们的贡献指南并提交拉取请求。

支持

开源项目NVIDIA2026-06-11原文

相关内容