
CVE-2025-67875 - ChurchCRM の Person Property Assignment に保存型 XSS が存在し、管理者セッションのハイジャックにつながります
| 項目 | 詳細 |
|---|---|
| CVE ID | CVE-2025-67875 |
| 深刻度 | HIGH |
| アドバイザリ | アドバイザリを表示 |
| 発見者 | Lukasz Rybak |
ChurchCRM バージョン 6.3.0 以前には、重大な特権昇格の脆弱性が存在します。特定の中間レベルの権限(「Edit Records(レコードの編集)」と「Manage Properties and Classifications(プロパティと分類の管理)」)を持つ認証済みユーザーは、永続的なクロスサイトスクリプティング(XSS)ペイロードを管理者のプロフィールに注入できます。このペイロードは、管理者が自分のプロフィールページを表示したときに実行され、攻撃者は管理者のセッションをハイジャックし、管理操作を実行して、完全なアカウント乗っ取りを達成できます。
この脆弱性は、2つの別個の欠陥の組み合わせです。任意のユーザーが他のユーザーのプロフィールを閲覧できるようにする Insecure Direct Object Reference(IDOR)と、一般的な編集権限を持つユーザーが他のユーザーのレコードプロパティを変更できるようにする Broken Access Control(アクセス制御の欠陥)の脆弱性です。
攻撃チェーンは次のとおりです。
PersonView.php の IDOR: PersonView.php の先頭には認可チェックがありません。認証済みの任意のユーザーは、他のユーザーの ID を知っているだけで、そのユーザーのプロフィールページ(例: 管理者の場合は PersonView.php?PersonID=1)を閲覧できます。
PropertyAssign.php の Broken Access Control: 他のユーザーの PersonView.php ページからアクセスできる「Assign a New Property」機能は、ユーザーを PropertyAssign.php に誘導します。このスクリプトは、ユーザーが一般的な isEditRecordsEnabled() 権限を持っているかどうかを正しくチェックしますが、URL で渡された特定の PersonID を編集できるかどうかを検証するオブジェクトレベルの認可チェックを実行しません。これにより、「Edit Records」権限を持つユーザーは、管理者を含むシステム内の任意の人物のプロパティを変更できます。
保存型XSSベクター: 攻撃者はこれら2つの欠陥を利用して管理者のプロフィールページに移動し、「Assign a New Property」フォームを使用して悪意のある XSS ペイロードを管理者のレコードに保存できます。テキストベースのプロパティの Value フィールドは、入力時に適切にサニタイズされず(strip_tags のみが適用されるためイベントハンドラは削除されません)、出力時にもエンコードされないため、保存型 XSS につながります。
src/PropertyAssign.php): プロパティ値を strip_tags() を適用するだけで保存するため、onerror などのイベントハンドラ属性が許可されます。src/PersonView.php): 保存されたプロパティ値を htmlspecialchars() を使用せずに HTML に直接レンダリングするため、ペイロードが実行されます。
// src/PersonView.php, line ~722
<td><?= $r2p_Value ?></td> // Vulnerable: Raw output
この概念実証(PoC)は、特定の中間レベルの権限を持つユーザーが、メイン管理者のプロフィールに保存型 XSS ペイロードを注入できる方法を示しています。
前提条件:
Edit RecordsManage Properties and Classificationsシナリオ:
PersonID=1 である管理者のプロフィールページに直接移動します。
http://localhost:8101/PersonView.php?PersonID=1
(PersonView.php の IDOR によりアクセスが許可されます)。
PropertyAssign.php の Broken Access Control により可能です)。
PersonView.php?PersonID=1)に移動すると、ペイロードが即座に実行され、アラートボックスが表示されます。攻撃者は、より高度なペイロードを使用して管理者のセッション Cookie を盗むこともできます。
これは重大な特権昇格の脆弱性です。特定の昇格された(ただし管理者ではない)権限を持つユーザーが、管理者アカウントの完全な制御を取得できるようになります。管理者のセッションをハイジャックすることで、攻撃者は新しい管理者アカウントの作成やデータの削除など、管理者が利用可能なあらゆる操作を実行でき、さらに他の脆弱性と連鎖させてサーバー全体を侵害する可能性もあります。
報告者: Łukasz Rybak
本 CVE は、協調的な脆弱性開示(Coordinated Vulnerability Disclosure)の慣行に従い、責任を持って開示されました。ここに記載された情報は、教育および防御目的のみを目的としています。