别再闭眼装 Skill 了:4 万个技能里 26.1% 带漏洞,NVIDIA 开源了个扫描器

别再闭眼装 Skill 了:4 万个技能里 26.1% 带漏洞,NVIDIA 开源了个扫描器

别再闭眼装 Skill 了:4 万个技能里 26.1% 带漏洞,NVIDIA 开源了个扫描器 封面

你装了几十个 Skill,有没有哪个是你真的从头读到尾的?

说实话,大多数人的安装流程就三步:看见一个 SKILL.md 觉得有用,复制路径,回车。然后它就在你的 Agent 里跑起来了,拿着你给出去的全部权限。

问题就出在这儿。Claude Code、Codex CLI、Gemini CLI 这一票工具,对 Skill 的默认态度是信任。装进来等于直接放进执行链路,能读文件、能调命令、能联网。而绝大多数人,连它的代码块都没展开过。

先搞清楚:它到底在扫什么

SkillSpector 不是杀毒软件。这句得先说,不然期待会错位。

它更像一份体检报告。你丢一个 Skill 进去,它读一遍,告诉你这东西声明了什么、实际干了什么、两边对不对得上、依赖里有没有已知 CVE,最后给一个 0 到 100 的分和一份处置建议。

喂进去的形态很宽:Git 仓库、URL、zip 包、本地目录,或者就一个孤零零的 SKILL.md,都能扫。不用为了审计专门把整个仓库拖下来。

先看个数字。SkillSpector 仓库引用的研究里,扫了 42,447 个 skill,26.1% 至少含一个漏洞,5.2% 显示疑似恶意意图。

但这组数字得打折看。扫描对象是主流 skill 市场的样本,不是 NVIDIA 自己跑的全量普查;样本怎么挑的、恶意意图靠什么判定,都没有公开细节。当趋势看,别当定论。

16 类风险、64 种漏洞模式的规则库覆盖面,其中 MCP 相关独占 8 种
16 类风险、64 种漏洞模式的规则库覆盖面,其中 MCP 相关独占 8 种

64 种模式,16 个类别:规则库长什么样

结论先放这儿:覆盖面是真下功夫了,64 种漏洞模式拆成 16 个类别。

  • 提示词注入 5 种、数据外泄 4 种、权限提升 3 种、供应链 6 种
  • 过度代理权 4 种、输出处理 3 种、系统提示词泄露 3 种、记忆投毒 3 种
  • 工具滥用 3 种、流氓 Agent 2 种、触发器滥用 3 种
  • 行为 AST 8 种、污点追踪 5 种、YARA 签名 4 种
  • MCP 最小权限 4 种、MCP 工具投毒 4 种

前面那几个看名字就懂。后面几类值得单拎出来说。行为 AST 是把代码解析成语法树再看行为,不是简单关键词匹配;污点追踪跟的是数据从哪进来、往哪流出去;YARA 那 4 种,是拿成熟的恶意代码特征库去套。

最后两类都跟 MCP 有关。MCP 现在几乎是 Agent 外接能力的标准接口,挂得越多,权限面越大。SkillSpector 专门给它留了 8 种模式,一半管最小权限,一半管工具投毒。想弄明白这一层为什么值得单独防,可以看看这篇 MCP 协议 的拆解。

冷水也得泼:64 是规则库的覆盖面,不等于 64 种之外的问题它都能抓。静态规则天然有漏检,也有误报。这正是它还要再叠一层语义分析的原因。

静态打底,LLM 补语义:两阶段怎么跑

第一阶段是静态分析。快,确定性,不看心情。抓的是可疑字符串、依赖风险、危险 API 调用,还有一件很关键的事:声明的权限和实际用到的权限对不对得上。

第二阶段是 LLM 语义分析,可选。它干的是比对,这个 skill 说自己要做什么,代码实际在做什么。对不上的地方就是风险。

具体抓三类:描述与行为不符、模糊到容易被误触发的触发器、以及藏在字里行间的隐蔽策略问题。这层是静态规则够不着的地方。

还有个细节挺实在。依赖的实时 CVE 查询走 OSV.dev,断网时自动离线回退,不会因为你网络抽风就扫不动。

从 SKILL.md 进扫描器到出报告:0 到 100 的风险分与四种输出格式
从 SKILL.md 进扫描器到出报告:0 到 100 的风险分与四种输出格式

装之前那 30 秒:从安装到出报告

安装就这几条命令:

git clone https://github.com/NVIDIA/SkillSpector.git
cd SkillSpector
uv venv .venv && source .venv/bin/activate
make install

机器上没有 uv 的话,把第三行换成 python3 -m venv .venv && source .venv/bin/activate,后面照旧。

扫起来更简单:

skillspector scan ./my-skill/
skillspector scan ./SKILL.md
skillspector scan https://github.com/user/my-skill
skillspector scan ./my-skill.zip

