我们给 117,854 个 AI Agent Skill 做了安全评级,结果如下
真正让人不安的不是"有多少 skill 不安全",而是"有多少根本没人审过"。
装一个 AI agent skill 或 MCP server,意味着把你的 shell、环境变量,以及越来越多的 —— agent 自己的配置和记忆 —— 交给一段不受信任的代码。发现从来不是难点,有几万个可挑;难的是知道你挑中的那个能不能安全运行。
于是我们扫了整个目录。下面是诚实的全貌。
我们怎么扫的
一个规则引擎,借鉴 SlowMist 的 Agent Security Framework 及其 11 类红旗。它对每个 skill 的 README 和代码做静态检查,找具体模式:数据外泄(curl -d $(...))、凭证收割(env | grep -i token)、读取 .env / .ssh / .aws、curl | sh 安装脚本、提权、持久化、密钥外泄组合。每个 skill 给一个评级 —— safe / caution / unsafe / reject —— 外加它命中的具体 flag。没有 README 或太新拉不到的,保持 unknown。
这是刻意设计的第一层:它查模式,不查意图。看起来干净的 skill 仍可能在语义上做坏事 —— 那是按需深扫该管的。但在 11.7 万的规模下,正是这层模式扫描让整个目录变得"可审计"。
为什么这篇报告只用规则那一层
这里的安全评级是分层的,而这篇报告刻意只用第一层:
- 第 1 层 —— 规则扫描(本报告)。 模式匹配,~10ms/仓库,全库免费跑。它是唯一便宜到能给 11.7 万全部评级的层,所以这里每个数字都来自它。它也只读模式、不读意图 —— 这正是 3% 是下限的原因。
- 更深、单个、按需。 判断意图(这个
curl | sh是在装 Homebrew,还是在外泄密钥?)和 AST/污点级分析,属于单个 skill 层面、按请求触发 —— 不对整个目录扫,否则太贵也太吵。这是按需 / 企业层,更严的检查住在这里。
所以这不是我们对单个 skill 能做的最深的审查 —— 而是我们对全部 skill 能做的最诚实的全景。需要对某个具体 skill 做深度审计,就去 agentskillshub.top/enterprise。
- LLM 语义复核 —— 用 LLM 对被标记的 skill 判断意图(这个
curl | sh是在装 Homebrew,还是在偷密钥?),降低误报。代码已具备,待启用。 - 单 skill 深度审计 —— AST + 污点 + YARA 分析(基于 NVIDIA 开源的 SkillSpector),对单个 skill 按需触发。开发中,企业层。
这两层按设计都不对全库跑,所以本报告的数字仍是规则级的 —— 也仍是下限。
发现 1 —— 82% 的目录从没被评级过
在 117,854 个收录的 skill 里,只有 20,853 个(17.7%) 跨过 5 星 —— 也就是"火到值得评级"的门槛。剩下 约 9.7 万个,实际上未经审计。
这是大多数目录刻意回避的头条。"我们有 11.7 万个 skill"不是卖点。真正重要的是有多少你能真正信任,而对于长尾,诚实的答案是:没人看过。
发现 2 —— 被评级的 skill 里,每 32 个就有 1 个不安全
这 20,853 个被评级的 skill,评级分布如下:
安全评级分布 —— 被评级的 skill(stars ≥ 5,n = 20,853)
8.4% 带有安全顾虑。3.1%(约每 32 个 1 个)是 unsafe 或 reject。 不是那种危言耸听的 40%,但也绝非没事:在这个目录的体量下,这相当于约 650 个你真不该闭眼装的 skill,和其它所有结果混在同一个搜索列表里。
发现 3 —— 越火越安全,风险集中在长尾
把被评级的 skill 按 star 数分层,unsafe/reject 占比断崖式下跌:
unsafe + reject 占比,按热度分层
你听说过的那个 skill 几乎肯定没问题。危险的是你为某个冷门需求搜索时随手抓到的那个 7 星仓库 —— 恰恰是目录本该帮上忙、却通常帮不上的时刻。
发现 4 —— 红旗里藏着一个 agent 时代独有的新攻击面
在 1,000 个被标记 skill 的样本里,最常见的 flag:
最常见红旗 — 橙色 = agent 原生(读取你 agent 的配置 / 记忆)
经典的 shell 风险占大头。但看 agent 配置窃取(87)和 agent 记忆窃取(23):读取你 agent 配置和记忆文件的 skill。 这不是服务器漏洞 —— 这是一个只因为你在跑 agent 才存在的新攻击面。你的 Claude/MCP 配置、你存下的上下文、你那些"代持"的凭证。威胁模型变了,而大多数目录还没注意到。
发现 5 —— 风险集中在哪
按 category 看 unsafe/reject 占比(样本 ≥ 150):
| 类别 | 样本 | unsafe / reject |
|---|---|---|
claude-skill | 3,386 | 3.7% |
mcp-server | 8,970 | 3.4% |
codex-skill | 2,656 | 3.2% |
agent-tool | 4,779 | 2.5% |
恰恰是 skill/MCP 这些**跑在你 agent 内部**的格式,风险最高。而这正是重点。
那该怎么办
在你已经工作的地方,装之前先看一眼信任信号:
npx @agentskillshub/cli search "postgres mcp" --safe
npx @agentskillshub/cli audit owner/repo
每条结果都带它的评级和命中的具体 flag。--safe 会隐藏所有未审计及更差的。
诚实的免责声明(因为这正是全部的意义)
- 我们的 3% 是下限,不是上限。 学术深度分析(如 Liu et al., 2026,arXiv:2601.10338,n=31,132)给出的 agent skill 漏洞率高达 26.1%,因为它们分析语义而非仅仅模式。我们的规则引擎是刻意保守的第一遍 —— 只在命中具体红旗时才标
unsafe。把 3% 读作"问题的下限"。 - 规则扫描 ≠ 完整。 模式匹配只查模式。语义后门需要更深的审查 —— 那是按需层,不是这一层。
- ◯ unknown 不等于"大概没事"。 它的意思是没人审过。9.7 万的目录是 unknown。我们如实标灰,不美化。
- 所有数字都可复核。 每个评级都能在站上和 CLI 里看到。自己重算一遍。
一个只告诉你好消息的信任层,就不配叫信任层。关于这 9.7 万个 skill,我们能说的最有用的一句话是:我们还不知道 —— 而且我们会当面告诉你。
装之前先查:npx @agentskillshub/cli search "<你需要的能力>" --safe,或在 agentskillshub.top 浏览被评级的 skill。
团队/企业:更深的单 skill 审计 + 合规证据,见 agentskillshub.top/enterprise。