装 skill 前先扫一遍:NVIDIA SkillSpector 和那组不好看的数字
装 skill 这件事有个默认前提:你装的东西是可信的。这个前提今年被一组数字打脸了,而 NVIDIA 干脆做了个扫描器来补这个洞。这篇把数字和工具都记一下,包括它扫不出来的那部分。
信息验证截至 2026-10-20。
先看那组数字
最常被引用的是 Liu 等人 2026 年 1 月的论文(arXiv 2601.10338),扫了两个公开市场的 31,132 个 skill:
- 26.1% 至少含一个漏洞(覆盖 14 种模式)
- 其中数据外传 13.3%、提权 11.8%
- 5.2% 达到高危模式,可判断为有恶意意图
- 带可执行脚本的 skill,出问题的概率是不带脚本的 2.12 倍
另一个更刺眼的是 Snyk 在 2026 年 2 月 3 日发的分析:ClawHub 注册表 2,857 个 skill 里查出 341 个恶意,约占 12%,大部分来自同一波投放 Atomic Stealer 的活动,集中在 1 月 27–29 日三天。那个注册表服务的不是 Claude,但格式就是同一套 SKILL.md——换客户端读起来一模一样。
顺带说个口径问题:有些二手报道写的是"扫描了 42,447 个 skill",数字对不上。以论文口径为准,我采用 31,132。
SkillSpector 是什么
NVIDIA 出的开源扫描器,Apache-2.0,Python 3.12+,仓库 NVIDIA/SkillSpector。它要回答的问题就一句:这个 skill 能不能装。
工作方式分两段:
1. 静态分析:正则匹配 + AST 走查(找 exec、eval、subprocess 这类危险调用)+ 污点追踪 + YARA 规则,再查 OSV.dev 的实时 CVE(断网自动回退本地规则)。这段完全离线,加 --no-llm 即可。
2. LLM 语义评估(可选):把内容交给模型判断意图,抓那些被混淆过的指令。官方口径精度约 87%。
覆盖面是 71 种漏洞模式、17 个类别,除了常见的提示注入、数据外传、提权、供应链之外,还有几个只有 agent 场景才有的:记忆投毒、触发滥用、抗拒答、抗审查绕过、MCP 工具投毒、MCP 最小权限。
评分是 0–100,critical 50 分、high 25、medium 10、low 5,带脚本的再乘 1.3。档位:
| 分数 | 判定 |
|---|---|
| 0–20 | LOW / SAFE |
| 21–50 | MEDIUM / CAUTION |
| >50 | HIGH / CRITICAL,建议别装 |
装和用
# 安装
uv tool install git+https://github.com/NVIDIA/skillspector.git
# 扫一个本地目录 / 单个 SKILL.md / Git 仓库 / zip / URL
skillspector ./my-skill/
skillspector https://github.com/some-user/some-claude-skill
# 离线模式(跳过 LLM 阶段)
skillspector ./my-skill/ --no-llm
# 接 CI:输出 SARIF,分数 ≤50 时退出码为 0
skillspector ./my-skill/ --format sarif --output results.sarif
几个工程细节值得说。它对输入设了硬上限:单次摄入 100 MiB、zip 成员 1 万个,超了直接按失败处理(fail-closed),而不是硬着头皮扫一半——对一个"输入本身就是不可信内容"的扫描器,这是对的默认行为。还有 baseline 机制,把已知且接受的问题记进基线,重扫只冒出新问题,这样才能挂进 CI 当门禁,不至于每轮吐同一批旧警告。
它扫不出来的部分
这点必须写清楚。Cloud Security Alliance 2026 年 6 月的报告里提到,Trail of Bits 成功把恶意逻辑(窃取环境变量)藏进预编译的字节码,跟看起来干净的源码放在一起,只扫源码的扫描器完全没发现。报告的结论是当前 skill 扫描器可以被系统性绕过。
所以定位应该是:第一道闸,不是唯一一道闸。配套还得做三件事——给 skill 最小权限、CAUTION 档的人工看一遍、优先选有透明源码历史和维护者身份的。它能拦住的,是那 26.1% 里绝大多数"不小心的、意外的、大规模分发的"问题。
常见问题
Q:付费 API 的 skill 也要扫吗?
要。扫描的对象是包本身,跟它从哪来无关。
Q:LLM 那段会不会把我的 skill 内容传出去?
会。LLM 模式要把内容发到你配置的模型端点,属于一次数据出网。在意的话用 --no-llm。
Q:只装 Anthropic 官方的就安全了吗?
官方仓库 README 自己写了"仅供演示与教学,依赖前请自行测试"。风险低不等于零。
Q:能不能让 agent 自己扫?
能,有 MCP server 模式,暴露一个 scan_skill 工具,装完后可以在会话里直接调。
参考与出处
- Liu et al., "Agent Skills in the Wild",arXiv 2601.10338,2026-01-15
- Snyk, skill.md shell access 分析,2026-02-03
- NVIDIA/SkillSpector 仓库:github.com/NVIDIA/SkillSpector(Apache-2.0)
- CSA 关于预编译字节码绕过的研究报道,2026-06