
Prueba de concepto que demuestra una inyección SQL numérica autenticada en ChurchCRM anterior a 6.7.2, lo que permite la manipulación de la lógica para omitir cláusulas WHERE y afectar a múltiples registros. Incluye instrucciones de uso, detalles del parche y recomendaciones de mitigación.
Autor: Mohammed Idrees Banyamer
País: Jordania
Usuario: @banyamer_security
GitHub: https://github.com/mbanyamer
Este repositorio contiene una Prueba de Concepto (PoC) que demuestra una vulnerabilidad de inyección SQL numérica autenticada en ChurchCRM en versiones anteriores a la 6.7.2.
La vulnerabilidad permite la manipulación de la lógica de consultas SQL mediante la inyección de cargas útiles no numéricas en parámetros que se asumen numéricos, lo que permite la modificación no autorizada del comportamiento de la consulta (por ejemplo, omitiendo cláusulas WHERE).
La vulnerabilidad existe en el siguiente archivo:
src/PaddleNumEditor.php
El parámetro POST PerID se concatena directamente en múltiples consultas SQL sin una conversión de tipo o saneamiento adecuados. Aunque se pretende que sea numérico, puede manipularse para alterar la lógica SQL.
Ejemplo de patrón vulnerable (conceptual):
DELETE FROM multibuy_mb WHERE mb_per_ID = $PerID AND mb_fr_ID = $frID;
Al proporcionar una carga útil como:
0 OR 1=1 --
la lógica de la cláusula WHERE puede omitirse, transformando potencialmente una operación de un solo registro en una operación de múltiples registros o de toda la tabla.
Esta vulnerabilidad no está diseñada para la extracción ciega de datos, sino para el abuso de lógica que afecta a operaciones UPDATE, DELETE o INSERT.
Un atacante autenticado puede:
Debido a que esta falla ocurre en lógica solo numérica, puede evadir la detección básica de inyección SQL y las reglas de WAF.
La PoC demuestra:
Una solicitud legítima que utiliza un PerID numérico que afecta solo a un registro.
Una carga útil de inyección SQL numérica diseñada:
0 OR 1=1 --
Esta carga útil omite las restricciones de la cláusula WHERE, lo que resulta en efectos de múltiples registros o de toda la tabla (por ejemplo, eliminación masiva).
La PoC compara las respuestas HTTP y las diferencias de comportamiento para confirmar la manipulación exitosa.
Instalar la dependencia:
pip install requests
Edite las siguientes variables en el script de la PoC:
TARGET_BASE = "http://localhost/churchcrm"
USERNAME = "admin"
PASSWORD = "yourpassword"
⚠️ Utilice solo una instancia de prueba local o autorizada
python3 churchcrm_cve-2026-24854_poc.py
Para confirmar la explotación:
multibuy_mb) antes y despuésLa función is_success_response() puede ajustarse para que coincida con las respuestas normales frente a las manipuladas de su instancia.
El problema se corrigió en ChurchCRM 6.7.2 mediante el commit:
748f5084
Detalles de la corrección:
(int) a:
PerIDNum0, lo que previene la inyecciónLos usuarios deben actualizar inmediatamente.
Esta vulnerabilidad fue descubierta y divulgada de manera responsable por:
Mohammed Idrees Banyamer
Jordania
Instagram: @banyamer_security
GitHub: https://github.com/mbanyamer
Esta Prueba de Concepto se proporciona solo con fines educativos y de seguridad defensiva.
NO utilice este código contra sistemas que no posea o para los que no tenga permiso explícito de prueba.
El autor no asume ninguna responsabilidad por el uso indebido o los daños resultantes de este código.