タイトル: register.php の event_id パラメータを介した反射型クロスサイトスクリプティング (XSS)
ベンダー / リポジトリ: PuneethReddyHC / event-management
影響を受けるバージョン: 1.0 (テスト時点のブランチ/タグ master)
報告者: Hafiz Pradana Gemilang
開示状況: ベンダーに非公開で通知済み — ユーザーの安全のため、エクスプロイトPoCは非公開としています。
ステータスとタイムラインは、調整またはパッチリリース後に更新されます。
register.php において、event_id GETパラメータがページ出力に反映される前に適切にサニタイズされていないため、反射型クロスサイトスクリプティング (XSS) の脆弱性が特定されました。
リモートの攻撃者は、被害者がリンクを訪問またはリダイレクトされると、被害者のブラウザ上で任意のJavaScriptを実行する悪意のあるURLを作成できます。
⚠️ 本アドバイザリは、実際のエクスプロイトペイロードを意図的に省略しています。
完全な概念実証コードは、パッチ開発のためベンダーに非公開で提供済みです。
/register.php?event_id=<value>
例 (ローカルテスト):
http://<host>/event-management-master/register.php?event_id=1
悪用に成功すると、影響を受けるドメインのコンテキストで任意のJavaScriptが実行される可能性があります。
潜在的な影響:
HttpOnly でない場合)推定CVSS v3.1: 6.1 (中) — AV:N/AC:L/PR:N/UI:R/S:U/C:H/I:L/A:N
event_id パラメータ内にJavaScriptペイロードを含むURLを作成します。完全なペイロードと概念実証コードはベンダーと非公開で共有済みです。
メンテナーでアクセスが必要な場合は、報告者に連絡してください (下記参照)。
反射型XSSを防ぐために、サーバーサイドの検証と出力エンコーディングを適用してください。
入力検証
event_id が数値の場合、数値検証を適用します:
$event_id = filter_input(INPUT_GET, 'event_id', FILTER_VALIDATE_INT);
if ($event_id === false) {
// 無効な入力を処理
}
出力エンコーディング
HTMLに出力する前に、ユーザー指定のデータをエスケープします:
echo htmlspecialchars($event_id, ENT_QUOTES | ENT_SUBSTITUTE, 'UTF-8');
セキュアなフレームワークまたはテンプレートの使用
コンテキストに応じたエスケープを自動的に行うフレームワークを優先します。
セキュアなCookie
セッションCookieに HttpOnly、Secure、SameSite フラグを設定します。
コンテンツセキュリティポリシー (CSP)
厳格なCSPを適用し、unsafe-inline の使用を避けます。
コードレビューと監査
アプリケーション全体の他のすべての反映型パラメータを確認します。
// 数値入力を検証
$event_id = filter_input(INPUT_GET, 'event_id', FILTER_VALIDATE_INT);
if ($event_id === false || $event_id === null) {
$event_id = 0; // またはエラーを表示 / リダイレクト
}
// 安全な出力
?>
<span id="event-id"><?= htmlspecialchars($event_id, ENT_QUOTES | ENT_SUBSTITUTE, 'UTF-8') ?></span>
<?php
htmlspecialchars() ドキュメント: https://www.php.net/manual/en/function.htmlspecialchars.php報告者: Hafiz Pradana Gemilang
本アドバイザリは、影響を受けるソフトウェアのユーザーを保護するため、詳細なエクスプロイトコードを省略しています。
完全な技術的詳細は、責任ある開示の条件に基づき、ベンダーまたは権限のあるコーディネーターからの要請に応じて提供されます。