Valida CVE-2026-48908 en Joomla SP Page Builder con carga de iconos no autorizada que conduce a la ejecución de código PHP. Incluye evidencia de auditd/PCAP, línea de tiempo de eventos y recomendaciones de detección para SOC para investigación defensiva.
Validación de laboratorio de CVE-2026-48908 en el componente SP Page Builder de Joomla, centrada en evidencia técnica, reconstrucción de eventos y oportunidades de detección defensiva.
El repositorio documenta una prueba controlada en la que el endpoint asset.uploadCustomIcon de SP Page Builder aceptó archivos de iconos subidos que resultaron en la escritura de artefactos PHP bajo el directorio de medios de Joomla. Invocar el archivo PHP subido a través de HTTP provocó la ejecución de comandos como el usuario del proceso del servidor web. La actividad resultante de HTTP, archivos, procesos, autenticación y red fue capturada utilizando registros del contenedor Apache, auditd de Linux, tcpdump, telemetría de Docker, sondeo de cambios de archivos y capturas de pantalla del host Windows.
[!IMPORTANT] Este repositorio contiene solo informes y capturas de pantalla. El código de exploit ofensivo, el código fuente de los payloads, los archivos PCAP sin procesar y los paquetes de evidencia del host sin procesar no se incluyen intencionalmente. El material está destinado a la validación de vulnerabilidades, ingeniería de SOC, desarrollo de detección, preparación para respuesta a incidentes e investigación autorizada.
Ambos informes contienen la metodología de prueba completa, extractos de evidencia, cronología de eventos, evidencia de cambios de archivos, indicadores de red, guía de mitigación, recomendaciones de auditoría y lógica de ejemplo para SIEM.
.
├── README.md
├── SHA256SUMS.txt
├── reports/
│ ├── CVE-2026-48908_SP_Page_Builder_detection_EN.pdf
│ └── CVE-2026-48908_SP_Page_Builder_detection_PL.pdf
└── screenshots/
├── 01_poc_upload_and_code_execution.png
├── 02_http_whoami_www_data.png
├── 03_tcp_callback_ncat.png
├── 04_reverse_shell_session.png
└── 05_root_access_and_su_failure_redacted.png
No se incluyen código fuente de exploits, código fuente de payloads, PCAP sin procesar, paquete de evidencia de Docker sin procesar ni archivos fuente DOCX.
| Rol | Sistema |
|---|---|
| Host víctima | Ubuntu 24.04.4 LTS, kernel 6.17.0-35-generic, Docker Engine 29.5.3 |
| Aplicación objetivo | Joomla 5.4.7, PHP 8.3.32, Apache HTTP Server, imagen joomla:5-php8.3-apache |
| Componente | JoomShaper SP Page Builder |
| Contenedor | joomla5-builders |
| Estación de trabajo del atacante | Microsoft Windows 11 Home 10.0.26200 |
| Servicio Joomla | http://172.20.10.3:8080 |
| Dirección de prueba de Windows | 172.20.10.2 |
| Dirección del contenedor | 172.21.0.3 |
| Fecha de prueba | 9 de julio de 2026 |
La raíz web de Joomla /var/www/html estaba respaldada por el volumen de Docker joomla5-builders_joomla_data. Esto es importante para la detección: docker diff no proporcionó visibilidad detallada de los cambios de archivos dentro del volumen, por lo que la supervisión de archivos tuvo que depender de listados de archivos conscientes del volumen y guía de supervisión del lado del host.
La prueba se realizó en un entorno de laboratorio aislado y autorizado. La validación cubrió la siguiente secuencia:
asset.uploadCustomIcon de SP Page Builder aceptó archivos de iconos subidos en el entorno de laboratorio./media/com_sppagebuilder/assets/iconfont/..htaccess que cambiaba el manejo de PHP para la extensión .PHP./root y de cambiar de usuario con su - fallaron.Los informes documentan intencionalmente la evidencia y la lógica de detección sin distribuir un exploit reutilizable ni una implementación de payload.
La prueba de laboratorio confirmó:
asset.uploadCustomIcon de SP Page Builder;.htaccess bajo el directorio de medios de Joomla;www-data;Dentro del contenedor, la identidad efectiva era:
uid=33(www-data) gid=33(www-data) groups=33(www-data)
El intento fallido de escalada de privilegios era visible como:
cd root
bash: cd: root: Permission denied
su -
Password:
su: Authentication failure
El PoC público probó varias variantes de extensiones y confirmó que una combinación que involucraba una extensión PHP con mayúsculas/minúsculas mixtas y .htaccess podría conducir a la ejecución en la configuración del laboratorio.

Una solicitud HTTP controlada ejecutó whoami, y el navegador mostró el usuario efectivo del proceso.

Antes de la prueba interactiva, se utilizó una devolución de llamada de un solo mensaje más segura para confirmar la conectividad saliente desde el entorno objetivo al host Windows en el puerto TCP 4444.

La sesión interactiva confirmó la ejecución como www-data, Linux como sistema operativo y un directorio de trabajo bajo la ruta de medios de SP Page Builder de Joomla.

Los intentos de acceder a /root y autenticarse con su - fallaron. La captura de pantalla está censurada para no publicar la contraseña de prueba.

