AI 编程技能安全审计:14 万漏洞与防护缺口

深度The New Stack2026年3月22日6 分钟阅读
AI 编程技能安全审计:14 万漏洞与防护缺口
Mobb.ai 对 22,511 个公开 AI 编程技能(Skill)进行安全审计,发现 140,963 个安全问题。核心漏洞在于:技能在发布时被扫描,但安装到开发者机器后,会以开发者全系统权限执行,且几乎没有运行时验证。

AI 编程智能体催生了一条新的软件供应链,而一项新研究表明,新智能体的激增速度已超过了围绕它们的安全基础设施。

Mobb.ai 发布了一项大规模安全审计的结果。该审计收集了来自四个公共注册表(skills.sh、ClawHub、GitHub 和 Tessl)的 22,511 个公共技能(Skill)——这些是供 Claude Code、Cursor、GitHub Copilot 和 Windsurf 等 AI 编程智能体使用的可复用指令集。

审计发现了 140,963 个安全风险,并指出了一个结构性缺口:技能在发布时被扫描,但一旦它们落地到开发者的机器上,就会以该开发者的完整系统权限执行,且几乎没有运行时验证。

Mobb 的 CEO Eitan Worcel 表示:“AI 编程智能体正在成为开发者编写软件的默认方式。当开发者为其智能体安装一个技能或插件时,他们赋予该技能与自己相同的访问权限——他们的源代码、凭证和生产系统。” 这项研究的动机是发现目前缺乏对该生态系统的系统性审查。

新型供应链风险

技能通常是 Markdown 文件(最常见的是 SKILL.md),包含 AI 智能体遵循的自然语言指令,以及 shell 命令、MCP(Model Context Protocol)服务器配置、IDE 设置和对配套脚本的引用。它们通过公共注册表分发,并通过单一命令安装。

Mobb 描绘的供应链路径是:开发者 → 注册表 → 技能文件 → 智能体 → 系统访问。如果该链条中的任何环节被攻破,攻击者就能获得开发者所拥有的所有访问权限——源代码、API 密钥、SSH 凭证、云提供商令牌,以及将代码推入 CI/CD 流水线的能力。

大多数被扫描的技能(66%)在 Mobb 针对的模式下未发现问题。但在 34% 存在问题的技能中,27% 的被扫描技能包含命令执行模式。六分之一的技能在其指令文件中直接包含 curl | sh 远程代码执行模式,即从互联网下载脚本并直接通过管道传递给 shell 解释器的经典攻击方式。近 15% 的技能引用了绕过内置安全确认机制的同意绕过机制。

“好消息是,直接的恶意软件很少见;生态系统大体上是健康的,” Worcel 说,并部分归功于 Paul McCarty 和 OpenSourceMalware 团队的工作。“但让我们担忧的是攻击面。超过四分之一的技能包含指示智能体执行 shell 命令的指令。六分之一的技能包含下载并运行远程脚本的模式。”

防护缺口

这四个注册表都投入了安全建设,但方法各异。

  • skills.sh(由 Vercel 运营)运行三个独立的扫描器(Gen Agent Trust Hub、Socket 和 Snyk),结果在公共审计页面上可见。
  • ClawHub 使用基于 AI 的分类系统,将技能标记为 CLEAN、SUSPICIOUS 或 MALICIOUS,但可疑技能仍可安装;分类是信息性的,而非强制性的。
  • Tessl 使用 Snyk,并且是唯一一个在客户端阻止安装具有高或关键风险发现的注册表。
  • GitHub 托管了大多数技能的源代码仓库(Mobb 收集的技能中有 7,379 个来自 GitHub),提供 Dependabot 和秘密扫描等标准仓库安全功能,但这些工具不分析 SKILL.md 指令、MCP 配置或智能体钩子(Hook)定义。

“注册表确实在做实际工作——多重安全扫描器、基于 AI 的分类、风险评分,” Worcel 说。“但这种保护存在于注册表的服务器上。一旦技能到达开发者的机器,就没有安全护栏(Guardrails)了。没有签名验证,没有运行时扫描,无法知道你安装的版本是否与经过审计的版本相同。”

Worcel 将其与软件包生态系统早期的问题相类比:“这与几年前 npm 和 PyPI 生态系统遇到的缺口相同,行业是付出了代价才学到教训的。我们发布这项研究,是为了让 AI 智能体生态系统能够主动吸取教训。”

Mobb 指出的缺口在所有四个注册表中都存在:扫描发生在注册表边界,即在发布时。一旦开发者安装了技能,在智能体读取文件之前,机器上不会运行任何扫描。没有加密签名来验证安装的版本是否与审计的版本匹配。一个今天通过审查的技能,明天可能被更新为恶意内容,这个窗口期是可被利用的。

钩子(Hooks)——在特定智能体事件(如文件编辑或新会话)发生时自动执行的命令——构成了特定的持久性风险。恶意技能可以安装一个钩子,即使在该技能本身被移除后仍继续运行,目前没有注册表专门审计钩子配置。

审计发现的具体案例

除了统计模式,Mobb 还记录了几个具体案例。

