Aug 1, 2026
用 NVIDIA SkillSpector 扫描 Agent 技能的安全风险
安装 SkillSpector,在安装前扫描 Agent 技能中的漏洞、恶意模式与安全风险,学会静态扫描、风险评分、LLM 分析与 CI 集成。
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,用 uv 或 pip 安装。它不在 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 | +5 | SAFE |
| MEDIUM | +10 | CAUTION |
| HIGH | +25 | DO NOT INSTALL |
| CRITICAL | +50 | DO NOT INSTALL |
最终区间直接映射为动作:
| 分数 | 严重度 | 建议 |
|---|---|---|
| 0-20 | LOW | SAFE |
| 21-50 | MEDIUM | CAUTION |
| 51-80 | HIGH | DO NOT INSTALL |
| 81-100 | CRITICAL | DO 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.score、severity 与 recommendation,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 首秀见本周周报。