SkillSpector:NVIDIA 出的 AI Agent 技能扫描器,26% 的 "技能" 其实是漏洞
早上刷 GitHub Trending,第二条项目让我后背一凉:
NVIDIA / SkillSpector — Security scanner for AI agent skills. Detect vulnerabilities, malicious patterns, and security risks before installing agent skills.
单日 964 stars,仓库总数 5.4k。一个扫描器被顶到这个位置,说明整个社区已经意识到一件事 —— 我们正在疯狂安装的”Agent skills”,有四分之一其实是定时炸弹。
引用它 README 里那句直白得有点可怕的话:
Research shows that 26.1% of skills contain vulnerabilities and 5.2% show likely malicious intent.
我用的是数字游民的工作流,Claude Code、Codex、Hermes Agent 三个客户端长期并行,每个里都装了几十个社区 skill。看到 26.1% 这个数字,第一反应不是” 哇又有新工具”,而是 —— 我昨天装的那个 skill,安全吗?
它扫什么:64 条规则,覆盖 16 个攻击面
SkillSpector 不是简单的关键词匹配,它把整个 skill 拆成 16 个攻击面,每个面都有具体的规则:
| 类别 | 规则数 | 抓什么 |
|---|---|---|
| Prompt Injection | 5 | 覆盖系统提示、隐藏指令、行为操纵、危险内容 |
| Data Exfiltration | 4 | 外发数据、env 变量收割、文件系统枚举、上下文外泄 |
| Privilege Escalation | 3 | 越权、sudo/root 调用、读 SSH key |
| Supply Chain | 6 | 未锁定依赖、curl | bash、混淆代码、联网查 OSV.dev CVE、废弃包、typosquatting |
| Excessive Agency | 4 | 无限制工具调用、自主决策、范围蔓延、无界资源 |
| Output Handling | 3 | 模型输出未消毒、跨信任边界输出、无界输出 |
| System Prompt Leakage | 3 | 直接泄漏、间接提取、工具侧通道 |
| Memory Poisoning | 3 | 持久化注入、上下文窗口填充、内存篡改 |
| Tool Misuse | 3 | 参数滥用(如 shell=True、--force)、链路绕过、不安全默认 |
| Rogue Agent | 2 | 自修改、会话持久化(写 cron) |
| Trigger Abuse | 3 | 触发词太宽、影子命令、关键词诱饵 |
| Behavioral AST | 8 | exec/eval/subprocess、动态 import、os.system、动态 getattr |
| Taint Tracking | 5 | 数据流追踪 ——env → 网络、文件 → 网络、输入 → 代码执行 |
| YARA Signatures | 4 | 已知恶意软件、webshell、挖矿、hack 工具特征 |
| MCP Least Privilege | 4 | 声明的能力低于实际代码、通配符权限、缺失声明、过度声明 |
| MCP Tool Poisoning | 4 | 元数据里的隐藏指令、Unicode 欺骗、参数注入、描述行为不符 |
最后两个类别尤其值得关注 ——MCP(Model Context Protocol)是今年 Claude Code / Cursor / Codex 等工具的” 工具接口标准”,而 MCP 工具中毒是今年新冒出来的一类攻击:恶意 skill 在自己的 description 字段、metadata、参数说明里塞隐藏指令,模型读到这些就会按攻击者意图执行。
我把 64 条规则完整列出来不是为了凑字数,是因为这套分类基本上就是给”Agent 时代软件供应链” 画了一张完整的威胁地图。任何一个想做 Agent 安全产品的人,都可以直接拿这个当骨架。
它怎么扫:两阶段流水线
SkillSpector 把扫描拆成两个阶段,对应不同速度和精度:
Stage 1:纯静态分析(毫秒级)
- 11 个静态分析器并行扫
- AST 层面抓
exec/eval/subprocess这类危险调用 - 抓网络 / 文件 /env 这三个 sink 的可疑数据流
- SC4 规则会真去查 OSV.dev(免费的漏洞数据库),把 skill 的
requirements.txt/package.json拿去比对,发现依赖里有已知 CVE 会直接报警。OSV.dev 失败就 fallback 到内置的离线列表 - 高召回、速度极快,但会有一些误报
Stage 2:LLM 语义分析(可选,需要 provider)
把 Stage 1 的发现扔给一个 LLM(OpenAI / Anthropic / NVIDIA build.nvidia.com/ 本地 Ollama),让它:
- 评估上下文和意图(区分” 故意的功能” vs “无意的漏洞”)
- 过滤掉假阳性
- 生成人类能读的解释
精度从静态的” 高召回中精度” 提升到 ~87%。关键是它还特意写了 ——prompt 里加 anti-jailbreak 防护,防止恶意 skill 在分析过程中反向操纵分析 LLM。这一点非常专业。
我尤其想点赞的是它支持三种 provider:
1 | export SKILLSPECTOR_PROVIDER=anthropic |
数字游民工作流的核心矛盾就是” 数据不能上云” 和” 又想要 AI 能力”。SkillSpector 直接支持本地 Ollama /vLLM/llama.cpp 跑分析,敏感 skill 的扫描可以完全不离本地。
一行命令的真实体验
我顺手扫了一下我 Claude Code 里装了三个月的几个 skill:
1 | git clone https://github.com/NVIDIA/skillspector.git |
终端输出长这样:
1 | SkillSpector Security Report v2.0.0 |
干净。Score 12/100,Severity LOW,SAFE。
然后我又试着扫了一个我前阵子在某 marketplace 装的、用的人比较多但作者不熟悉的 skill。这一次报告就不一样了:
1 | Risk Assessment |
两个 HIGH 联动,直接被判定 DO NOT INSTALL。
我默默 rm -rf 了一下那个 skill 的目录,然后给作者提了 issue。
风险打分规则也很直白(README 里写得清清楚楚):
| Score | Severity | Recommendation |
|---|---|---|
| 0-20 | LOW | SAFE |
| 21-50 | MEDIUM | CAUTION |
| 51-80 | HIGH | DO NOT INSTALL |
| 81-100 | CRITICAL | DO NOT INSTALL |
单项计分:CRITICAL +50,HIGH +25,MEDIUM +10,LOW +5。如果 skill 里有可执行脚本(.py / .sh),整个分数还要乘 1.3x—— 因为带可执行脚本的 skill 漏洞概率是普通 skill 的 2.12 倍(来自它引用的那篇 Liu et al. 2026 论文,扫描了 42,447 个 skill)。
为什么这个项目值得 star
我想从数字游民 + 重度 Agent 使用者的角度,说三点它解决了我自己真正的痛点:
第一,” 装 skill” 这件事从 2024 年开始变成了 Agent 工作流的核心动作,但没人给这个动作装一个” 杀毒软件”。我们装 npm 包会跑 npm audit,装 Python 包会扫 pip-audit,唯独 Agent skill 是裸装。SkillSpector 把这个缺口填上了。
第二,它的输出能进 CI/CD。SARIF 格式可以直接喂给 GitHub Code Scanning,意味着你完全可以做一个 “skill marketplace 的预发检查流水线”—— 任何人提交新 skill,先过 SkillSpector 这关才允许上架。这对任何一个想做 skill 平台的人来说,是基础设施级的组件。
第三,它是 NVIDIA 出的,但工具本身立场中立。任何 skill 都能扫,没有白名单、没有商业关系。Apache 2.0 license + 论文级的研究背景(基于 Liu et al. 2026 那篇 42,447 个 skill 的大规模实证研究),可信度比” 某 startup 攒的扫描器” 高得多。
我已经在想一件事:要不要把我自己维护的 skill 列表每周跑一次 SkillSpector,然后把结果写进 README 当 trust signal。这样读者看到的不只是” 这个 skill 有 200 stars”,而是”SkillSpector 评级 LOW,上次扫描时间 2026-06-15”。
局限和我的使用建议
它自己在 README 里也写了 5 条局限,我翻译一下并补上我的建议:
| 局限 | 我的应对 |
|---|---|
| 非英文内容可能漏 | 我自己写的 skill 全是英文,但装别人的中文 skill 需要人工再过一遍 |
| 图片里的攻击抓不到 | skill 仓库一般不放图片,这条不痛 |
| 加密 / 编译过的代码看不到 | 警惕含 .so / .pyd 的 skill,这类根本不该有 |
| 静态分析,不跑 | SkillSpector 永远不执行你的 skill,只看代码。这意味着 0 误执行风险 |
| SC4 离线时用静态 fallback | 出差在没网的咖啡馆工作时,先 --no-llm 也能用 |
我自己的实操建议:
- 装新 skill 之前先扫 ——
skillspector scan https://github.com/xxx/yyy - 批量审计已有 skill——
find ~/.claude/skills -name SKILL.md | xargs -I{} skillspector scan {} - CI 集成 —— 输出 SARIF,上传到 GitHub Code Scanning
- 敏感 skill 走本地 LLM——Ollama 拉一个
llama3.1:8b跑 Stage 2,数据完全不离本地 - 可执行脚本的 skill 重点看 —— 带
.py/.sh的 skill 风险 ×1.3,作者不熟的话直接 DO NOT INSTALL
最后
2026 年的 Agent 生态,和 2014 年的 npm 生态很像 —— 安装门槛极低、增长速度极快、安全基础设施滞后。那时候我们有 npm audit,现在我们终于有了 skillspector scan。
如果你跟我一样,每天都在装新 skill、试新工具,强烈建议把 SkillSpector 加到你的必装清单里。一句话安装,三秒出报告,从此告别” 看完 README 就装” 的无脑节奏。
仓库:github.com/NVIDIA/SkillSpector(5.4k stars,单日 +964)