* feat(clawsec-suite): integrate audit-watchdog and add email-gated setup * fix(clawsec-suite): escape shell env assignments in watchdog setup * fix(lint): remove unnecessary escapes in watchdog exec template * clawsec-suite: add dynamic remote skill catalog discovery with fallback * clawsec-suite: align signed feed defaults and checksum key compatibility * fix(lint): use globalThis fetch/AbortController in catalog script * Revert "fix(lint): remove unnecessary escapes in watchdog exec template" This reverts commit 09e40d2a8861e2d179137467c9ba938776609a56. * Revert "fix(clawsec-suite): escape shell env assignments in watchdog setup" This reverts commit 54d97653a6f8ac14c125ef14c59bca7532cfee15. * Revert "feat(clawsec-suite): integrate audit-watchdog and add email-gated setup" This reverts commit 1ba55dd69ecb7a248a53123277158ce27474d5f7. * fix(openclaw-audit-watchdog): escape shell env interpolation in setup_cron * ci(signing): enforce key consistency across docs, repo, and generated assets * docs(readme): document signing key consistency CI guardrails * chore(clawsec-suite): bump to 0.1.0 and record release changelog * chore(changelog): update to version 0.1.1 and enhance signing key drift control documentation * chore(clawsec-suite): bump version to 0.1.1
7.6 KiB
ClawSec Signing Operations Runbook
1) Purpose
This runbook defines operational procedures for introducing and running cryptographic signing in the ClawSec repository.
It covers:
- key generation
- GitHub secret management
- signing workflow integration
- key rotation and revocation
- incident response
2) Current branch reality (important)
As of branch integration/signing-work, advisory distribution is unsigned:
- Feed writers:
.github/workflows/poll-nvd-cves.ymlwritesadvisories/feed.jsonandskills/clawsec-feed/advisories/feed.json.github/workflows/community-advisory.ymlwrites the same files
- Feed publish path:
.github/workflows/deploy-pages.ymlcopies topublic/advisories/feed.json- also mirrors to
public/releases/latest/download/advisories/feed.json
- Feed consumers:
skills/clawsec-suite/hooks/clawsec-advisory-guardian/handler.tsskills/clawsec-suite/scripts/guarded_skill_install.mjs- both default to
https://clawsec.prompt.security/advisories/feed.json
This document defines the target operating model for signed artifacts while preserving compatibility during migration.
3) Target signed artifacts
Advisory feed channel
advisories/feed.json(payload)advisories/feed.json.sig(detached Ed25519 signature; base64)advisories/feed-signing-public.pem(pinned public key)
Release artifact channel (recommended)
<release>/checksums.json<release>/checksums.sigadvisories/release-signing-public.pem(or equivalent repo-pinned location)
4) Key roles and custody
- Security owner: approves key lifecycle changes and incident actions.
- Platform owner: maintains workflows and GitHub secrets.
- Reviewer: validates fingerprints in PRs/releases.
Policy:
- private keys are never committed
- public keys are committed and code-reviewed
- key generation occurs on trusted operator workstation or HSM-backed environment
5) Key generation (Ed25519)
Run from a secure workstation. Do not run on shared CI runners.
# Feed signing keypair
openssl genpkey -algorithm Ed25519 -out feed-signing-private.pem
openssl pkey -in feed-signing-private.pem -pubout -out feed-signing-public.pem
# Release checksums signing keypair (optional separate key)
openssl genpkey -algorithm Ed25519 -out release-signing-private.pem
openssl pkey -in release-signing-private.pem -pubout -out release-signing-public.pem
Generate fingerprints (store in ticket/change record):
openssl pkey -pubin -in feed-signing-public.pem -outform DER | shasum -a 256
openssl pkey -pubin -in release-signing-public.pem -outform DER | shasum -a 256
Optional test-sign before publishing:
echo '{"probe":"ok"}' > /tmp/probe.json
openssl pkeyutl -sign -rawin -inkey feed-signing-private.pem -in /tmp/probe.json -out /tmp/probe.sig.bin
openssl base64 -A -in /tmp/probe.sig.bin -out /tmp/probe.sig
openssl base64 -d -A -in /tmp/probe.sig -out /tmp/probe.sig.bin
openssl pkeyutl -verify -rawin -pubin -inkey feed-signing-public.pem -in /tmp/probe.json -sigfile /tmp/probe.sig.bin
6) GitHub secrets setup
Required secrets
CLAWSEC_SIGNING_PRIVATE_KEY— PEM-encoded Ed25519 private key (used for both feed and release signing)CLAWSEC_SIGNING_PRIVATE_KEY_PASSPHRASE— (optional) passphrase if the private key is encrypted
Procedure
- Go to Repo Settings → Secrets and variables → Actions → New repository secret.
- Paste full PEM including header/footer.
- Prefer GitHub Environment secrets (with required reviewers) for workflow scoping when possible.
- Record change ticket with:
- secret name
- creator
- creation time
- key fingerprint
Recommended environment protections
- Require manual approval for workflows that can use signing secrets.
- Restrict who can edit protected workflows.
- Enable branch protection for
mainand require review for workflow changes.
7) Workflow integration points
This repo already has feed mutation and deployment workflows. Signing should be inserted as a post-mutation, pre-publish control.
Feed pipeline
Current feed mutation points:
.github/workflows/poll-nvd-cves.yml.github/workflows/community-advisory.yml
Target addition:
- add signing step/workflow that:
- regenerates deterministic feed checksums manifest (optional but recommended)
- signs
advisories/feed.jsonintoadvisories/feed.json.sig - verifies signature in CI before commit/publish
Pages pipeline
Current publisher:
.github/workflows/deploy-pages.yml
Target update:
- copy
.sigfiles topublic/advisories/andpublic/releases/latest/download/advisories/ - fail deploy if expected signed companions are missing after migration enforcement date
Skill release pipeline (recommended hardening)
Current release generator:
.github/workflows/skill-release.ymlcreateschecksums.json
Target update:
- sign
checksums.jsonbeforesoftprops/action-gh-release - attach
checksums.sigto each release
8) Rotation policy and runbook
Rotation cadence
- Routine: every 90 days (or stricter org policy).
- Immediate: on suspected exposure, unauthorized workflow change, or unexplained signature mismatch.
Routine rotation steps
- Generate new keypair(s).
- Open PR that updates public key file(s) and fingerprints documentation.
- Add new private key(s) as GitHub secret(s).
- Merge workflow changes that use new key(s).
- Re-sign latest feed/release manifests.
- Validate verification in CI and in one external client.
- Remove old private key secret(s).
- Keep old public key reference only as long as required for historical verification.
Revocation steps
- Disable workflows using compromised key.
- Remove compromised GitHub secret(s).
- Commit revocation note and new public key.
- Re-sign latest artifacts with replacement key.
- Publish incident advisory with timestamp and impacted window.
9) Incident response playbook (signing-specific)
Triggers
- signature verification fails for newly published feed/release
- unknown commits/workflow edits touching signing paths
- leaked key material, accidental logging, or suspicious secret access
Severity guide
- SEV-1: key exfiltration confirmed or maliciously signed payload published
- SEV-2: verification failures with unknown cause
- SEV-3: procedural non-compliance, no active compromise
Response phases
- Containment
- pause signing/publish workflows
- block further feed merges if authenticity is uncertain
- Investigation
- review workflow run logs
- review commits affecting
.github/workflows/,advisories/, and key files - determine first-bad timestamp and affected artifacts
- Eradication
- rotate/revoke compromised key(s)
- restore trusted artifacts from known-good commit
- Recovery
- re-sign artifacts
- redeploy pages/releases
- verify via independent client check
- Post-incident
- publish timeline and remediation summary
- tighten controls (review gates, protected environments, secret scope)
10) Audit evidence checklist
For each release cycle or feed-signing run, retain:
- workflow run URL and commit SHA
- signer key fingerprint in use
- verification result logs
- operator/reviewer approvals
- any exception or bypass rationale
11) Minimum acceptance criteria before enforcement
Before requiring signatures in all clients:
- signed artifacts are produced consistently for at least 2 weeks
- deploy pipeline mirrors signature companions
- one rollback drill and one key rotation drill completed successfully
- incident response on-call owner identified and documented