
Preuve de concept démontrant une injection SQL numérique authentifiée dans ChurchCRM avant la version 6.7.2, permettant une manipulation logique pour contourner les clauses WHERE et affecter plusieurs enregistrements. Inclut des instructions d'utilisation, des détails sur le correctif et des recommandations d'atténuation.
Auteur : Mohammed Idrees Banyamer
Pays : Jordanie
Pseudo : @banyamer_security
GitHub : https://github.com/mbanyamer
Ce dépôt contient une preuve de concept (PoC) démontrant une vulnérabilité d'injection SQL numérique authentifiée dans ChurchCRM dans les versions antérieures à 6.7.2.
La vulnérabilité permet la manipulation logique de requêtes SQL en injectant des charges utiles non numériques dans des paramètres supposés numériques, permettant une modification non autorisée du comportement des requêtes (par exemple, contournement des clauses WHERE).
La vulnérabilité existe dans le fichier suivant :
src/PaddleNumEditor.php
Le paramètre POST PerID est concaténé directement dans plusieurs requêtes SQL sans transtypage ni assainissement appropriés. Bien qu'il soit censé être numérique, il peut être manipulé pour modifier la logique SQL.
Exemple de schéma vulnérable (conceptuel) :
DELETE FROM multibuy_mb WHERE mb_per_ID = $PerID AND mb_fr_ID = $frID;
En fournissant une charge utile telle que :
0 OR 1=1 --
la logique de la clause WHERE peut être contournée, transformant potentiellement une opération sur un seul enregistrement en une opération multi-enregistrements ou sur toute la table.
Cette vulnérabilité n'est pas conçue pour l'extraction aveugle de données, mais pour l'abus de logique affectant les opérations UPDATE, DELETE ou INSERT.
Un attaquant authentifié peut :
Étant donné que cette faille se produit dans une logique exclusivement numérique, elle peut contourner la détection de base des injections SQL et les règles WAF.
La PoC démontre :
Une requête légitime utilisant un PerID numérique qui n'affecte qu'un seul enregistrement.
Une charge utile d'injection SQL numérique conçue :
0 OR 1=1 --
Cette charge utile contourne les restrictions de la clause WHERE, entraînant des effets multi-enregistrements ou sur toute la table (par exemple, suppression massive).
La PoC compare les réponses HTTP et les différences de comportement pour confirmer la manipulation réussie.
Installer la dépendance :
pip install requests
Modifier les variables suivantes dans le script PoC :
TARGET_BASE = "http://localhost/churchcrm"
USERNAME = "admin"
PASSWORD = "yourpassword"
⚠️ Utiliser uniquement une instance locale ou autorisée pour les tests
python3 churchcrm_cve-2026-24854_poc.py
Pour confirmer l'exploitation :
multibuy_mb) avant et aprèsLa fonction is_success_response() peut être ajustée pour correspondre aux réponses normales et manipulées de votre instance.
Le problème a été corrigé dans ChurchCRM 6.7.2 via le commit :
748f5084
Détails du correctif :
(int) appliqué à :
PerIDNum0, empêchant l'injectionLes utilisateurs doivent mettre à niveau immédiatement.
Cette vulnérabilité a été découverte et divulguée de manière responsable par :
Mohammed Idrees Banyamer
Jordanie
Instagram : @banyamer_security
GitHub : https://github.com/mbanyamer
Cette preuve de concept est fournie uniquement à des fins éducatives et de sécurité défensive.
N'utilisez PAS ce code contre des systèmes que vous ne possédez pas ou pour lesquels vous n'avez pas l'autorisation explicite de tester.
L'auteur décline toute responsabilité en cas d'utilisation abusive ou de dommages résultant de ce code.