OpenClaw GHSA Maintainer
이 스킬은 저장소 보안 권고사항 워크플로우 전용입니다. 일반 릴리스 작업은 release-openclaw-maintainer를 사용하십시오.
권고사항 안전 가드
- 저장소 권고사항을 검토하거나 게시하기 전에
SECURITY.md를 읽으십시오. - 게시 작업을 수행하기 전에 반드시 허가를 요청하십시오.
- 이 스킬은 GHSA 전용으로 취급하십시오. 안정 버전 또는 베타 릴리스 작업에는 사용하지 마십시오.
권고사항 상태 가져오기 및 검사
현재 권고사항과 최신 게시된 npm 버전을 가져옵니다:
gh api /repos/openclaw/openclaw/security-advisories/<GHSA>
npm view openclaw version --userconfig "$(mktemp)"
패치를 적용하기 전에 가져온 출력을 사용하여 권고사항 상태, 연결된 비공개 포크, 취약점 페이로드 형태를 확인하십시오.
비공개 포크 PR이 닫혔는지 확인
게시 전에 권고사항의 비공개 포크에 열린 PR이 없는지 확인합니다:
fork=$(gh api /repos/openclaw/openclaw/security-advisories/<GHSA> | jq -r .private_fork.full_name)
gh pr list -R "$fork" --state open
게시하기 전에 PR 목록이 비어 있어야 합니다.
권고사항 Markdown 및 JSON 안전하게 준비
- 권고사항 Markdown은 heredoc을 사용하여 임시 파일에 작성하십시오. 이스케이프된
\n문자열을 사용하지 마십시오. - PATCH 페이로드 JSON은
jq로 빌드하십시오. 수동으로 이스케이프된 셸 JSON을 사용하지 마십시오.
예제 패턴:
cat > /tmp/ghsa.desc.md <<'EOF'
<markdown 설명>
EOF
jq -n --rawfile desc /tmp/ghsa.desc.md \
'{summary,severity,description:$desc,vulnerabilities:[...]}' \
> /tmp/ghsa.patch.json
PATCH 호출을 올바른 순서로 적용
- 동일한 PATCH 호출에서
severity와cvss_vector_string을 함께 설정하지 마십시오. - 권고사항에 두 필드가 모두 필요한 경우 별도의 호출을 사용하십시오.
- 권고사항을 PATCH하고
"state":"published"로 설정하여 게시합니다. 별도의/publish엔드포인트는 없습니다.
예제 형태:
gh api -X PATCH /repos/openclaw/openclaw/security-advisories/<GHSA> \
--input /tmp/ghsa.patch.json
게시 및 성공 확인
게시 후 권고사항을 다시 가져와서 다음을 확인하십시오:
state=publishedpublished_at설정됨- 설명에 리터럴 이스케이프된
\\n이 포함되지 않음
확인 패턴:
gh api /repos/openclaw/openclaw/security-advisories/<GHSA>
jq -r .description < /tmp/ghsa.refetch.json | rg '\\\\n'
일반적인 GHSA 함정
- 필수 필드가 누락되었거나 비공개 포크에 여전히 열린 PR이 있는 경우 HTTP 422로 게시가 실패합니다.
- 셸에서 올바르게 보이는 페이로드라도 Markdown이 이스케이프된 개행 문자열로 구성된 경우 여전히 잘못될 수 있습니다.
- 권고사항 PATCH 순서가 중요합니다. GHSA API 제약 조건에서 요구하는 경우 필드 업데이트를 분리하십시오.
- 공개 강화/비게시 주석 및 초안 텍스트는 원시 커밋 해시, PR 제목/번호, 수정 메커니즘 요약을 피해야 합니다. 패치된 버전 필드 또는 릴리스 전용 표현을 사용하고, SHA, PR 및 구현 노트는 내부 증거에 남겨 두십시오.