
Esecuzione di codice remoto pre-autenticazione in Craft CMS
Scoperta e sviluppata da Mohammed Idrees Banyamer
CVE-2025-32432 è una vulnerabilità critica di esecuzione di codice remoto (RCE) pre-autenticazione che colpisce diverse versioni di Craft CMS. Combinando l'archiviazione non sanificata dei dati di sessione con un gadget di deserializzazione insicura, un attaccante non autenticato può eseguire comandi arbitrari sul server remoto.
| Branch | Vulnerabile fino a |
|---|---|
| Craft CMS 3.x | ≤ 3.9.14 |
| Craft CMS 4.x | ≤ 4.14.14 |
| Craft CMS 5.x | ≤ 5.6.16 |
⚠️ Tutte le versioni precedenti che presentano il comportamento di routing descritto sono probabilmente anch'esse vulnerabili.
La vulnerabilità nasce dalla combinazione di due debolezze distinte nell'endpoint assets/generate-transform:
Il vecchio comportamento di routing scrive i parametri di query grezzi direttamente nel file di sessione PHP in /tmp/sess_<PHPSESSID>, senza alcuna sanificazione o filtro.
Una catena di gadget di deserializzazione di Yii (FieldLayoutBehavior → PhpManager) consente a un attaccante di forzare l'inclusione di un file arbitrario — in questo caso, il file di sessione avvelenato.
Impatto combinato: compromissione totale del server, esfiltrazione di dati, movimento laterale e altro.
requestsurllib3# Installazione tramite file dei requisiti
pip install -r requirements.txt
# Oppure installazione diretta
pip install requests urllib3
python exploit.py -u <target_url> -c "<comando>" [opzioni]
# Auto-exploit — esegue il brute-force automatico dell'ID Asset
python exploit.py -u https://craft.example.com -c "id"
# Con un ID Asset noto — più affidabile e veloce
python exploit.py -u https://craft.example.com -c "cat /etc/passwd" -a 42
# Timeout personalizzato + output dettagliato
python exploit.py -u https://craft.example.com -c "uname -a" -t 10 -v
Passo 1 ──► Creazione della Sessione
Recupera la homepage → ottieni il cookie PHPSESSID
Passo 2 ──► Risoluzione dell'ID Asset
Fornito tramite flag -a OPPURE brute-force (rilevamento non-404)
Passo 3 ──► Avvelenamento della Sessione
Richiesta GET dannosa → PHP grezzo iniettato in /tmp/sess_<PHPSESSID>
Passo 4 ──► Attivazione della RCE
Payload di deserializzazione costruito → PhpManager include il file di sessione
→ PHP viene eseguito → il comando di sistema parte → l'output viene restituito
💡 L'output del comando viene stampato (primi 2.000 caratteri). Per un'interazione completa, si consiglia una reverse shell.
requirements.txt
requests>=2.31.0
urllib3>=2.0
Questo strumento è destinato esclusivamente a scopi educativi e a valutazioni di sicurezza autorizzate.
Non utilizzarlo contro alcun sistema senza un'autorizzazione esplicita e scritta del proprietario del sistema.
L'autore declina qualsiasi responsabilità per usi impropri o danni causati da questo strumento. Utilizzando questo software, accetti di essere l'unico responsabile delle tue azioni e di conformarti a tutte le leggi locali, nazionali e internazionali applicabili.
| Ruolo | Dettagli |
|---|---|
| 🔍 Scoperta della CVE e Exploit Originale | Mohammed Idrees Banyamer |
| 🐙 GitHub | @TheMursalin |
| 🤝 Refinement del Codice | Contributi della community benvenuti |
⭐ Se lo trovi utile, considera di seguire @TheMursalin per altri exploit, writeup e strumenti di sicurezza.
Questo progetto è rilasciato sotto la Licenza MIT — consulta il file LICENSE per tutti i dettagli.
| Flag | Descrizione | Default |
|---|
-u, --url | Obbligatorio. URL di base del target (es. https://example.com) | — |
-c, --cmd | Obbligatorio. Comando di sistema da eseguire (es. id, whoami) | — |
-a, --asset | ID Asset valido noto (accelera notevolmente lo sfruttamento) | Nessuno |
--scan-max | ID Asset massimo per il brute-force quando non viene fornito alcun ID | 300 |
-t, --timeout | Timeout delle richieste in secondi | 15 |
-v, --verbose | Abilita output dettagliato/debug | Disattivato |