La cronología completa está disponible en ambos informes PDF. Los eventos más importantes fueron:
| UTC | Evento |
|---|---|
| 19:33:56 | Inicio de auditoría de Linux, tcpdump, eventos de Docker y sondeo de cambios de archivos |
| 19:34:23 | Serie de solicitudes POST a /index.php?option=com_sppagebuilder&task=asset.uploadCustomIcon |
| 19:34:23.291 | GET a un archivo .PHP subido con un comando aritmético controlado |
| 19:34:23.329 | GET a un archivo .pHp subido con un comando aritmético controlado |
| 19:34:23.361 | GET a un archivo .Php subido con un comando aritmético controlado |
| 19:34:23.398 | GET al artefacto .PHP final con un comando aritmético controlado |
| 19:34:23.411 | El PoC público ejecutó id a través del artefacto PHP subido y recibió HTTP 200 |
| 19:35:05 | Solicitud manual de whoami devolvió www-data |
| 19:35:27 | Devolución de llamada TCP única a 172.20.10.2:4444 exitosa |
| 19:35:59 | Solicitud HTTP inició una conexión TCP inversa a 172.20.10.2:4444 |
| 19:36:22-19:36:31 | whoami, uname, id y pwd confirmaron el contexto de ejecución |
| 19:37:13 | cd root devolvió Permission denied |
| 19:37:21-19:37:28 | Intento de su - falló con Authentication failure |
| 19:39:25 | La recolección de auditoría se detuvo y los artefactos se empaquetaron |
El host víctima recolectó:
auditd para execve;tcpdump;La prueba también identificó una limitación de monitoreo: debido a que /var/www/html estaba respaldado por un volumen de Docker, docker diff no mostró la creación detallada de archivos bajo /var/www/html/media/com_sppagebuilder/assets/iconfont/. Por lo tanto, el monitoreo de integridad de archivos debe cubrir la ruta real del host que respalda el volumen.
La evidencia del host Windows se limitó intencionalmente a capturas de pantalla relevantes para el informe:
whoami;/root y su - con la contraseña censurada.Monitoree la telemetría HTTP, proxy inverso, WAF o red para la siguiente combinación:
POST /index.php?option=com_sppagebuilder&task=asset.uploadCustomIcon
User-Agent contiene: sppb-rce-poc
Status: 200, 201 o 204
En producción, no confíe únicamente en el User-Agent del PoC público. El endpoint y el patrón de carga inesperado son indicadores más estables que el valor del User-Agent.
.htaccess bajo la ruta de iconos de SP Page BuilderMonitoree la telemetría de archivos para archivos nuevos o modificados que coincidan con:
/media/com_sppagebuilder/assets/iconfont/*/fonts/*.php
/media/com_sppagebuilder/assets/iconfont/*/fonts/*.PHP
/media/com_sppagebuilder/assets/iconfont/*/fonts/*.pHp
/media/com_sppagebuilder/assets/iconfont/*/fonts/*.Php
/media/com_sppagebuilder/assets/iconfont/*/fonts/.htaccess
La presencia de .htaccess que contenga AddType application/x-httpd-php .PHP en un directorio de carga de medios es un indicador de alto valor.
Correlacione la actividad de carga con solicitudes HTTP posteriores a rutas como:
/media/com_sppagebuilder/assets/iconfont/*/fonts/*
Se alcanza una mayor confianza cuando la solicitud apunta a una extensión similar a PHP e incluye parámetros como t= y c=.
Los indicadores de proceso de alto valor incluyen:
usuario: www-data, apache o nginx
proceso: bash, sh, dash o php
línea de comandos contiene: /dev/tcp, bash -i, operadores de redirección o ejecución inusual de intérpretes
Active una alerta cuando un shell o intérprete iniciado por el proceso del servidor web establezca una conexión saliente hacia una estación de trabajo o un puerto de destino inusual. El evento de laboratorio utilizó el puerto TCP 4444, pero la detección en producción no debe depender de un solo puerto.
La prueba produjo un intento fallido de su -. Monitoree ayudantes de autenticación como unix_chkpwd, escrituras en /var/log/btmp y comandos interactivos posteriores al compromiso de la cuenta del servicio web.
Cuando se detecte el indicador de carga HTTP, el SOC debe correlacionarlo inmediatamente con:
/media/com_sppagebuilder/assets/iconfont/;.htaccess bajo los directorios de medios de Joomla;t= y c=;whoami, id, uname, hostname, pwd, ip, ifconfig, netstat o ss;Un solo evento de carga no siempre es suficiente por sí solo. La alerta más sólida combina carga, creación de archivos, acceso a archivos, ejecución de procesos y telemetría de red saliente dentro de la misma ventana de tiempo corta.
/media/com_sppagebuilder/assets/iconfont/ y el directorio de medios de Joomla en general en busca de archivos similares a PHP y artefactos .htaccess..htaccess, .phtml, .phar, archivo o artefacto ejecutable inesperado de los directorios de carga.asset.uploadCustomIcon desde redes no confiables.docker diff para la supervisión de la raíz web cuando los datos de la aplicación se almacenen en volúmenes Docker o montajes bind.www-data; no se confirmó la escalada de privilegios a root.Este material se proporciona para investigación de seguridad defensiva, gestión de vulnerabilidades, ingeniería de detección, preparación para respuesta a incidentes y pruebas autorizadas. No lo utilice contra sistemas sin permiso explícito.