
Exploit de prueba de concepto para CVE-2026-48908, un RCE no autenticado en Joomla SP Page Builder mediante carga arbitraria de archivos, con entrega de payload adaptativa y limpieza.
| CVE | CVE-2026-48908 |
| Debilidad | CWE-284 Improper Access Control → Subida arbitraria de archivos no autenticada → RCE |
| Componente | SP Page Builder (com_sppagebuilder) para Joomla |
| Versiones afectadas | 1.0.0 – 6.6.1 |
| Corregido en | 6.6.2 |
| Privilegios requeridos | Ninguno (preautenticación) |
| Interacción del usuario | Ninguna |
SP Page Builder expone la tarea de controlador asset.uploadCustomIcon para gestionar la subida de un paquete 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 bajo la raíz del documento:
/media/com_sppagebuilder/assets/iconfont/<name>/ (including the fonts/ subfolder)
Dado que la subida es accesible antes de la autenticación y los archivos extraídos se sitúan 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 versiones añaden un filtro de nombres de archivo del lado del servidor sobre las entradas del archivo. Este PoC neutraliza una implementación común 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.<FilesMatch "\.php$">) solo ejecuta .php en minúsculas, por lo que un .PHP subido inicialmente se sirve como texto fuente y no se ejecuta..htaccess. Un .htaccess (que la lista negra tampoco detecta) que contiene AddType application/x-httpd-php .PHP se coloca junto al payload. Cuando AllowOverride lo permite, esto registra .PHP como PHP y el shell subido se ejecuta.El PoC siempre empaqueta una estructura válida de fuente de iconos (selection.json, style.css, fonts/<name>.ttf) para que la subida sea aceptada, y luego añade el shell.
Adaptativo: recorre una lista de extensiones ejecutables como PHP (primero las de menor huella), luego un .htaccess de respaldo, y se detiene en el primero 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. Los distintos filtros de SP Page Builder bloquean conjuntos diferentes, y las distintas configuraciones de Apache ejecutan extensiones diferentes, por lo que esto encuentra cualquier combinación que el objetivo permita y ejecute.fonts/.htaccess + fonts/<shell>.PHP (respaldo) — solo si falla cada intento directo. El .htaccess colocado (AddType … .PHP) obliga a que un .PHP en mayúsculas se ejecute donde AllowOverride lo permita (esto es lo que necesitan los hosts estilo 5.4.6).Se detiene en el primer método que ejecuta e indica cuál funcionó. Todas las subidas aceptadas quedan registradas, 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 el PoC lo indica explícitamente (consulte Resultados más abajo): RCE completo, solo escritura de archivos (PHP deshabilitado /
AllowOverride None), parcheado (solo administradores) o no vulnerable.
pip install -r requirements.txt # requests
# confirm the vulnerability and prove code execution (runs `id`)
python3 sppb_rce.py https://target.example
# run a specific command
python3 sppb_rce.py --url target.example -c "uname -a"
# interactive pseudo-shell
python3 sppb_rce.py https://target.example --shell
# only check; run no command
python3 sppb_rce.py https://target.example --check
# remove the uploaded payload directory afterwards
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 -> rejected by filter
[*] try .php3 -> rejected by filter
...
[*] try .PHP -> uploaded, not executed
[*] try .htaccess+.PHP -> EXECUTED
[+] CODE EXECUTION CONFIRMED via '.htaccess+.PHP' (echo 7*6 -> 42)
[*] running: id
------------------------------------------------------------
uid=33(www-data) gid=33(www-data) groups=33(www-data)
------------------------------------------------------------
[*] cleanup: done (4 dirs)
El PoC siempre indica el veredicto para el objetivo:
| Salida | Significado | Código de salida |
|---|---|---|
CODE EXECUTION CONFIRMED via '<method>' | 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 administrador | 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 al 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 colocado no pueda volver a habilitar manejadores..php/.PHP inesperados en media/.../iconfont/, nuevas cuentas de Super Usuario y administradores de archivos plantados.Exploit de SP Page Builder para Joomla · RCE no autenticado en com_sppagebuilder · PoC de CVE-2026-48908 · subida arbitraria de archivos en asset.uploadCustomIcon · ejecución remota de código en Joomla · script de exploit para pentest.
Este software se publica únicamente con fines educativos y para pruebas de seguridad autorizadas; por ejemplo, pruebas de penetración para las que tenga 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 totalmente 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 ocurre con cualquier exploit/PoC disponible públicamente, se comparte de buena fe para ayudar a los defensores a detectar, comprender y remediar la vulnerabilidad; lo que usted haga con él es su responsabilidad.
MIT — consulte LICENSE.