* docs: add agent collaboration and git safety rules to AGENTS.md
* fix(portability): harden cross-platform path handling and install workflows
- add shared path resolution utility for advisory guardian components
- expand and normalize home-path tokens: ~, $HOME, ${HOME}, %USERPROFILE%, $env:USERPROFILE
- reject unresolved/escaped home tokens to prevent literal "$HOME" directory creation
- fix install/runtime path handling in:
- openclaw-audit-watchdog setup_cron and suppression config loader
- clawsec-suite advisory hook handler, suppression loader, and guarded installer
- remove hardcoded Homebrew binary assumptions in watchdog scripts/tests
- add LF enforcement via .gitattributes to reduce CRLF script breakage
- expand CI Node checks to linux/macos/windows matrix
- add cross-platform test coverage for path expansion and token rejection
- update README and SKILL docs with bash/zsh/PowerShell-safe path guidance
- add compatibility deliverables:
- docs/COMPATIBILITY_REPORT.md
- docs/REMEDIATION_PLAN.md
- docs/PLATFORM_VERIFICATION.md
Validation:
- node skills/clawsec-suite/test/path_resolution.test.mjs
- node skills/clawsec-suite/test/guarded_install.test.mjs
- node skills/clawsec-suite/test/advisory_suppression.test.mjs
- node skills/openclaw-audit-watchdog/test/suppression_config.test.mjs
- node skills/openclaw-audit-watchdog/test/render_report_suppression.test.mjs
* fix(advisory): avoid fail-open on invalid path vars and cover watchdog tests
* docs: move signing runbooks into docs folder
* docs: remove root-level signing runbooks after move
* chore(clawsec-suite): bump version to 0.1.3
* chore(openclaw-audit-watchdog): bump version to 0.1.1
* docs(changelog): add entries for clawsec-suite 0.1.3 and watchdog 0.1.1
* docs(changelog): credit @aldodelgado for PR #62 contributions
* feat(clawsec-suite): scope advisories to openclaw application
* fix(ci): run advisory scope tests without TypeScript loader
---------
Co-authored-by: David Abutbul <David.a@prompt.security>
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