メインコンテンツまでスキップ

River Review のセキュリティモデル

River Review 自身が「なぜ設計上安全か」をまとめます。脆弱性の報告手順は SECURITY.md を参照してください。

スキルは実行コードではない

River Review のスキルは、フロントマターとプロンプト本文からなる Markdown ファイルです。skills/ 配下に scripts/ ディレクトリは無く、スキルがシェルやコードを実行することはありません。

スキルの「実行」とは、そのプロンプトと差分を LLM に渡してレビュー文を得ることを指します。パイプラインは eval / vm / 動的 require を用いず、差分を受け取るコード実行の sink もありません。決定論的な検出器は正規表現の照合のみで、git / rg の呼び出しは配列引数の execFile でシェルを介しません。

レビューは読み取り専用

レビューの出力は <file>:<line>: <message> 形式の指摘です。形式に合わない出力は破棄され、フォールバックは決定論的なヒューリスティックに限られます。River Review はコードを変更せず、指摘と判定を材料として提示するだけです。

最終判断は人間が持つ(human-in-the-loop)

  • GitHub Action は既定で dry_run: true である。
  • PR への投稿はコメント(COMMENT)のみで、承認や自動マージの経路は存在しない。
  • 決定論的なゲートは「人間レビューへのエスカレーション」しかできず、GO 側へ判定を押し込む手段を持たない。

つまり、いかなる指摘も自動で承認・マージ・コード変更を引き起こしません。

信頼できない差分の扱い

差分は信頼できない入力としてプロンプトに含まれます。これは LLM ベースのレビュー全般に共通する prompt injection の接点であり、River Review 固有の欠陥ではありません。悪意ある差分がなし得る最悪のケースは、人間が読む「誤ったレビューコメント」までに限定されます。理由は次のとおりです。

  • 出力はコメントのみで、注入によってマージや承認を起こせない。
  • 指摘はフォーマット検証を通り、自由記述の注入文は破棄される。
  • 検証器は、差分に存在しないファイルを根拠にする指摘を棄却する(verifier)。
  • レビュー規約は、差分外への推測に基づく指摘を禁止している。
  • 入力と出力の両方でシークレットを秘匿化(redaction)する。
  • 動的なコード実行・デシリアライズを行わないため、RCE 型の「悪意あるペイロード」は成立しない。

よくある誤解

  • 「大規模変更 → 全スキル実行」はコード実行ではない。これは全レビュー観点(テスト網羅性・命名・フレーキー等)を適用する、という意味である。特権操作やシェル実行を伴わない。
  • 静的解析の置き換えではない。構文・型・既知パターンの決定論的検査は専用ツールに任せ、River Review は意味的な整合性を補完する。

関連ドキュメント