mcpField
P
php-open-redirect-audit

php-open-redirect-audit

github.com/0xsheセキュリティ40971 回インストール31 週間前に更新
リポジトリ

php-open-redirect-audit について

PHP プロジェクトのオープンリダイレクトを調べるセキュリティ監査スキルです。コード監査担当者向けに、ユーザー入力による遷移先と検証処理を追跡し、php-route-tracer の証拠を求めます。

主な機能

  1. 01header や redirect などの出力箇所を特定
  2. 02遷移先の入力元と検証処理を追跡
  3. 03スキーム、エンコード、空白文字による回避を確認
  4. 04ルート証拠、データフロー、PoC、修正案を要求

活用シーン

  1. 01next や return_to が遷移先を制御できるか確認
  2. 02外部 URL やエンコード形式による検証回避を評価
  3. 03ログイン後の遷移がフィッシングに使われないか確認

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/0xshe/php-code-audit-skill --skill php-open-redirect-audit

インストール後、Claude Code で/php-open-redirect-auditを入力して読み込まれたか確認します。

詳細

PHP オープンリダイレクト監査(php-open-redirect-audit)

PHP プロジェクトのソースコードを分析し、すべての「ジャンプ/リダイレクト」動作で、遷移先をユーザーが制御できる可能性があり、フィッシングや OAuth などのフローが乗っ取られるおそれがないか確認します。

重大度と番号

  • 詳細:shared/SEVERITY_RATING.md
  • 脆弱性番号:{C/H/M/L}-REDIR-{序号}

必須チェック対象のシンク

次のリダイレクト出力箇所を特定します。

  • header("Location: {value}")
  • <meta http-equiv="refresh" content="{value}">
  • redirect() / to() / return redirect({value})
  • カスタムリダイレクト関数(内部で最終的に Location を出力)

制御可能性の追跡(必須)

次の 2 種類の変数を必ず追跡します。

  1. 遷移先の入力元:通常は $_GET['next']/$_POST['url']/Referer/return_to などです
  2. 遷移先の検証:相対パスのみを許可しているか、allowlist があるか、scheme(http://///)を拒否しているか、ドメインを検証しているか

回避条件(必須)

次の潜在的な回避方法を特定して出力します。

  • scheme の回避://evil.com、http:%2f%2fevil.com
  • エンコードによる回避:二重エンコード、URL エンコードされたコロン/スラッシュ
  • 末尾/空白文字による回避(古い実装でよく見られます)

レポート出力

{output_path}/vuln_audit/redir_{timestamp}.md

項目テンプレート(必須)

各脆弱性には、次の項目を必ず含めてください。

  • 位置を示す証拠:リダイレクト関数の位置 + ルート
  • データフロー:ユーザー入力 -> 検証 -> header/redirect
  • 悪用の前提条件:通常、ログインが必要か(ログイン後のリダイレクトの場合)と、攻撃者がパラメーターを制御できるかどうか
  • 検証 PoC(実際のルートが必須。遷移先パラメーターは実際のフィールド名に置き換えてください)
  • 修正案:相対パスのみを許可し、サーバー側の allowlist を使い、エンコード/scheme を正規化してから検証します

証拠の引用(必須:php-route-tracer から取得)

オープンリダイレクトの疑いがある各脆弱性について、trace 出力の ## 9) Sink Evidence Type Checklist にある REDIR 行に対応する証拠項目をそれぞれ引用してください(状態は検証待ちでも構いませんが、証拠の引用は必須です)。

  1. EVID_REDIR_OUTPUT_POINT:リダイレクト出力箇所の位置を示す証拠(header/redirect の最終出力位置)
  2. EVID_REDIR_DEST_SOURCE_MAPPING:遷移先の入力元変数の対応関係を示す証拠(ルートパラメーターから遷移先変数まで)
  3. EVID_REDIR_DEST_VALIDATION_NORMALIZATION:遷移先の検証/正規化/allowlist/scheme 拒否の分岐を示す証拠(エンコード回避への対処分岐を含む)

tracer の証拠が不足している場合の処理(必須)

  • 上記 1〜3 の重要な証拠項目のいずれかを特定できない場合、その脆弱性の状態は ⚠️待ち検証 と記載する必要があり、✅悪用可能と確認済み としてはなりません。

コメント