$npx -y skills add SafeAI-Lab-X/ClawKeeper --skill security-triageTriage GitHub security advisories for OpenClaw with high-confidence close/keep decisions, exact tag and commit verification, trust-model checks, optional hardening notes, and a final reply ready to post and copy to clipboard.
| 1 | # Security Triage |
| 2 | |
| 3 | Use when reviewing OpenClaw security advisories, drafts, or GHSA reports. |
| 4 | |
| 5 | Goal: high-confidence maintainers' triage without over-closing real issues or shipping unnecessary regressions. |
| 6 | |
| 7 | ## Close Bar |
| 8 | |
| 9 | Close only if one of these is true: |
| 10 | |
| 11 | - duplicate of an existing advisory or fixed issue |
| 12 | - invalid against shipped behavior |
| 13 | - out of scope under `SECURITY.md` |
| 14 | - fixed before any affected release/tag |
| 15 | |
| 16 | Do not close only because `main` is fixed. If latest shipped tag or npm release is affected, keep it open until released or published with the right status. |
| 17 | |
| 18 | ## Required Reads |
| 19 | |
| 20 | Before answering: |
| 21 | |
| 22 | 1. Read `SECURITY.md`. |
| 23 | 2. Read the GHSA body with `gh api /repos/openclaw/openclaw/security-advisories/<GHSA>`. |
| 24 | 3. Inspect the exact implicated code paths. |
| 25 | 4. Verify shipped state: |
| 26 | - `git tag --sort=-creatordate | head` |
| 27 | - `npm view openclaw version --userconfig "$(mktemp)"` |
| 28 | - `git tag --contains <fix-commit>` |
| 29 | - if needed: `git show <tag>:path/to/file` |
| 30 | 5. Search for canonical overlap: |
| 31 | - existing published GHSAs |
| 32 | - older fixed bugs |
| 33 | - same trust-model class already covered in `SECURITY.md` |
| 34 | |
| 35 | ## Review Method |
| 36 | |
| 37 | For each advisory, decide: |
| 38 | |
| 39 | - `close` |
| 40 | - `keep open` |
| 41 | - `keep open but narrow` |
| 42 | |
| 43 | Check in this order: |
| 44 | |
| 45 | 1. Trust model |
| 46 | - Is the prerequisite already inside trusted host/local/plugin/operator state? |
| 47 | - Does `SECURITY.md` explicitly call this class out as out of scope or hardening-only? |
| 48 | 2. Shipped behavior |
| 49 | - Is the bug present in the latest shipped tag or npm release? |
| 50 | - Was it fixed before release? |
| 51 | 3. Exploit path |
| 52 | - Does the report show a real boundary bypass, not just prompt injection, local same-user control, or helper-level semantics? |
| 53 | 4. Functional tradeoff |
| 54 | - If a hardening change would reduce intended user functionality, call that out before proposing it. |
| 55 | - Prefer fixes that preserve user workflows over deny-by-default regressions unless the boundary demands it. |
| 56 | |
| 57 | ## Response Format |
| 58 | |
| 59 | When preparing a maintainer-ready close reply: |
| 60 | |
| 61 | 1. Print the GHSA URL first. |
| 62 | 2. Then draft a detailed response the maintainer can post. |
| 63 | 3. Include: |
| 64 | - exact reason for close |
| 65 | - exact code refs |
| 66 | - exact shipped tag / release facts |
| 67 | - exact fix commit or canonical duplicate GHSA when applicable |
| 68 | - optional hardening note only if worthwhile and functionality-preserving |
| 69 | |
| 70 | Keep tone firm, specific, non-defensive. |
| 71 | |
| 72 | ## Clipboard Step |
| 73 | |
| 74 | After drafting the final post body, copy it: |
| 75 | |
| 76 | ```bash |
| 77 | pbcopy <<'EOF' |
| 78 | <final response> |
| 79 | EOF |
| 80 | ``` |
| 81 | |
| 82 | Tell the user that the clipboard now contains the proposed response. |
| 83 | |
| 84 | ## Useful Commands |
| 85 | |
| 86 | ```bash |
| 87 | gh api /repos/openclaw/openclaw/security-advisories/<GHSA> |
| 88 | gh api /repos/openclaw/openclaw/security-advisories --paginate |
| 89 | git tag --sort=-creatordate | head -n 20 |
| 90 | npm view openclaw version --userconfig "$(mktemp)" |
| 91 | git tag --contains <commit> |
| 92 | git show <tag>:<path> |
| 93 | gh search issues --repo openclaw/openclaw --match title,body,comments -- "<terms>" |
| 94 | gh search prs --repo openclaw/openclaw --match title,body,comments -- "<terms>" |
| 95 | ``` |
| 96 | |
| 97 | ## Decision Notes |
| 98 | |
| 99 | - “fixed on main, unreleased” is usually not a close. |
| 100 | - “needs attacker-controlled trusted local state first” is usually out of scope. |
| 101 | - “same-host same-user process can already read/write local state” is usually out of scope. |
| 102 | - “helper function behaves differently than documented config semantics” is usually invalid. |
| 103 | - If only the severity is wrong but the bug is real, keep it open and narrow the impact in the reply. |