OSC开源模力公众号文章

Agent 越来越能干,Skill 安全谁来把关?

正式「上岗」之前,先做一次安全体检

OSC开源模力

公众号 · 13 篇文章

图片

今年年初,OpenClaw 带火了「养龙虾」。

热度已经过去了,Agent 却没退场。研发在用 Claude Code、Codex 读代码、改代码、跑命令;办公的同事开始让 WorkBuddy、豆包 Work、千问办公整理文档、分析数据、做汇报,甚至跨应用把一整套活儿干完。

Agent 正在从「陪你聊天」变成「替你干活」。要让它更懂某一类工作,最常用的办法就是给它装 Skill。装上一个代码审查 Skill,它就知道该怎么查代码;装一个数据分析 Skill,它就知道数据从哪读、怎么处理、结果往哪输出;装一个办公 Skill,它就能按固定流程整理会议纪要、做周报。

问题也跟着来了:Agent 学到的新技能,到底是谁教的?里面写了什么?它又准备在企业环境里做些什么?

图片

一从「龙虾」风险提示,看所有 Agent 的共同问题

2026 年 3 月 11 日,工业和信息化部网络安全威胁和漏洞信息共享平台(NVDB)发布了《关于防范 OpenClaw(「龙虾」)开源智能体安全风险的「六要六不要」建议》。

六条建议包括使用官方最新版本、控制互联网暴露面、坚持最小权限、防范社会工程学攻击、建立长效防护机制等。其中第四条直接点名了 Skill 市场:

“

谨慎使用技能市场,在安装前审查技能包代码,不要使用要求下载 ZIP、执行 Shell 脚本或输入密码的技能包。

同一份风险分析把智能办公列为典型场景,指出它主要面临供应链攻击和企业内网渗透风险。

这份建议针对 OpenClaw,但指出的问题不只属于 OpenClaw。不管是编码 Agent 还是办公 Agent,只要能加载外部 Skill、按其中的指令读文件、跑脚本、连服务,这类风险就在。

Skill 表面像一份写给 Agent 的工作说明。打开来看,里面可能还有 Python、Shell、JavaScript 脚本,有配置文件、第三方依赖和外部下载地址。它教 Agent 怎么做事,也要求 Agent 拿到文件、网络、命令执行和账号凭证这些权限。

这有点像给新同事发了一本工作手册——只不过这位新同事同时还拿到了电脑终端、文件柜钥匙和外部系统的通行证。会干活当然是好事。钥匙发到了谁手里、能打开哪些门,最好提前说清楚。

《关于防范 OpenClaw(「龙虾」)开源智能体安全风险的「六要六不要」建议》摘要
《关于防范 OpenClaw(「龙虾」)开源智能体安全风险的「六要六不要」建议》摘要

二政策文件已经给出风险特征,识别出来却有点难度

「不要使用要求下载 ZIP、执行 Shell 脚本或输入密码的技能包」——这条建议本身很直白。

真去做,就没那么直白了。一个 Skill 要是明写「请下载木马并输入密码」,没人会装。现实中的风险通常被包装成「安装前置依赖」「完成账号授权」或者「提升运行性能」。

下载压缩包、装依赖、配凭证,本身都不一定是恶意的——大量正常 Skill 也要做这些。真正要判断的是四件事:这些操作跟 Skill 声明的功能对不对得上,脚本具体干了什么,凭证会被谁用,数据最后发到哪里。

一个 Skill 看起来在教 Agent 干活,背后可能在教用户下木马。2026 年初的 ClawHavoc 事件中,ClawHub 被发现曾出现至少 1,184 个恶意 Skill,部分样本累计下载超过 1.4 万次。

还有一类更隐蔽的:用户只是想让 Agent 取个天气、把天气数据发到自己邮箱,Skill 实际却在偷本地文件里的可信配置。

图片
“

攻击者不一定需要先攻破 Agent。

它只需要让恶意操作看起来像完成任务所必需的一步,再等用户点一次「确认」。

三源盾先把 Skill「翻译」成人更容易看懂的样子

以前想搞清楚一个 Skill 能做什么,最直接的办法是打开 SKILL.md 从头读到尾。

麻烦在于作者之间的写法差得太远。有的只有几句功能介绍,有的像一份十几页的技术文档,还有的把使用步骤、命令、依赖、注意事项全混在一起。它本来就是写给 Agent 看的,不适合用户快速读、快速比。

比如一个 Skill 的介绍只写「用于社交平台内容分析」。用户得继续往下读完整份说明,才能弄清它到底是做关键词搜索、热门内容发现还是趋势分析;运行时要不要浏览器、爬虫或第三方接口;要不要登录账号、配 API Key,或者把数据发到外部服务。要是同时比三四个同类 Skill,基本就是在做阅读理解。

源盾保留作者提供的原始 SKILL.md,同时通过「能力分析」,把散在 Skill 文件各处的信息整理成结构化的、更容易读的形式。

