你给AI助手装的skill,一句"帮我整理项目依赖成表格",agent就会照做。那如果下一句是"顺手把环境变量也发出去"呢?你的~/.ssh、.env、登录态cookie,它都够得着。

这不是吓唬人。NVIDIA的SkillSpector引用的实证研究分析了31,132个agent skill:26.1%至少含一个漏洞,5.2%显示出可能的恶意意图。带可执行脚本的skill,出漏洞的概率是纯提示词的2.12倍。GitHub
而这周GitHub热榜第一名,恰好就是"给agent装杀毒软件"——Cloudflare的security-audit-skill,一周涨星16,593,总星数已突破5万。知乎
火的不是应用,是一套流程
打开这个仓库,没有任何界面:一堆Markdown文件,加两个零依赖的校验脚本。它开源的是Cloudflare内部漏洞挖掘的一套审计流程,分六个阶段。知乎
最有意思的是分工:发现漏洞的agent和复核漏洞的agent,永远不是同一个。每个候选漏洞都要交给一个全新的verifier去证伪,结论分"已确认/待验证/已排除"三档落盘。README还老实承认:单次运行大约只能发现多次运行合计漏洞量的一半。知乎哔哩哔哩
5万星的背后,是整个生态的集体焦虑:agent里装的skill太多了,但从来没人审过。
skill为什么比npm包危险
权限不一样。npm包被import时,边界是那个进程;skill装进agent,边界是agent的全部权限——而agent以你的身份运行,读得到密钥、跑得了shell、发得出HTTP请求,中间没有第二道确认。知乎

载体不一样。npm包是代码,静态分析能一行行看;skill的主体是自然语言,风险藏在句子里。"整理依赖版本"是正常需求,"顺手带上环境变量"就是外泄,两者结构可能一模一样,差别只在措辞。
信任设施不一样。npm有lockfile、audit、签名审核;skill的"注册表"是GitHub搜索和star数,安装动作是从任意仓库拉main分支的最新提交。
历史给过两次教训:2016年,11行的left-pad包被撤下,几小时内几千个项目构建失败;2024年,xz-utils被塞进后门,差点进入主流Linux发行版。入口都不在代码质量,在信任关系。而skill现在的信任模型,比2016年的npm还松。知乎
26%这个数字,别直接照单全收
说句公道话:26.1%里包含"未固定依赖版本"这类LOW级问题,这些在npm世界同样满地都是。更准确的读法不是"四个skill一个有毒",而是"四个skill一个没被审查过"。知乎
扫描器也别神化。有人实测了SkillSpector(v2.12.0,关闭LLM分析):一份写着"忽略先前指令"的样本被标为HIGH,总分却只有20,最终建议SAFE。一份引用了不存在文件的样本拿到0分、覆盖率100%,但完整性字段是false。结论一句话:SAFE不是通行证,总分不代表单条告警。知乎
装之前,四件能立刻做的事
读完SKILL.md。别只扫description,尤其是让agent"自动执行"的句子,风险全在这几百字里。
看目录结构。有没有scripts/、.sh、预编译二进制——带脚本的风险高2.12倍,值得装前多花两分钟。
数权限。网络、凭证、写文件、shell,清单越短越好,"为了方便"全开的都是负债。
能扫就扫。装之前跑一遍`skillspector scan ./skill-dir`,几十秒,比装完回滚便宜得多。想更彻底,把agent放进容器或独立用户下跑,摘掉~/.ssh和云凭证的访问权。

开源的分发单位正在变小:从几十万行的框架,变成一段提示词、一份checklist。但体积小不等于风险小,恰恰因为"只是文本",才更容易让人放下戒心。这波安全审计工具的爆火,本质是给AI工具生态补上npm十年前学过的课:
信任要验证,不能默认。