想留档就换输出格式,JSON、Markdown、SARIF 都支持:

skillspector scan ./my-skill/ --format json --output report.json
skillspector scan ./my-skill/ --format markdown --output report.md
skillspector scan ./my-skill/ --format sarif --output report.sarif

这三个里最值得留意的是 SARIF。它能直接接进 GitHub Code Scanning、VS Code 和 CI 流水线,属于能进工程体系的那一种。

要开 LLM 语义分析,先配 provider:

export SKILLSPECTOR_PROVIDER=openai
export OPENAI_API_KEY=sk-...
skillspector scan ./my-skill/

可选 provider 三个:openai、anthropic、nv_build。不想配就加 --no-llm,纯静态跑完,该抓的照样抓。

懒得折腾 Python 环境,还有 Docker 这条路:make docker-build 之后,用 docker run --rm -v "$PWD:/scan" skillspector scan ./my-skill/ --no-llm 直接开扫。这几条在 README 里都写得挺分散,凑齐一次能省不少事。

报告怎么读:0 到 100 分意味着什么

分数不是拍脑袋给的,权重写死:

  • CRITICAL 一条 +50
  • HIGH 一条 +25
  • MEDIUM 一条 +10
  • LOW 一条 +5

外加一个乘数:带可执行脚本的 skill,总分乘 1.3。会跑脚本的东西,天生比纯文本危险一档。

算完分四档:

  • 0 到 20:LOW,SAFE,可以装
  • 21 到 50:MEDIUM,CAUTION,建议人工复核
  • 51 到 80:HIGH,DO NOT INSTALL
  • 81 到 100:CRITICAL,DO NOT INSTALL

官方还给了配套的处置建议,照着做就行:

  • Critical 和 High:阻断发布,直到修好或者正式签字接受风险
  • 发现隐藏指令或工具投毒:把隐藏内容删掉
  • 能力声明不足:补权限声明,或者砍掉那段行为
  • 依赖里有已知漏洞:升级、锁版本、或者写书面说明
  • 描述和行为对不上:要么改描述,要么改代码

最后这条其实指向一个更根本的问题:skill 该怎么写。写清楚它要干什么、需要哪些权限,既是对用的人负责,也能让扫描器少给你误报。这块的规范可以参考 design.md。

它不完美:这三件事它不管

坑1:扫完它不拦你

现象:报告出来一屏红,你照样能把它装进去。

根因:SkillSpector 不强制执行策略,也不阻止安装。它只出报告和建议,决定权留给你,或者留给你配的 CI。

解法:想真正拦住,就把 SARIF 接进 CI,让流水线去卡阈值。这是第一版的合理边界,别指望它替你做决定。

坑2:扫完也不隔离

现象:你明知某个 skill 有问题,装完之后它还是在你的完整权限下跑。

根因:沙箱隔离不在它的职责里。扫归扫,跑归跑。

解法:高风险又非装不可的,自己找隔离环境跑。别把兜底这件事交给扫描器。

坑3:规则库有边界

现象:有的 skill 扫完 0 分,你还是觉得不对劲。

根因:64 种模式是覆盖面,不是能力上限。静态分析有漏检也有误报,新模式得靠人往库里加。

解法:重要的 skill 别只跑静态那层,把语义分析开起来。说一套做一套这种最阴的问题,只有那层有机会捞出来。

挑姿势:你该用哪一种

三种场景,三种用法,对号入座。

如果你只是偶尔装一两个别人的 skill:skillspector scan ./my-skill/ --no-llm 就够了。快,不用配 API key,静态那层能挡掉绝大多数低级问题。

如果你在给团队搭内部 skill registry:必须上 SARIF 接 CI,每个 skill 进库前过一遍,Critical 和 High 直接卡住,别靠人自觉。

如果你要审的是那种带脚本、带网络请求、还挂了 MCP 连接的重型 skill:语义分析别省。它抓的正是描述和行为对不上这类最难肉眼发现的问题。

顺带提一个容易被忽略的成本。skill 装得越多,Agent 每次要加载的上下文越重,工具调用的选择开销也在涨。这层开销跟安全无关,但一样拖慢你。关于这方面的取舍,Pi 1.0 里有更细的讨论。

别把信任交出去

Skill 生态最舒服的地方,也是最危险的地方:它默认信任你。

SkillSpector 干的事其实很朴素,把这份默认信任换成一次检查。装之前多花三十秒,看一眼它声明了什么、实际干了什么、依赖干不干净。仅此而已。

它不会替你做决定,也不该替你做决定。它只是把你本来就该看、但从来没看过的东西,摆到你面前。

回到开头那句。你装了几十个 Skill,有没有哪个是你真读过的?现在有个工具能替你读一遍了。

信任不该是默认设置,检查才是。

关注圈圈,持续带你玩转 AI 工具。

© 版权声明
THE END
喜欢就支持一下吧
点赞111 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容