security-triage について
OpenClaw のセキュリティアドバイザリー草案や GHSA 報告を審査する、メンテナー向けのスキルです。信頼境界、リリース済みバージョン、悪用経路、機能上のトレードオフを踏まえ、終了・継続・範囲縮小を判断します。
主な機能
- 01ポリシーと該当コードパスを確認
- 02影響を受けるリリース済みバージョンを検証
- 03信頼境界と悪用可能性を評価
- 04既存アドバイザリーと報告を照合
- 05脆弱性の扱いとハードニングを分離
活用シーン
- 01新しい GHSA 報告のトリアージ
- 02アドバイザリー終了案のレビュー
- 03リリースへの影響を判定
- 04メンテナー向け返信を作成
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ openclaw/ openclaw --skill security-triageインストール後、Claude Code で/security-triageを入力して読み込まれたか確認します。
詳細
セキュリティトリアージ
OpenClaw のセキュリティアドバイザリ、草案、または GHSA レポートをレビューするときに使用します。
目的:実際の問題を過剰にクローズしたり、不要なリグレッションをリリースしたりせず、メンテナーが高い確信を持ってトリアージできるようにします。
クローズの基準
次のいずれかに該当する場合に限り、クローズします。
- 既存のアドバイザリまたは修正済みの問題と重複している
- リリース済みの動作に照らして無効である
SECURITY.mdの対象範囲外である- 影響を受けるリリース/タグより前に修正されている
main が修正済みという理由だけでクローズしてはいけません。最新のリリース済みタグまたは npm リリースが影響を受ける場合は、適切なステータスでリリースまたは公開されるまでオープンのままにしてください。
必読資料
回答する前に、以下を確認してください。
SECURITY.mdを読む。gh api /repos/openclaw/openclaw/security-advisories/<GHSA>で GHSA の本文を読む。- 問題として指摘されたコードパスを正確に調査する。
- リリース済みの状態を確認する:
git tag --sort=-creatordate | headnpm view openclaw version --userconfig "$(mktemp)"git tag --contains <fix-commit>- 必要であれば、
git show <tag>:path/to/file
- 同種の問題が正式に扱われているか検索する:
- 公開済みの既存 GHSAs
- 過去に修正されたバグ
SECURITY.mdですでに扱われている、同じ信頼モデル上の分類
レビュー方法
各アドバイザリについて、次のいずれかを判断します。
closekeep openkeep open but narrow
コメントやクローズが関わる場合は、原則として一度に 1 件のアドバイザリを扱います。
- GHSA を 1 件だけレビューする。
- 最初に GHSA の URL を出力する。
- 議論に向けて、判断と根拠を要約する。
- メンテナーがそのまま使えるコメントを 1 件作成する。
- そのコメント 1 件だけをクリップボードにコピーする。
- 次の GHSA に進む前に、Peter が投稿または議論するのを待つ。
Peter から明示的に一括対応を求められない限り、複数のクローズコメントをまとめてはいけません。
次の順で確認します。
- 信頼モデル
- 前提条件は、すでに信頼されたホスト/ローカル/プラグイン/オペレーターの状態の中にあるか?
SECURITY.mdでは、この分類が対象外またはハードニングのみと明示されているか?
- リリース済みの動作
- バグは最新のリリース済みタグまたは npm リリースに存在するか?
- リリース前に修正されているか?
- 悪用経路
- レポートは、単なるプロンプトインジェクション、ローカルの同一ユーザーによる制御、またはヘルパーレベルのセマンティクスではなく、実際の境界回避を示しているか?
- データが
SECURITY.mdで明示されている信頼済みのワークスペースメモリファイル間でのみ移動する場合、「インジェクションマーカー」だけをセキュリティバグとして扱ってはいけません。 - その場合、サニタイズが想定されるメモリのワークフローを維持するのであれば、任意のハードニングとして位置付けてください。
- 機能とのトレードオフ
- ハードニングの変更によって意図されたユーザー機能が損なわれる場合は、提案する前にその点を明示してください。
- 境界上必要な場合を除き、デフォルト拒否によるリグレッションよりも、ユーザーのワークフローを維持する修正を優先してください。
- ハードニングのフォローアップ
- GHSA をクローズすべき場合でも、文書化された信頼境界を変更せずに、意図しない操作のリスクを減らす限定的なハードニング変更があるか検討してください。
- ハードニングと脆弱性のステータスは分けてください。「GHSA のクローズには不要ですが、検討する価値があります」と表現してください。
- ハードニングを取り上げるのは、具体的で、リスクが低く、メンテナー/オペレーターの意図されたワークフローを維持できる場合に限ってください。
- ハードニングに製品/セキュリティモデルの変更が必要な場合は、その旨を明示し、クローズに必須の修正であるかのように示してはいけません。
回答形式
メンテナーが投稿できるクローズ返信を準備する場合:
- 最初に GHSA の URL を出力する。
- 次に、メンテナーが投稿できる詳細な返信案を作成する。
- 以下を含める:
- クローズする正確な理由
- 正確なコード参照
- リリース済みタグ/リリースの正確な情報
- 該当する場合は、修正の由来または正式な重複 GHSA
- 価値があり、機能を維持できる場合に限り、任意のハードニングに関する注記
断定的かつ具体的で、防御的にならない口調にしてください。
公開文言の衛生管理
- 公開するアドバイザリーテキストには、生のコミットハッシュ、PR のタイトル/番号、修正メカニズムの概要を含めないでください。パッチ適用済みのリリース/バージョンフィールドのみを使用してください。
- 正確なコミット SHA、PR、実装メモは、内部メモと検証ファイルに記載してください。
- 強化対応/非公開の結果については、エクスプロイトの詳細、「修正内容」テキスト、「修正コミット」セクションを追加しないでください。報告者に感謝し、謝辞を残し、
SECURITY.mdの境界を明示し、GHSA は公開せずにクローズすると明確に伝えてください。 - CVE/GHSA を公開するテキストでは、修正済みリリースを記載した
### Patched Versionsを優先してください。Peter から公開情報として明示的に求められない限り、パッチの仕組みを説明しないでください。 - Peter から明示的に求められない限り、変更履歴やリリースノートの文言に GHSA ID を含めないでください。
ディスカッションモード
Peter が GHSA コメントを手動で投稿する場合は、次の手順に従ってください。
- URL を示します。
- 簡潔な判定(
close、keep open、またはkeep open but narrow)を伝えます。 - 最も強力な根拠を箇条書きにします。
- 任意の強化対応は、クローズ理由とは分けて記載します。
- 提案するコメント本文を
pbcopyでコピーします。 - 1 件のアドバイザリーへの返信後に応答を終了します。Peter が続行を指示するまで、次のアドバイザリーに進まないでください。
GitHub API から非公開アドバイザリーにコメントを投稿できない場合は、その旨を一度伝え、クリップボード/UI への貼り付けを引き続き使用してください。
クリップボードの手順
現在のアドバイザリーに対する最終投稿本文を作成したら、コピーします。
pbcopy <<'EOF'
<final response>
EOF
クリップボードに、そのアドバイザリーに対する提案返信が入ったことをユーザーに伝えてください。
便利なコマンド
gh api /repos/openclaw/openclaw/security-advisories/<GHSA>
gh api /repos/openclaw/openclaw/security-advisories --paginate
git tag --sort=-creatordate | head -n 20
npm view openclaw version --userconfig "$(mktemp)"
git tag --contains <commit>
git show <tag>:<path>
gh search issues --repo openclaw/openclaw --match title,body,comments -- "<terms>"
gh search prs --repo openclaw/openclaw --match title,body,comments -- "<terms>"
サイバー分類器による中断
許可された防御目的の作業がサイバー分類器によって中断された場合は、その限定されたタスクにのみ、承認済みで利用可能な Daybreak Blue の経路を使用し、その後、以前のモデルに戻してください。承認済みの ID、範囲、権限、サンドボックス、レビューゲートを維持してください。アクセス拒否、許可されていないリクエスト、拒否されたツール操作を回避するためにモデルを切り替えてはいけません。その経路でも拒否された場合は、停止して報告してください。承認されたモデルアクセスについては、OpenAI のガイダンスに従ってください。
判断メモ
- 「main では修正済み、未リリース」は、通常クローズの理由にはなりません。
- 「攻撃者が制御する信頼済みのローカル状態が事前に必要」は、通常スコープ外です。
- 「同一ホスト上の同一ユーザーのプロセスが、すでにローカル状態を読み書きできる」は、通常スコープ外です。
- 「信頼済みワークスペースのメモリが、信頼済みワークスペースのメモリを昇格/再インデックスする」は、文書化された境界を越えない限り、通常スコープ外です。
- 「ヘルパー関数の動作が、文書化された設定の仕様と異なる」は、通常無効です。
- 深刻度のみが誤っていてバグ自体は実在する場合は、オープンのままにし、返信で影響範囲を限定してください。