
Exploit pour RCE pré-authentification de Craft CMS (CVE-2025-32432) enchaînant l'empoisonnement de session avec une désérialisation non sécurisée pour exécuter des commandes arbitraires sur les serveurs vulnérables.
Exécution de code à distance sans authentification dans Craft CMS
Découvert et développé par Mohammed Idrees Banyamer
CVE-2025-32432 est une vulnérabilité critique d'exécution de code à distance (RCE) sans authentification affectant plusieurs versions de Craft CMS. En enchaînant un stockage non nettoyé de données de session avec un gadget de désérialisation non sécurisé, un attaquant non authentifié peut exécuter des commandes arbitraires sur le serveur distant.
| Branche | Vulnérable jusqu'à |
|---|---|
| Craft CMS 3.x | ≤ 3.9.14 |
| Craft CMS 4.x | ≤ 4.14.14 |
| Craft CMS 5.x | ≤ 5.6.16 |
⚠️ Toutes les versions plus anciennes présentant le comportement de routage décrit sont également probablement affectées.
La vulnérabilité provient de l'enchaînement de deux faiblesses distinctes dans le point de terminaison assets/generate-transform :
L'ancien comportement de routage écrit les paramètres de requête bruts directement dans le fichier de session PHP à /tmp/sess_<PHPSESSID>, sans aucun nettoyage ni filtrage.
Une chaîne de gadgets de désérialisation Yii (FieldLayoutBehavior → PhpManager) permet à un attaquant de forcer l'inclusion d'un fichier arbitraire — dans ce cas, le fichier de session empoisonné.
Impact combiné : Compromission complète du serveur, exfiltration de données, mouvement latéral, etc.
requestsurllib3# Install via requirements file
pip install -r requirements.txt
# Or install directly
pip install requests urllib3
python exploit.py -u <target_url> -c "<command>" [options]
| Flag | Description | Défaut |
|---|---|---|
-u, --url | Requis. URL de base cible (ex. https://example.com) | — |
-c, --cmd | Requis. Commande système à exécuter (ex. id, whoami) | — |
-a, --asset | ID d'actif valide connu (accélère considérablement l'exploitation) | Aucun |
--scan-max | ID d'actif maximum à bruteforcer lorsqu'aucun ID n'est fourni | 300 |
-t, --timeout | Délai d'attente de requête en secondes | 15 |
-v, --verbose | Activer la sortie détaillée/débogage | Désactivé |
# Auto-exploit — brute-forces Asset ID automatically
python exploit.py -u https://craft.example.com -c "id"
# With a known Asset ID — more reliable and faster
python exploit.py -u https://craft.example.com -c "cat /etc/passwd" -a 42
# Custom timeout + verbose output
python exploit.py -u https://craft.example.com -c "uname -a" -t 10 -v
Étape 1 ──► Établissement de session
Récupération de la page d'accueil → obtention du cookie PHPSESSID
Étape 2 ──► Résolution de l'ID d'actif
Fourni via le drapeau -a OU bruteforcé (détection non-404)
Étape 3 ──► Empoisonnement de session
Requête GET malveillante → PHP brut injecté dans /tmp/sess_<PHPSESSID>
Étape 4 ──► Déclenchement RCE
Charge utile de désérialisation conçue → PhpManager inclut le fichier de session
→ PHP s'exécute → la commande système s'exécute → sortie renvoyée
💡 La sortie de la commande est affichée (2 000 premiers caractères). Pour une interaction complète, un reverse shell est recommandé.
requirements.txt
requests>=2.31.0
urllib3>=2.0
Cet outil est destiné uniquement à des fins éducatives et à des évaluations de sécurité autorisées.
Ne l'utilisez pas contre un système sans autorisation écrite explicite du propriétaire du système.
L'auteur décline toute responsabilité en cas d'utilisation abusive ou de dommages causés par cet outil. En utilisant ce logiciel, vous acceptez d'être seul responsable de vos actions et de vous conformer à toutes les lois locales, nationales et internationales applicables.
| Rôle | Détails |
|---|---|
| 🔍 Découverte du CVE et exploit original | Mohammed Idrees Banyamer |
| 🐙 GitHub | @TheMursalin |
| 🤝 Affinage du code | Contributions de la communauté bienvenues |
⭐ Si vous trouvez cela utile, envisagez de suivre @TheMursalin pour plus d'exploits, de rapports et d'outils de sécurité.
Ce projet est publié sous la licence MIT — voir le fichier LICENSE pour plus de détails.