
escáner cve-2026-48907
Escáner de archivo único y autónomo para Joomla! JCE Editor < 2.9.99.5 — Ejecución remota de código no autenticada (CVE-2026-48907)
Autor: Hussein Mohamed (masta ghimau)
[!CAUTION]
🚨 DESCARGO DE RESPONSABILIDAD — LEA ANTES DE USAR
ESTA ES UNA HERRAMIENTA DE PRUEBAS DE SEGURIDAD INTRUSIVA.
THIS TOOL IS FOR AUTHORIZED SECURITY ASSESSMENTS ONLY.
Scanning systems you do NOT own or have WRITTEN PERMISSION to test is ILLEGAL in most jurisdictions.
The author (Hussein Mohamed masta ghimau) accepts ABSOLUTELY NO liability for any misuse, damage, legal action, or data loss arising from the use of this tool.
By running this scanner you agree to:
Only scan assets YOU OWN or have EXPLICIT WRITTEN CONSENT.
Understand that uploads a harmless POC PHP file to the target server as part of the intrusive accuracy check.
Manually delete every uploaded POC file immediately after use.
USE AT YOUR OWN RISK.
[!IMPORTANT] Por qué lo «intrusivo» importa para la precisión: Para lograr la máxima confianza posible y eliminar falsos positivos, esta herramienta realiza una prueba de payload de verificación matemática en vivo. Sube una línea PHP de prueba de concepto segura y luego confirma la ejecución remota de código verificando el resultado matemático exacto devuelto por el servidor. Los escáneres no intrusivos que solo leen cadenas de versión pueden pasar por alto parches retroportados o correcciones personalizadas. Esta herramienta verifica que la vulnerabilidad realmente existe. Por lo tanto, es intrusiva por diseño: úsala con prudencia y con autorización plena.
masta-cve-2026-48907.py es un escáner Python completamente original y de archivo único diseñado para detectar la CVE-2026-48907 en instancias de Joomla! que ejecutan el componente JCE Editor en versiones anteriores a 2.9.99.5.
requests/httpx..py que puedes colocar en cualquier lugar.openpyxl ni rich, pero se ve excelente cuando están instalados.ThreadPoolExecutor..xlsx) con formato y colores condicionales.openpyxl para informes de Excelrich para tarjetas de terminal atractivasTodo lo demás es de la biblioteca estándar de Python (urllib, http.cookiejar, argparse, threading, etc.).
# 1. Clone the repo
git clone https://github.com/YOUR_USERNAME/masta-cve-2026-48907.git
cd masta-cve-2026-48907
# 2. (Optional but recommended) install extras
pip install -r requirements.txt
También puedes ejecutar el script directamente sin instalar nada (solo salida de terminal, sin Excel):
python masta-cve-2026-48907.py -u https://target.com
python masta-cve-2026-48907.py -u https://target.com/joomla
python masta-cve-2026-48907.py -l targets.txt -t 10
python masta-cve-2026-48907.py -u https://target.com -p http://127.0.0.1:8080
python masta-cve-2026-48907.py -h
-u URL Single target URL
-l FILE File containing URLs (one per line)
-o OUTPUT Custom Excel output path
-t THREADS Concurrent threads (default: 5)
-p PROXY Proxy URL (e.g. http://127.0.0.1:8080)
--timeout N Request timeout in seconds (default: 12)
--verify-ssl Enable SSL certificate verification (default: disabled)
-v, --verbose Show full per-target result cards during scan
-d, --debug Show internal HTTP request traces
--no-color Disable colored terminal output
A continuación se muestra la lógica de escaneo completa, desde la entrada hasta el informe final.
flowchart TD
A[User provides -u URL or -l FILE] --> B[Normalize & deduplicate targets]
B --> C[Launch ThreadPoolExecutor]
C --> D[For each target]
D --> E1[probe_joomla<br/>GET /, meta, manifest,<br/>static assets, README]
E1 --> F1{Joomla! detected?}
F1 -- No --> R1[Status: NOT_JOOMLA]
F1 -- Yes --> E2[probe_jce<br/>GET jce.xml, endpoints,<br/>JCE-specific markers]
E2 --> F2{JCE detected?}
F2 -- No --> R2[Status: SAFE<br/>JCE not installed]
F2 -- Yes --> F3{Version >= 2.9.99.5?}
F3 -- Yes --> R3[Status: PATCHED]
F3 -- No --> E3[extract_csrf<br/>Parse Joomla! CSRF token]
E3 --> F4{Token found?}
F4 -- No --> R4[Status: PATCHED<br/>CSRF missing → likely hardened]
F4 -- Yes --> E5[Build math-verifier payload<br/>masta-cve-2026-48907-poc ...]
E5 --> E6[Vector 1: Multipart POST<br/>profile_file upload to tmp/]
E6 --> F5{HTTP 200?}
F5 -- Yes --> E7["GET /tmp/masta-{rand}.xml.php"]
E7 --> F6{Body contains<br/>MATHOK:3105:END ?}
F6 -- Yes --> R5[Status: VULNERABLE<br/>Confidence: CONFIRMED]
F6 -- No --> E8[Vector 2: Browser chain<br/>upload + rename via RPC]
E8 --> F7{RCE confirmed?}
F7 -- Yes --> R5
F7 -- No --> E9[Check for WAF block page]
E9 --> F8{WAF detected?}
F8 -- Yes --> R6[Status: BLOCKED_BY_WAF]
F8 -- No --> R7[Status: SAFE]
F5 -- No --> E8
R1 --> S[Append result to Excel + Terminal card]
R2 --> S
R3 --> S
R4 --> S
R5 --> S
R6 --> S
R7 --> S
S --> D
D --> T[Print Summary Dashboard]
T --> U[Save Excel Report to reports/]
U --> V[Print cleanup reminder for<br/>all uploaded POC files]
style R5 fill:#ff0000,stroke:#333,color:#fff
style R3 fill:#32CD32,stroke:#333,color:#000
style R6 fill:#FFD700,stroke:#333,color:#000
Reemplaza la imagen de abajo con tu captura de pantalla de terminal real.

Reemplaza la imagen de abajo con tu captura de pantalla del informe de Excel real.

Consejo: ejecuta el escáner contra una instancia local de prueba de Joomla! para generar capturas de pantalla reales. Haz commit de ellas en la carpeta assets/ y se mostrarán automáticamente en GitHub.
Este escáner sube una prueba de concepto PHP inofensiva al servidor objetivo para confirmar la vulnerabilidad. La herramienta siempre mostrará un recordatorio al final del escaneo que enumera todos los archivos subidos. Debes eliminarlos manualmente después de las pruebas. Estos archivos se denominan masta-{random}.xml.php o similares y contienen la línea de atribución en texto claro:
masta-cve-2026-48907-poc. This test is done as part of Security Assessment - masta ghimau.
Al usar este software reconoces la responsabilidad total de tus acciones. El código se proporciona «tal cual», sin garantías. Si no comprendes las implicaciones de ejecutar un escáner intrusivo de verificación de RCE, no uses esta herramienta.
🛡 Use it to protect your own assets. Not to harm others.
| Característica | Descripción |
|---|
| 🔍 Huella digital multi-fuente | Detecta Joomla! y JCE mediante metaetiquetas, manifiestos, recursos estáticos, archivos de idioma y endpoints específicos de JCE |
| 🛡 Detección de WAF | Identifica bloqueos de Cloudflare, Incapsula, Sucuri y ModSecurity |
| 🧪 POC intrusivo seguro | Sube un verificador matemático PHP inofensivo (atribuido y etiquetado explícitamente para su limpieza) |
| 📊 Interfaz de terminal basada en tarjetas | Tarjetas Panel + Table de Rich (o respaldo ANSI) por objetivo |
| 📁 Informe de Excel | .xlsx generado automáticamente con encabezados, paneles congelados, anchos de columna y celdas de estado codificadas por color |
| ⚙️ Soporte de proxy | Enruta todo el tráfico a través de Burp / ZAP / cualquier proxy HTTP |
| 🧵 Hilos | Hilos de trabajo configurables para listas masivas |
| Estado | Significado | Confianza |
|---|
| VULNERABLE | El payload PHP se ejecutó y se verificó la prueba matemática. La RCE es real. | CONFIRMED |
| VULNERABLE_UPLOAD_ONLY | El archivo se subió correctamente, pero se bloqueó la ejecución de PHP. Explotable, pero RCE no confirmada. | HIGH |
| PATCHED | Se detectó Joomla! / JCE y la versión es >= 2.9.99.5, o el CSRF está reforzado. | HIGH / MEDIUM |
| SAFE | JCE no está instalado o los vectores de explotación fallaron (probablemente parcheado/reforzado). | HIGH |
| BLOCKED_BY_WAF | Un firewall de aplicaciones web (WAF) bloqueó la prueba. | LOW |
| NOT_JOOMLA | El objetivo no parece ser un sitio Joomla!. | CERTAIN |
| ERROR | Red / conectividad / excepción no controlada. | LOW |