
ChurchCRM 6.7.2 以前のバージョンにおける認証済み数値SQLインジェクションを実証する概念実証であり、ロジック操作を可能にしてWHERE句をバイパスし、複数のレコードに影響を与えます。使用方法、パッチの詳細、および緩和策の推奨事項を含みます。
著者: Mohammed Idrees Banyamer
国: ヨルダン
ハンドル: @banyamer_security
GitHub: https://github.com/mbanyamer
このリポジトリには、ChurchCRM 6.7.2 より前のバージョンにおける認証済み数値SQLインジェクションの脆弱性を実証する Proof of Concept(PoC)が含まれています。
この脆弱性により、数値であると想定されたパラメータに非数値ペイロードを注入することでSQLクエリのロジック操作が可能となり、クエリの動作を不正に変更できます(例: WHERE句のバイパス)。
この脆弱性は以下のファイルに存在します:
src/PaddleNumEditor.php
POSTパラメータ PerID は、適切な型キャストやサニタイズなしに複数のSQLクエリに直接連結されます。数値であることを意図していますが、SQLロジックを変更するように操作できます。
脆弱なパターンの例(概念):
DELETE FROM multibuy_mb WHERE mb_per_ID = $PerID AND mb_fr_ID = $frID;
以下のようなペイロードを供給することで:
0 OR 1=1 --
WHERE句のロジックをバイパスでき、単一レコードの操作を複数レコードまたは全テーブル操作に変換できる可能性があります。
この脆弱性はブラインドデータ抽出用ではなく、UPDATE、DELETE、INSERT操作に影響を与えるロジック悪用を目的としています。
認証済みの攻撃者は以下が可能です:
この欠陥は数値のみのロジックで発生するため、基本的なSQLインジェクション検出やWAFルールをバイパスする可能性があります。
PoCは以下を実証します:
数値の PerID を使用した正当なリクエストで、1件のレコードのみに影響します。
細工された数値SQLインジェクションペイロード:
0 OR 1=1 --
このペイロードはWHERE句の制限をバイパスし、複数レコードまたは全テーブルへの影響(例: 一括削除)をもたらします。
PoCはHTTPレスポンスと動作の違いを比較し、操作の成功を確認します。
依存関係のインストール:
pip install requests
PoCスクリプト内の以下の変数を編集します:
TARGET_BASE = "http://localhost/churchcrm"
USERNAME = "admin"
PASSWORD = "yourpassword"
⚠️ ローカルまたは認可されたテストインスタンスのみで使用してください
python3 churchcrm_cve-2026-24854_poc.py
悪用を確認するには:
multibuy_mb)を前後で確認is_success_response() 関数は、インスタンスの通常レスポンスと操作されたレスポンスに合わせて調整できます。
この問題はChurchCRM 6.7.2で以下のコミットにより修正されました:
748f5084
修正内容:
(int) キャストを適用:
PerIDNum0 に強制変換され、インジェクションを防止ユーザーは直ちにアップグレードしてください。
この脆弱性は以下によって発見され、責任を持って開示されました:
Mohammed Idrees Banyamer
ヨルダン
Instagram: @banyamer_security
GitHub: https://github.com/mbanyamer
このProof of Conceptは教育および防御的なセキュリティ目的のみで提供されています。
所有していない、または明示的なテスト許可がないシステムに対してこのコードを使用しないでください。
著者は、このコードの誤用または損害について一切の責任を負いません。