一、技能概述
该技能用于 OpenClaw 项目中与 GitHub 安全公告(GHSA)相关的所有操作,涵盖从获取公告状态、验证私有 fork、准备 Markdown/JSON 负载,到最终发布和验证的完整流程。
核心原则:
-
在审查或发布仓库安全公告之前,必须先阅读
SECURITY.md -
任何发布操作前必须征得许可
-
该技能仅限 GHSA 工作,不得用于稳定版或 Beta 版发布
二、核心功能
1. 获取与检查公告状态
获取当前安全公告和最新的已发布 npm 版本:
gh api /repos/openclaw/openclaw/security-advisories/
npm view openclaw version --userconfig "$(mktemp)"
使用获取的输出确认公告状态、关联的私有 fork 以及漏洞负载结构。
2. 验证私有 fork PR 已关闭
在发布之前,必须验证公告的私有 fork 没有打开的 PR:
fork=$(gh api /repos/openclaw/openclaw/security-advisories/ | jq -r .private_fork.full_name)
gh pr list -R "$fork" --state open
PR 列表在发布前必须为空。
3. 安全地准备公告 Markdown 和 JSON
-
写入公告 Markdown:通过 heredoc 写入临时文件,不要使用转义的
\n字符串 -
构建 PATCH 负载 JSON:使用
jq构建,不要手动转义 shell JSON
示例模式:
cat > /tmp/ghsa.desc.md <<'EOF'
EOF
jq -n --rawfile desc /tmp/ghsa.desc.md \
'{summary,severity,description:$desc,vulnerabilities:[...]}' \
> /tmp/ghsa.patch.json
4. 按正确顺序应用 PATCH 调用
-
不要在同一 PATCH 调用中同时设置
severity和cvss_vector_string -
当公告需要这两个字段时,使用单独的调用
-
通过 PATCH 公告并设置
"state":"published"来发布——没有独立的/publish端点
示例:
gh api -X PATCH /repos/openclaw/openclaw/security-advisories/ \
--input /tmp/ghsa.patch.json
5. 发布后验证
发布后,重新获取公告并确认:
-
state=published -
published_at已设置 -
描述中不包含字面转义的
\\n
验证模式:
gh api /repos/openclaw/openclaw/security-advisories/ |
jq -r .description < /tmp/ghsa.refetch.json | rg '\\\\n'
三、主要用途
-
审查安全公告:获取并检查现有的 GHSA 公告状态和漏洞负载
-
修补安全公告:更新公告的摘要、严重等级、描述和漏洞信息
-
发布安全公告:将草案状态的公告正式发布为公开 GHSA
-
验证私有 fork 状态:确保发布前私有 fork 中没有未关闭的 PR
-
确认发布成功:发布后验证 state、published_at 和描述格式
四、常见陷阱(Footguns)
技能文档明确列出了以下常见问题:
| 陷阱 | 说明 |
|---|---|
| HTTP 422 发布失败 | 缺少必填字段,或私有 fork 仍有打开的 PR |
| Shell 中看似正确的负载实际错误 | Markdown 用转义换行符字符串组装时可能出错 |
| PATCH 顺序问题 | GHSA API 约束要求某些字段分开更新 |
| 公开硬编码/不发布评论 | 草案文本应避免原始 commit hash、PR 标题/编号和修复机制摘要。优先使用 patched-version 字段或仅发布措辞;将 SHA、PR 和实现说明保留在内部证据中 |
五、重要原则
-
先读 SECURITY.md:在审查或发布公告前必须阅读安全策略
-
发布前必须征得许可:任何 publish 操作前都要询问
-
仅限 GHSA:该技能不得用于稳定版或 Beta 版发布
-
私有 fork PR 必须为空:发布前必须确认
-
使用 heredoc 和 jq:安全地准备 Markdown 和 JSON,避免手动转义
-
分离 severity 和 cvss_vector_string:不要在同一 PATCH 调用中同时设置
-
发布通过 PATCH state=published:没有独立的 publish 端点
-
发布后验证描述格式:确认不包含
\\n
六、总结
OpenClaw GHSA Maintainer 是 OpenClaw 项目中专门用于 GitHub 安全公告(GHSA)维护与发布的技能,覆盖从获取公告状态、验证私有 fork、安全准备 Markdown/JSON 负载,到按正确顺序 PATCH 发布和最终验证的完整工作流。它与常规发布工作严格分离,强调先读安全策略、发布前征得许可、私有 fork 必须干净等安全原则,并明确列出了 HTTP 422、转义换行符、PATCH 顺序等常见陷阱。该技能适用于 OpenClaw 维护者在处理安全漏洞、发布安全公告和管理私有 fork 的场景。