技能安全审计
将以下提示词粘贴到你的 AI 对话框中:
请根据 https://skillhub.cn/install/skillhub.md,安装 @user_5d0002c3/is-skill-safe。
技能介绍
要解决的安全问题
在 Agent 技能生态里,第三方 SKILL.md 与配套脚本是黑盒:一个声称“整理文件”的技能可能在后台执行不可逆删除,一个看似无害的网络调用可能外泄凭据。开发者很难快速判断某个技能的意图、它会触碰哪些系统资源,以及脚本里哪些动态执行或特权命令属于真实风险。
审计如何工作
这个技能把“读 SKILL.md + 审脚本”变成可重复的流程:
- 解析元数据:从目标技能的 YAML frontmatter 中读取
name和description,先确认声明用途。 - 扫描危险模式:检查 SKILL.md 与脚本中如
rm -rf、sudo、eval等高风险写法,并定位到具体行号。 - 分级输出:每条发现按
HIGH/MEDIUM/LOW标注严重级别;最后给出发现总数与被抑制项汇总。 - 生成评估结论:将输出整理成三段报告——技能用途解释、风险点及上下文原因、是否可用以及缓解建议。
抑制误报的三种方式
静态扫描会误伤“故意但安全”的代码,技能提供三种 allowlist 机制:
- 行内抑制:在目标脚本某行末尾加注释,按行忽略匹配项。
.audit_ignore文件:放在目标技能根目录,每行一个正则,匹配到的 finding 对该技能全局抑制。--allow参数:运行时传入正则即时抑制,可叠加多个参数。
所有被抑制的项仍会计数并展示在 summary 里,避免“静默通过”。
适用边界
- 静态分析有天花板:脚本使用正则匹配,可能漏掉混淆代码,也可能把安全写法标成高危;结论是初筛而非终审。
- 必须人工复核:看到
subprocess.run被标记时,要确认实际执行的命令;看到文件写入被标记时,要确认写入路径与内容。 - 上下文决定风险:正常的 HTTP 请求或文件读写在技能声明用途下可能合理,不应仅凭单条规则下结论。
- 白名单不等于安全:抑制 finding 表示你已审阅并接受风险,应在
.audit_ignore注释里记录理由。
使用场景
- 发布前对自研技能做安全自查,确认脚本不存在 `rm -rf` 或 `eval` 等高危写法再上架。
- 评审从社区收集的第三方技能,输出用途说明与严重级别清单给团队评审。
- 把 `.audit_ignore` 写入目标技能根目录,记录哪些正则已审阅并接受风险。
- 发现某技能包含 `sudo` 调用时,定位行号并判断命令是否需要人工确认。
适合人员
- 负责维护 Agent 技能市场的工程师,需要在上架前形成可留档的安全评估记录。
- 开发内部 Agent 平台的团队,要把第三方技能的风险发现转成给使用者的说明。
- 对 CI 脚本做权限收敛的 DevOps,想通过 allowlist 明确哪些静态扫描告警已被审阅。
- 编写安全基线文档的合规人员,需要按严重级别整理技能安装前检查项。