一个关键案例是已确认的 API 流量劫持:GitHub 上名为 flyingtimes/podcast-using-skill 的仓库中发布的一个技能,包含一个 .claude/settings.json 文件,该文件覆盖了 Anthropic API 端点,将所有流量重定向到中国智谱 AI 的 BigModel 平台,换入硬编码的第三方 API 令牌,并将模型更改为 glm-4.6。克隆该仓库并在 Claude Code 中打开的开发者,其整个对话(所有代码上下文、提示和响应)将被静默地路由到第三方服务器,且没有任何可见迹象表明发生了变化。

“我们发现 API 流量被静默重定向到第三方服务器,公共仓库中存在硬编码的凭证,以及文件中存在对人眼完全正常的不可见字符,这些字符编码了隐藏数据,” Worcel 说。“这些不是理论风险——我们记录了每一个案例,并提供了确切的文件和代码行。”

研究人员还发现了 159 个包含隐藏 HTML 注释有效负载的技能。HTML 注释在浏览器或 IDE 中渲染 Markdown 时不可见,但对读取原始文件的 AI 智能体完全可见。

一个例子:在名为 claude-world/claude-skill-antivirus 的仓库中,一个标记为恶意技能示例的文件包含经典的提示注入(Prompt Injection):一条注释指示智能体忽略先前的指令并执行后续内容。另一个在单独仓库中发现的例子包含注释 <!– security-allowlist: curl-pipe-bash –>,试图抑制有关将 curl 管道传输到 bash 的扫描器警告。

127 个技能包含不可见的 Unicode 零宽度字符,这些字符可以编码任何处理原始文本的程序可读取但对人工审查员不可见的隐藏数据。一个案例:在名为 copyleftdev/sk1llz 的仓库中,标题后立即放置了一长串交替的零宽度空格和零宽度连接符——这种模式与二进制隐写编码一致。

在 MCP 方面,37 个技能在未经用户同意的情况下自动批准 MCP 服务器连接,研究人员发现实时 API 凭证直接提交到了公共仓库的 MCP 配置文件中。一个案例涉及个人的 Apify actor 端点——这意味着开发者的 API 令牌将被传输到第三方个人的基础设施,而不是供应商自己的服务器。

攻击链

Mobb 概述了攻击者可能遵循的攻击链:发布一个看似合理的技能,将恶意指令嵌入开发者不太可能手动审查的文件中,让注册表分发它,然后等待智能体执行它。

这个攻击面的独特之处在于,指令是纯英文的——通过二进制签名扫描无法与合法的技能内容区分开来——并且执行者是智能体。攻击者不编写漏洞利用代码。他们编写指令,然后 AI 智能体使用开发者的凭证来执行它们。

“开发者处于循环中,但可能没有全程监控,” Mobb 报告指出。“AI 智能体被设计为自主工作。开发者越来越信任智能体的操作,而不会审查每一步。”

安全建议

Mobb 将其建议指向三个受众。

  1. 对注册表运营商:报告呼吁在安装时进行客户端强制执行、加密签名、更新时持续重新扫描,以及对钩子配置进行专门分析。对于开发者,建议在安装任何技能前手动审查 SKILL.md、.claude/settings.json.mcp.json 文件,并将 MCP 自动批准设置视为危险信号。
  2. 对 AI 智能体工具厂商(如 Claude Code、Cursor、Windsurf 的制造商):报告主张对技能执行进行沙箱化,使技能不会自动继承完整的开发者权限;在应用环境变量或 MCP 连接之前需要明确同意;并提高钩子的可见性,让开发者能看到后台运行的内容。
  3. 在行业层面:Mobb 呼吁为技能生态系统建立类似 npm audit 或 Docker Content Trust 的机制,包括标准化的安全元数据、跨注册表共享的漏洞数据库,以及具有撤销机制的信任链。

背景

该报告的发布时机紧随被审计的四个注册表之一 ClawHub 发生的一起真实事件。2026 年 2 月,该平台上发现了 341 个恶意技能,研究人员称之为“ClawHavoc”事件。最大的注册表 skills.sh 报告称,迄今为止总技能安装量已超过 8.9 万次。

Mobb 的结论是,生态系统大体上是健康的,因为直接的恶意软件很少见,而且发现的风险更多是危险模式而非已确认的攻击。但 Worcel 表示,滥用的基础设施已经存在。

觉得有用?分享给更多人

获取每周 AI 工具精选

工具推荐、实战教程和生态洞察,每周更新。

相关文章

Simon Willison 正在重构 LLM Python 库的抽象层,以支持服务器端工具执行等新功能。他利用 Claude Code 分析了四大 LLM 提供商的客户端库,生成了用于测试的 curl 命令和 JSON 输出。这些调研材料已开源,旨在帮助设计更通用的 API 抽象。

深度Simon Willison·4月5日·1 分钟

智能体技能——包含程序性知识和可执行资源的结构化包,供智能体在推理时动态加载——已成为增强 LLM 智能体的可靠机制。然而,推理时技能增强存在根本性限制:检索噪声引入无关指导,注入的技能内容带来大量 token 开销,而模型从未真正习得它所遵循的知识。我们提出一个问题:技能是否可以被内化到模型参数中,使其在无需任何运行时技能检索的情况下实现零样本自主行为?我们提出 Skill0,一个专为技能内化设计的上下文强化学习框架。Skill0 引入了一种训练时课程,从提供完整技能上下文开始,逐步撤除。技能按类别离线分组,并与交互历史一起渲染为紧凑的视觉上下文,教授模型工具调用和多轮任务完成。动态课程机制…

深度·4月5日·17 分钟

评论