🧪 detect で見つかった検出事項を 1 件ずつ、責任ある開示に使える、実行可能な防御専用の証拠に変えます。
detect マップにある検出事項ごとに、それ単体で読めるセキュリティアドバイザリと、安全な経路を検証するテストを書き出します。そのため、テストは問題が残っている間は失敗し、コードが修正されると成功します。
Lagune のテストは .lagune/ の下に分離して置かれ、プロジェクト自身のテストスイートとは別に管理されます。
実行方法
- すべての検出事項
- 名前を指定した検出事項
/lagune-prove
追跡中の検出事項を名前で確認します:
npx lagune read list --findings
# Findings
# ...
# • ユーザー検索での SQL インジェクション
# ...
# 次に、そのうちの 1 つを証明します
/lagune-prove ユーザー検索での SQL インジェクション
仕組み
各検出事項が指すソースコードを読み、証明できた検出事項ごとに .lagune/proofs/ の下に 1 つのディレクトリを作ります。各ディレクトリには、ちょうど 2 つのファイルが入ります:
| ファイル | 内容 |
|---|---|
report.test.mjs(または .cjs) | テスト本体。プロジェクトですでに Poku を使っていれば Poku で、そうでなければ Node.js 標準のテストランナーで動くため、何もインストールする必要がない。 |
report.md | 自己完結したセキュリティアドバイザリ。深刻度、影響、再現方法、実行コマンドを含み、単体で読める。 |
証明は常に JavaScript で書かれるため、プロジェクトが何の言語で書かれていても、そのまま持ち運べます。インデックスの README.md には、すべての証明へのリンクと、それらをまとめて実行する 1 つのコマンドが載っています。
- 任意かつ独立したコマンドです。5 つのフェーズのひとつではなく、追跡のチェーンにも含まれません。
- 書き込み先は
.lagune/proofs/だけです。フェーズの成果物やコードは読み取るだけで、手を加えることはありません。 - テストで問題を再現できない検出事項には証明を作らず、その箇所について
/lagune-detectを実行し、記録を照合して更新するよう促します。 - もう一度実行すると、証明を照合して更新します。なくなった検出事項や、もう再現しない検出事項は、そのディレクトリが削除されます。
呼び出したときにだけ実行されます:エージェントが自分から開始することはありません。
prove は /lagune-detect が作る detect マップを読むため、先に detect を実行してください。
防御専用で、許可された範囲のみ
何かを生成する前に、対象をテストする権限があることを確認します。また、実際に動くエクスプロイト、攻撃用のペイロード、検知回避の手段を求める依頼はすべて断ります。証明が示すのは安全な挙動であり、攻撃用の入力を出力することはありません。
証明から開示へ
証明できた検出事項の 2 つのファイルは、脆弱性を報告するために、まとめて 1 つの非公開の GitHub Gist に入れます。これらはまだ公開されていない、現在も残っている問題の証拠です。そのため、.gitignore を .lagune/proofs/ の中に置いて、どのコミットにも含まれないようにしています。メンテナーが問題を解決するまでは、その Gist を通じてのみ共有してください。
Lagune のチェーンで検出事項をクローズするのは、引き続き /lagune-harden と /lagune-verify の役割です。prove は証拠を作るだけで、何もクローズしません。
よくある質問
いいえ。/lagune-prove が書き出すのは防御専用の証拠です。安全な経路を検証するテスト(問題が残っている間は失敗し、コードが修正されると成功します)と、責任ある開示のためのセキュリティアドバイザリです。
検出事項ごとに 2 つのファイルです。テスト(report.test.mjs または .cjs)と、セキュリティアドバイザリ(report.md)です。
prove は自己完結したセキュリティアドバイザリを書き出します。責任ある開示の手順に沿って、非公開の GitHub Gist などの非公開の経路で共有できます。
