Aug 1, 2026

用 NVIDIA SkillSpector 扫描 Agent 技能的安全风险

安装 SkillSpector,在安装前扫描 Agent 技能中的漏洞、恶意模式与安全风险,学会静态扫描、风险评分、LLM 分析与 CI 集成。

#tutorial#security#agent-tools#best-practices

Agent 技能以隐式信任运行。Claude Code、Codex CLI、Gemini CLI 执行技能脚本时几乎不做审查——而一项针对 42,447 个技能的 2026 年研究显示,26.1% 的技能至少含一个漏洞,5.2% 表现出疑似恶意意图。NVIDIA SkillSpector 在安装之前回答一个问题:这个技能安全吗?

为什么 SkillSpector 重要

SkillSpector 是专为 Agent 技能形态构建的安全扫描器。它用 17 个类别共 68 种模式检测漏洞、恶意模式与安全风险,覆盖提示注入、数据外泄、权限提升、供应链与记忆投毒等。

两个细节让它值得在每次安装前运行:

  • 含可执行脚本的技能漏洞概率高 2.12 倍。
  • 静态分析能捕获大部分问题——可选的 LLM 阶段再对剩余部分做语义评估。

支持扫描 Git 仓库、URL、zip 文件、目录或单个 SKILL.md 文件。输出支持终端、JSON、Markdown 或 SARIF 报告,附带 0-100 风险评分与明确建议。

安装

SkillSpector 是一个 Python CLI,用 uvpip 安装。它不在 skills 安装器里,需要直接从 GitHub 安装。

uv tool install git+https://github.com/NVIDIA/skillspector.git

# 之后更新
uv tool update skillspector

之后想用内置 MCP 服务器,就同时安装 MCP extra:

uv tool install 'skillspector[mcp] @ git+https://github.com/NVIDIA/skillspector.git'

没有 uv?用虚拟环境加 pip:

git clone https://github.com/NVIDIA/skillspector.git
cd skillspector
python3 -m venv .venv && source .venv/bin/activate
make install

也有 Docker 镜像(make docker-build),无需本地 Python。

实战:安装前扫描技能

你下载了一个技能,想在它进入 ~/.claude/skills/ 之前弄清楚它做了什么。

skillspector scan ./my-skill/

终端报告先给出风险评级,再逐条列出发现(含位置、置信度与解释):

SkillSpector Security Report  v2.0.0

Skill: suspicious-skill
Source: ./suspicious-skill/

        Risk Assessment
 Score           78/100
 Severity        HIGH
 Recommendation  DO NOT INSTALL

Issues (2)

  HIGH: Env Variable Harvesting (E2)
    Location: scripts/sync.py:23
    Confidence: 94%

  HIGH: External Transmission (E1)
    Location: scripts/sync.py:45
    Confidence: 89%

SkillSpector 支持四种输入,按你拿到技能的方式选择扫描方式:

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

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

# 扫描 zip 压缩包
skillspector scan ./my-skill.zip

远程与压缩包输入有上限(单次摄入 100 MiB、zip 最多 10,000 个成员),超大下载与 zip 炸弹会直接失败,而不是塞满磁盘。

理解风险评分

分数是各发现的加权和,可执行脚本乘 1.3 倍:

严重度分值建议
LOW+5SAFE
MEDIUM+10CAUTION
HIGH+25DO NOT INSTALL
CRITICAL+50DO NOT INSTALL

最终区间直接映射为动作:

分数严重度建议
0-20LOWSAFE
21-50MEDIUMCAUTION
51-80HIGHDO NOT INSTALL
81-100CRITICALDO NOT INSTALL

分数 ≤ 50 时退出码为 0,> 50 时退出码为 1,可直接用于脚本与 CI 门禁。

实战:加 LLM 分析处理语义问题

静态分析能捕获已知模式,LLM 阶段负责捕获模式之外的语义问题——比如试图在运行时覆盖 Agent 指令的提示词。

用环境变量配置 provider,然后执行同样的扫描命令:

export SKILLSPECTOR_PROVIDER=anthropic
export ANTHROPIC_API_KEY=sk-ant-...

skillspector scan ./my-skill/

支持的 provider 包括 OpenAI、Anthropic、AWS Bedrock、NVIDIA build 以及本地服务(Ollama、vLLM)。也可以直接复用本地 Claude 或 Codex CLI 会话,无需 API Key:

export SKILLSPECTOR_PROVIDER=claude_cli  # 复用 claude auth login 会话
skillspector scan ./my-skill/

想要快速离线纯静态分析,跳过 LLM 阶段:

skillspector scan ./my-skill/ --no-llm

实战:在 CI 中做安装门禁

你维护一个技能合集,想自动拦截不安全的新增项。SkillSpector 的退出码是稳定契约,可直接接入任意流水线:

退出码含义
0扫描完成,分数 ≤ 50(SAFE 或 CAUTION)
1扫描完成,分数 > 50(DO NOT INSTALL)
2出错(输入错误、源码不可读、内部故障)

用 JSON 输出拿机器可读结果:

skillspector scan ./my-skill/ --format json --output report.json

报告顶层包含 risk_assessment.scoreseverityrecommendation,CI 可按建议映射策略:

recommendation建议动作
SAFE放行
CAUTION提示/警告用户
DO NOT INSTALL拦截

IDE 与 CI 工具若支持 SARIF,改用该格式:

skillspector scan ./my-skill/ --format sarif --output report.sarif

用基线抑制已知发现

技能通过评审后,你不想每次重扫都看到同样的已接受发现。生成一次基线并提交,之后按基线扫描:

# 把当前所有发现收入基线(只跑一次),然后提交
skillspector baseline ./my-skill/ -o .skillspector-baseline.yaml

# 只报告与计分新的发现
skillspector scan ./my-skill/ --baseline .skillspector-baseline.yaml

随时用 --show-suppressed 查看被抑制的项。基线既支持精确指纹也支持漂移容忍的 glob 规则,扫描源一旦变化,相关发现会重新激活,直到你再次评审。

技巧

  • 每次安装前都扫描。 30 秒静态扫描,是防止技能偷走环境变量的廉价保险。
  • 快速排查用 --no-llm 静态分析快且离线,需要语义判断时再加 LLM 阶段。
  • 先看可执行脚本。 *.py*.sh*.js 里的发现更值得重视——可执行技能漏洞概率高 2.12 倍。
  • 编辑器用 SARIF 输出。 多数 IDE 与 CI 原生支持 SARIF,发现能直接变成行内标注。
  • 基线要提交进仓库。.skillspector-baseline.yaml 存进技能仓库,让每个评审者看到同一套已接受发现。

何时不用 SkillSpector

你完全掌控技能源码与作者时,或技能只是无脚本的单条提示词时,可以跳过。它是纯静态分析:无法分析图片中的文字、加密或编译代码,也看不到动态运行时行为,非英文内容可能漏检。


安装前先扫描每个技能。更多安全与开发工具类技能见 SkillMap 排行榜,NVIDIA SkillSpector 首秀见本周周报