AI 智能体技能(Skill)是装进 Claude Code、Codex CLI、Gemini CLI 这类编程代理的「插件」,安装后就能读写文件、执行脚本、调用外部工具,而安装前几乎不经过审查。NVIDIA 开源的 SkillSpector(Apache-2.0,GitHub 15.5k star)正好补上这一步:对技能做 17 类共 71 种漏洞模式的静态检查,可选再加一轮大模型语义评估,最终给出 0 到 100 的风险分和明确建议——超过 50 分就建议不要安装。
技能市场的问题:26.1% 的技能带漏洞
技能和普通软件依赖一样会被投毒,但缺少审核环节。研究《Agent Skills in the Wild》(Liu et al.,2026)统计了主要市场的 42,447 个技能:26.1% 至少包含一个漏洞,5.2% 带有明显恶意倾向;带可执行脚本的技能,含漏洞的概率是其他技能的 2.12 倍。
按这个比例,每装 4 个技能,平均就有 1 个带问题,而多数用户只是在 README 里扫一眼就安装。
扫什么:17 类 71 种模式
SkillSpector 的检测覆盖技能攻击的主要路径:
- 提示注入与反拒答:藏在注释、不可见文本、空白填充里的指令覆盖(P2、AR3 等 9 种);
- 数据外泄与凭证窃取:把环境变量、对话上下文发往外部服务器(E2、TT3 等);
- 供应链:依赖未固定版本、curl | bash 远程执行、依赖命中已知 CVE;
- 权限与执行:过度授权、sudo/root 调用、工具参数滥用、技能自我修改(EA、PE、TM、RA 类);
- MCP 安全:权限声明缺失或过宽、工具描述与行为不符、Unicode 同形字伪装(LP、TP 类);
- 危险代码特征:exec/eval/subprocess 等调用、污点追踪、YARA 恶意样本签名(AST、TT、YR 类)。
输入格式支持 Git 仓库、URL、zip 压缩包、本地目录和单个 SKILL.md 文件。
两阶段分析:静态快筛 + 大模型语义评估
第一阶段纯静态:正则模式匹配加 AST 行为检测(exec、eval、subprocess 等危险调用),再通过 OSV.dev 实时查询依赖的已知 CVE。OSV.dev 免费、免密钥、支持批量查询,离线时自动回退到内置漏洞列表。
第二阶段可选:把文件内容交给 OpenAI 兼容的 LLM 端点,评估上下文与意图、过滤误报,把精度提升到约 87%。不想让技能源码离开本机时,加 --no-llm 只跑静态分析。
SkillSpector 不执行被扫描的技能,也不沙箱化宿主——它是一道安装前的检查,不是隔离措施。
评分与接入 CI
风险分按严重度累加:CRITICAL +50 分、HIGH +25 分、MEDIUM +10 分、LOW +5 分;技能含可执行脚本时总分再乘 1.3 倍。分档如下:
- 0–20 分:LOW,可以安装
- 21–50 分:MEDIUM,谨慎安装
- 51–80 分:HIGH,不要安装
- 81–100 分:CRITICAL,不要安装
退出码与分数联动:0 表示 ≤50 分(安全或谨慎),1 表示 >50 分(不建议安装),2 表示扫描出错,可以直接挂进 CI 或安装脚本做门禁。输出支持 Terminal、JSON、Markdown、SARIF 四种格式,SARIF 可对接 IDE 与流水线。
首次扫描还能生成基线(baseline)文件,把已确认的发现压进基线,之后只报告新增问题,避免误报反复刷屏。
怎么开始用
需要 Python 3.10 以上,一条命令安装:
uv tool install git+https://github.com/NVIDIA/skillspector.git
扫描本地技能目录、单个 SKILL.md 或远端仓库:
skillspector scan ./my-skill/
skillspector scan https://github.com/user/my-skill
不装 Python 也能用官方 Docker 镜像(python:3.12-slim-bookworm)。想把扫描并进代理工作流时,运行 skillspector mcp 启动 MCP 服务,暴露 scan_skill 工具,让 Claude Code 一类的客户端在安装技能前先调用扫描。
结论
技能供应链是 AI 开发中正在变大的风险面。SkillSpector 把「这个技能安不安全」变成了一个可重复的分数:安装前跑一次 skillspector scan,51 分以上按「不要装」处理,确实需要的先建基线再评估。这是目前成本最低的一道防线。