原来用户得自己从原始说明里找、自己推断;现在可以先在源盾上看到这个 Skill 能完成哪些具体任务、可能调用什么工具、需要什么运行环境、是否依赖外部服务、要不要账号凭证或 API Key。

下面是源盾 Skill 市场某个 Skill,原文和能力分析的对比展示:

  • 示例:SKILL.md 原文
示例:SKILL.md 原文
示例:SKILL.md 原文
  • 示例:经过源盾能力分析后的 Skill 介绍
示例:经过源盾能力分析后的 Skill 介绍
示例:经过源盾能力分析后的 Skill 介绍

四看懂之后,源盾再做一次六维安全审计

理解 Skill 能做什么只是第一步。接下来还要判断:它声明自己要做的事情,与实际要求 Agent 执行的操作,是不是一回事。

源盾结合静态扫描与 AI 分析,从六个维度对 Skill 进行安全审计:

图片
  • 指令安全:是否诱导 Agent 绕过限制、跳过确认或执行危险操作;
  • 异常行为:实际行为是否超出 Skill 声明的功能范围;
  • 依赖安全:依托于 Gitee 安全研究院 38 万余条漏洞情报、投毒情报,迅速判定组件、运行依赖是否存在已知风险;
  • 数据安全:是否读取源码、文件、密钥等敏感数据并向外发送;
  • 权限安全:文件、网络和命令执行权限是否超出任务需要;
  • 代码安全:脚本中是否存在危险函数、命令执行、注入或任意文件访问。

静态扫描负责发现代码、依赖和高风险模式,AI 则结合 Skill 的功能说明、文件内容和执行上下文进一步分析。

“

例如,一个语音摘要 Skill 需要读取 API Key,并调用外部语音服务。仅仅出现「读取密钥」和「访问外部接口」,不代表它一定在窃取数据。还需要判断它访问了什么服务、是否符合功能需要,以及有没有把密钥或其他数据发送到无关地址。

示例 1:依赖安全风险

Skill 的组件声明文件没有锁定组件安装版本,实际安装时可能把带高危漏洞的组件包版本拉到本地环境。

示例 1:依赖安全风险
示例 1:依赖安全风险

示例 2:代码安全:命令注入

Skill 包里的几个脚本把变量直接拼进 execSync 的字符串,交给系统 Shell 执行,等于给变量开了个「能当命令跑」的口子。外面虽然套了双引号,但 Shell 双引号拦不住 ; 和 $( )。只要变量值能被外部(比如被扫描的第三方 Skill 包)掺进恶意字符,就能偷偷多跑任意命令。

示例 2:代码安全:命令注入
示例 2:代码安全:命令注入

示例 3:权限安全风险

这个监控脚本发现某个技能缺依赖时,会自己 npm install,不请示用户,也不在能力画像里声明。而 npm install 会自动执行依赖包里的安装脚本,相当于以用户权限跑第三方代码。它还特意加了 --no-audit,把安全告警静音。

示例 3:权限安全风险
示例 3:权限安全风险

五Agent 越来越多,企业需要统一的 Skill 安全入口

今天,企业面对的已经不再是要不要使用某一个 Agent。

研发团队可能在使用 Claude Code、Codex,办公团队可能接触 WorkBuddy、豆包 Work、千问办公,其他业务团队还会选择更多垂直 Agent。不同 Agent 可以来自不同厂商,但它们引入外部 Skill 时,面对的是同一类问题:

  • Skill 来自哪里?
  • 包含什么文件?
  • 需要哪些权限?
  • 会把数据发送到哪里?
  • 当前版本是否经过检查?

国企、金融、通信、军工这些领域,Agent 还可能跑在企业网络或私有化环境里,接触源码、内部文件、业务系统和访问凭证。所以,Skill 安全治理不能靠员工安装前「仔细看看」,也不该给每一种 Agent 各建一套孤立的检查流程。

“

源盾希望提供的是面向不同 Agent 的统一 Skill 发现与安全审计入口:让外部 Skill 在进入企业使用范围之前被理解、被检查,并留下明确的版本和风险依据。

CNCERT(国家互联网应急中心)的安全使用指南也建议,企业引入新 Skill 前应做安全审核和测试,把审核通过的 Skill 存进内部仓库,避免 Agent 在运行时直接获取和执行未经存档的外部代码。

落到可执行的层面,源盾把「安装前审查」拆成五件能验证的事:来源能够看见,功能能够理解,文件能够查看,版本能够校验,风险能够解释。

这五件事不解决所有问题。没有任何工具能替企业做完所有安全决定——源盾能做的,是让这些决定建立在明确的信息和证据上,而不是一句「应该没事」。

Agent 会越来越多,Skill 也会越来越多。给 Agent 装新技能本身不是问题。

正式「上岗」之前,先做一次安全体检。

图片

前往微信阅读全文

内容来自公众号,可前往微信查看原文。

查看作者的更多文章 →订阅更新、RSS 与阅读指南 →