Skip to content
KitploitKITPLOIT
ToolsBlog
Einreichen
ToolsBlog
Einreichen

Hacking-, PenTest- und Cybersicherheits-Tools für Ihr Sicherheitsarsenal!

Kitploit ist ein Verzeichnis von Hacking-, Cybersicherheits- und Pentesting-Tools. Entdecken Sie die neuesten Projekt-Updates, um Schwachstellen zu finden, Systeme zu analysieren, Tests zu automatisieren und Ihre Sicherheit zu stärken.

··Feeds·Kontakt·Datenschutz·© 2026 Kitploit

Tool-Verzeichnis

Kategorien

Alle Kategorien anzeigen
Loading categories
cpanel2shell-scanner — Hochpräziser Scanner für CVE-2026-41940 (cPanel & WHM Authentifizierungs-Bypass) | Kitploit
Tools/GitHubGitHub/assetnote/cpanel2shell-scanner
SchwachstellenscannerExploitationWebanwendungs-ExploitationPenetrationstestsAuthentifizierungPayload-Entwicklung
GitHubassetnote/cpanel2shell-scanner

cpanel2shell-scanner

Hochpräziser Scanner für CVE-2026-41940 (cPanel & WHM Authentifizierungs-Bypass)

Repository anzeigen
9224vor 3 MonatenVon Kitploit geprüft

Beliebteste

Alle anzeigen →

Entdecken Sie die meistgenutzten Tools unserer Community.

Alle Tools erkunden

Durchsuchen Sie unsere Tool-Sammlung

Alle Tools anzeigen →
Teilen

cpanel2shell-scanner

Ein hochpräziser Scanner für den cPanel/WHM-Authentifizierungsbypass, der als CVE-2026-41940 verfolgt wird. Er identifiziert anfällige Hosts, ohne die falsch-negativen Ergebnisse zu erzeugen, die bei öffentlichen Proof-of-Concept-Implementierungen und Erkennungen üblich sind, und ohne die Kontosperrungs- und Root-IP-Allowlist-Mechanismen auszulösen, die bei naivem Scannen stören.

Das Tool enthält auch eine separate, optionale Exploit-Kette für einen CalDAV-Pfad-Traversal-Bug der gleichen Familie auf cpdavd (Ports 2079 plain / 2080 TLS) — CVE-2026-29205 — der es einem entfernten Angreifer ermöglicht, beliebige Dateien als root zu lesen, sobald ein kleiner SMTP-gesteuerter Einrichtungsschritt erfolgreich ist. cPanel 11.134.0.26 behebt den zugrunde liegenden RAII-Lebensdauerfehler, sodass der Lesevorgang jetzt als unprivilegierter Kontoinhaber ausgeführt wird; der Traversal selbst erreicht immer noch cpdavd, kann aber nicht über das hinaus eskalieren, was dieses Konto bereits lesen kann. Die CalDAV-Kette ist hinter --exploit versteckt und standardmäßig deaktiviert, da sie echte E-Mails sendet und Dateien von bestätigten Zielen liest – siehe den Abschnitt Exploit-Modus (aktiv).

Warum dieser Scanner

Die meisten öffentlichen Erkennungen für CVE-2026-41940 haben drei Probleme. Dieser Scanner adressiert jedes davon.

Sie können unseren Blogbeitrag zu dieser Erkennungstechnik hier lesen: https://slcyber.io/research-center/high-fidelity-check-for-the-cpanel-authentication-bypass-cve-2026-41940/

Er prüft die Proxy-Pfade, nicht nur die Management-Ports

Die Apache-Konfiguration pro vHost von cPanel installiert einen ProxyPass, der /___proxy_subdomain_whm an 127.0.0.1:2086 und /___proxy_subdomain_cpanel an 127.0.0.1:2080 weiterleitet, unabhängig vom Host-Header der Anfrage. Die RewriteCond beschränkt nur die Rewrite-Regel, die die Management-Subdomain auf den Proxy-Pfad abbildet; der ProxyPass selbst ist bedingungslos. Wenn diese Pfade auf einem von einem cPanel-verwalteten Apache bereitgestellten vHost getroffen werden, wird derselbe anfällige Backend erreicht wie über die Management-Ports.

Scanner, die nur die Ports 2082/2083/2086/2087 abfragen, melden einen Host als nicht anfällig, wenn diese Ports firewalled sind, obwohl der Fehler über 443 vollständig erreichbar ist. Dieser Scanner prüft standardmäßig 2087, 2083 und die beiden Proxy-Pfade auf 443.

Er wird nicht von cphulkd oder der Root-IP-Allowlist blockiert

cPanel enthält cphulkd, das Konten nach einer geringen Anzahl fehlgeschlagener Passwortversuche sperrt, und authorized_whm_root_ips, das Root-Logins auf eine konfigurierte Liste von Quelladressen beschränkt. Ein Scanner, der den Bypass ausnutzt, indem er versucht, eine Sitzung für root zu injizieren, wird:

  • stillschweigend ignoriert, wenn die IP des Scanners nicht in der Root-Allowlist ist, was zu einem falsch-negativen Ergebnis führt; und
  • fehlgeschlagene Passwortereignisse für das jeweilige Konto generieren, auf das er abzielt, was letztendlich zu einer Kontosperrung führt und sowohl die Erkennung als auch legitime Logins verhindert.

Dieser Scanner vermeidet beide Probleme auf der WHM-Seite, indem er expired=1 in das Sitzungspayload unter einem zufällig generierten Benutzernamen injiziert. Die Sitzungsinjektion wird verifiziert, indem die resultierende cpsessXXXX-URL besucht und msg_code:[expired_session] im Antworttext gesucht wird, was nur vorhanden ist, wenn die Injektion erfolgreich war. Es wird kein echtes Konto angegriffen, daher kann kein echtes Konto gesperrt werden, und die Root-Allowlist ist irrelevant, da kein Root-Login versucht wird.

Er verwendet eine Benutzernamen-Wortliste, wo nötig

Der cPanel-Daemon (cpaneld, Ports 2083 und der Pfad /___proxy_subdomain_cpanel) erfordert, dass der angegebene Benutzername einem vorhandenen cPanel-Konto auf der Festplatte entspricht (-f /var/cpanel/users/$user). Ein Benutzername wie root wird diese Prüfung niemals erfüllen, da root ein Systembenutzer und kein cPanel-Benutzer ist. Erkennungen, die nur root versuchen, erzeugen auf dieser Oberfläche falsch-negative Ergebnisse. Dieser Scanner verwendet eine konfigurierbare Wortliste gängiger cPanel-Benutzernamen für die cPanel-Oberfläche und fällt auf der WHM-Oberfläche, die keine derartige Einschränkung hat, auf den Pfad mit zufälligem Benutzernamen zurück.

Wie die Erkennung funktioniert

Für jedes Ziel führt der Scanner die folgenden Schritte pro Oberfläche durch:

  1. GET /login senden und den Set-Cookie-Header entweder für whostmgrsession (WHM) oder cpsession (cPanel) lesen. Das Cookie enthält eine durch Kommas getrennte Sitzungsnamen-Komponente.
  2. GET / mit einem Authorization: Basic-Header senden, dessen dekodierter Wert <user>:\xff\nexpired=1 ist. Das nachfolgende \nexpired=1 ist das Sitzungsinjektions-Payload. Das Sitzungs-Cookie aus Schritt 1 wird unverändert wiedergegeben.
  3. Den Location-Header aus der Antwort lesen und das cpsessXXXX-Token extrahieren.
  4. GET /<cpsessXXXX>/ mit dem ursprünglichen Cookie senden und nach msg_code:[expired_session] im Textkörper suchen. Seine Anwesenheit beweist, dass die Sitzungsinjektion erfolgreich war und der Host anfällig ist.

Auf WHM (Port 2087 und der Pfad /___proxy_subdomain_whm auf 443) ist der Benutzername ein zufälliges u gefolgt von zehn Hex-Zeichen. Auf cPanel (Port 2083 und der Pfad /___proxy_subdomain_cpanel auf 443) durchläuft der Scanner seine Benutzernamen-Wortliste und stoppt beim ersten Treffer.

Standardmäßig tastet der Scanner 2087, 2083 und 443 in dieser Reihenfolge ab und stoppt, sobald eine Oberfläche die Anfälligkeit bestätigt.

CalDAV-Pfad-Traversal-Exploit (--exploit)

CVE-2026-29205 — cPanel/WHM WP2 Security Update, 13. Mai 2026. Behoben in cPanel 11.134.0.26. Das Advisory verfolgt dieselbe cpdavd-Privilegienabstiegs-Regression, die diese Exploit-Kette missbraucht.

Vollständige Aufschlüsselung des Fehlers und der Exploitation-Kette: https://slcyber.io/research-center/new-age-of-collisions-reading-arbitrary-files-pre-auth-as-root-in-cpanel-cve-2026-29205

cpdavd auf den Ports 2079 (Plain-HTTP) und 2080 (TLS) vertraut dem <principal>/<collection>/...-Pfad, den es beim Bedienen von CalDAV/CardDAV-Ressourcen aufbaut. Durch die Erstellung einer Anfrage, deren Pfadkomponente ..-Segmente kodiert, und deren Ausrichtung auf einen Maildir-Ordner, dessen Name auf der Festplatte ebenfalls einen Traversal kodiert (x-attachment-1-y), kann cpdavd dazu gebracht werden, jede Datei auf der Festplatte als root zu lesen, unabhängig von Besitzer oder Berechtigungen – einschließlich /etc/shadow, /etc/passwd und der benutzerspezifischen Mail-Spools.

Die verteidigungstiefe, die die Privilegien vor dem Lesen auf den Kontoinhaber reduzieren sollte, schlug stillschweigend fehl: Das Cpanel::AccessIds::ReducedPrivileges-Objekt wurde im void-Kontext konstruiert, sodass sein Destruktor die Root-Privilegien wiederherstellte, bevor der Lesevorgang ausgeführt wurde. cPanel 11.134.0.26 bindet das Objekt an ein my $privs-Lexem, sodass es durch die -f-/stat-/open-/read-Kette hindurch lebt; auf gepatchten Hosts läuft der Lesevorgang daher als unprivilegierter Kontoinhaber statt als root.

Der anfällige Ordner muss auf der Festplatte existieren, bevor der Lesevorgang funktioniert. cPanel erstellt automatisch einen Ordner namens .x-attachment-1-y für den Empfänger <user>+x-attachment-1-y@<domain>, sobald eine E-Mail an diese Unteradresse eintrifft. Die Kette ist daher:

  1. Plausible Empfängerdomänen aus den SANs des TLS-Zertifikats des Hosts enumerieren.
  2. Für jede Domäne Kandidaten-Local-Parts ableiten (das erste Label der Domäne sowie eine kleine Wortliste gängiger Mailbox-Präfixe wie info, admin, webmaster).
  3. Eine SMTP-Sitzung gegen einen konfigurierten Outbound-Relay (z. B. SendGrid) öffnen und <prefix>+x-attachment-1-y@<domain> an jeden Kandidaten senden. Akzeptierte RCPT TO-Antworten werden verfolgt.
  4. Durch eine Wiederholungsleiter warten (5 s, 10 s, 20 s, 30 s), bis die cPanel-Inbox-Zustellung den Ordner materialisiert.
  5. Für jeden akzeptierten Empfänger den Pfad-Traversal-GET gegen cpdavd auf den Ports 2080 (TLS) und 2079 (plain) unter beiden Sammlungspräfixen /calendar/ und /addressbook/ senden.

Ein Erfolg gibt die Bytes der Datei zurück; der Fund zeichnet die verwendete E-Mail, die Sammlung, die Byte-Anzahl und die ersten 200 Bytes als Vorschau auf.

Diese Prüfung ist deaktiviert, sofern nicht --exploit übergeben wird. Wenn aktiviert, erfordert sie einen funktionierenden ausgehenden SMTP-Relay (siehe Konfigurationsdatei unten), da der Ordnererstellungsschritt nicht übersprungen werden kann.

Gezielte vs. gestreute Exploitation

Der Exploit funktioniert nur gegen echte virtuelle E-Mail-Konten, die unter der Funktion E-Mail-Konten von cPanel konfiguriert sind. Catch-All-Adressen funktionieren nicht – ein Catch-All wird über den Exim-system_aliases-Router weitergeleitet, erreicht nie den dovecot_virtual_delivery-Transport und löst daher nie den lda_mailbox_autocreate-Pfad aus, der den Ordner .x-attachment-1-y/ erzeugt.

Wenn Sie bereits eine gültige virtuelle E-Mail auf dem Ziel kennen, übergeben Sie sie mit --email:

root@kitploit:~
python scanner.py --config scanner.ini --email [email protected] target.com

--email überspringt die Zertifikat-SAN-Enumeration und die Präfix-Wortliste vollständig und sendet genau eine Nachricht an die von Ihnen angegebene Adresse. Kann wiederholt werden, um mehrere bekannte Konten anzugreifen. Der gezielte Pfad ist viel zuverlässiger als der Streupfad.

Ohne --email fällt der Scanner auf das Streuen von ~15 gängigen Präfixen (info, admin, webmaster usw.) pro Domäne zurück, die aus dem TLS-Zertifikat des Hosts extrahiert wurden. Die Messung von Assetnote an einer Stichprobe von 200 cpdavd-exponierten Hosts ergab eine ~10 % Streutrefferquote: Ein sauberes Ergebnis aus dem Streumodus ist ein schwacher Hinweis darauf, dass der Host gepatcht ist, und die erneute Ausführung mit --email gegen ein echtes Konto ist der einzige zuverlässige Weg zur Bestätigung.

Konfigurationsdatei

Der Exploit-Modus liest eine INI-Datei über --config:

root@kitploit:~
python scanner.py --config scanner.ini --exploit example.com

Kopieren Sie scanner.ini.example nach scanner.ini, füllen Sie die SMTP-Anmeldeinformationen aus und optimieren Sie optional die CalDAV-Standardwerte. scanner.ini ist in .gitignore, sodass die ausgefüllte Kopie lokal bleibt. Das SMTP-Passwort kann auch über die Umgebungsvariable SCANNER_SMTP_PASSWORD bereitgestellt werden, die nur Vorrang hat, wenn das password-Feld in der Datei leer ist.

Installation

root@kitploit:~
pip install -r requirements.txt

Python 3.8 oder höher wird benötigt.

Verwendung

Einzelnes Ziel:

root@kitploit:~
python scanner.py example.com

Mehrere Ziele über Positionsargumente:

root@kitploit:~
python scanner.py host-a.example.com host-b.example.com:2083

Eine Datei mit Zielen, eines pro Zeile. Zeilen, die mit # beginnen, werden ignoriert:

root@kitploit:~
python scanner.py -f targets.txt

Ziele aus stdin lesen:

root@kitploit:~
cat targets.txt | python scanner.py

Ein Ziel kann entweder ein Hostname oder host:port sein. Wenn ein Port angegeben ist, tastet der Scanner nur diesen Port ab; andernfalls tastet er 2087, 2083 und 443 ab.

Häufige Optionen

  • -u, --users — durch Kommas getrennte cPanel-Benutzernamen, die auf der cPanel-Oberfläche versucht werden sollen. Standardmäßig eine kleine eingebaute Liste.
  • -U, --users-file — Datei mit einem cPanel-Benutzernamen pro Zeile.
  • -p, --ports — durch Kommas getrennte Ports, die abgetastet werden sollen, wenn kein Port für das Ziel angegeben ist. Standardmäßig 2087,2083,443.
  • -t, --threads — threads pro Ziel zum Durchlaufen der Benutzernamensliste auf der cPanel-Oberfläche. Standardmäßig 10.
  • -c, --concurrency — Anzahl der Ziele, die parallel gescannt werden. Standardmäßig 20.
  • -T, --timeout — Timeout pro Anfrage in Sekunden. Standardmäßig 15.
  • -o, --output — anfällige Ziele, eines pro Zeile, während sie entdeckt werden, an diese Datei anhängen.
  • --json — einen JSON Lines-Datensatz pro Ziel in diese Datei schreiben.
  • -q, --quiet — nur anfällige Ziele auf stdout ausgeben. Verbindungsfehler und saubere Ziele werden weiterhin in --json aufgezeichnet und in der Zusammenfassung gezählt.

Ausgabe

Pro Fund wird eine Zeile auf stdout geschrieben, sodass ein Ziel, das beide Prüfungen durchläuft, zweimal ausgegeben wird:

root@kitploit:~
[!] host  cve-2026-41940    VULNERABLE (port 443)
[!] host  caldav-traversal  VULNERABLE via admin@host (read 1842b from /etc/passwd)
[+] host  cve-2026-41940    NOT VULNERABLE
[?] host  cve-2026-41940    CONNECTION FAILED

Die --json-Ausgabe ist ein Datensatz pro Ziel mit einem findings-Array:

root@kitploit:~
{"target": "host", "status": "VULNERABLE", "findings": [
  {"check": "cve-2026-41940", "status": "VULNERABLE", "detail": {"port": 443}},
  {"check": "caldav-traversal", "status": "VULNERABLE",
   "detail": {"email": "admin@host", "domain": "host", "collection": "calendar",
              "file": "/etc/shadow", "bytes": 1218, "preview": "root:$6$..."}}
]}

status auf der obersten Ebene ist der schlechteste Fall über alle Funde hinweg.

Eine Zusammenfassungszeile mit Gesamtsummen wird am Ende auf stderr geschrieben. Der Fortschrittsbalken wird auf stderr dargestellt und automatisch unterdrückt, wenn stderr kein Terminal ist.

Der Exit-Code ist 0, wenn ein Ziel anfällig ist, 1, wenn jedes erreichbare Ziel sauber war, und 2, wenn kein Ziel erreicht werden konnte.

Beispiele

Eine Liste von Zielen scannen, Treffer in eine Datei schreiben und auf stdout leise bleiben:

root@kitploit:~
python scanner.py -f targets.txt -o vulnerable.txt -q

Mit einer benutzerdefinierten Benutzernamensliste gegen die cPanel-Oberfläche scannen, erhöhte Parallelität und JSON-Ausgabe für die Weiterverarbeitung:

root@kitploit:~
python scanner.py -f targets.txt -U cpanel-users.txt -c 100 --json results.jsonl

Einen nicht standardmäßigen Port-Satz abtasten:

root@kitploit:~
python scanner.py -p 2083,2087,8443 -f targets.txt

Die CalDAV-Kette Ende-zu-Ende gegen ein einzelnes Ziel mit dem E-Mail-Streu-Fallback ausführen (erfordert eine ausgefüllte scanner.ini):

root@kitploit:~
python scanner.py --config scanner.ini --exploit example.com

Gezielte Exploitation gegen eine bekannte virtuelle E-Mail – viel höhere Trefferquote als Streuen:

root@kitploit:~
python scanner.py --config scanner.ini --email [email protected] example.com

Nur die CalDAV-Kette gegen eine Liste bestätigter cpdavd-Hosts ausführen und /etc/passwd-Vorschauen in JSON ausgeben:

root@kitploit:~
python scanner.py --config scanner.ini --caldav-only \
    -f cpdavd-hosts.txt --json caldav-results.jsonl

Hinweise zur Sicherheit

Standardmodus (sicher)

Der Standardaufruf scanner.py <target> führt nur den CVE-2026-41940-Detektor aus. Er sendet die Anfragen, die zur Bestätigung der Sitzungsinjektion erforderlich sind, und sonst nichts. Er meldet sich nicht als echter Benutzer an, greift nicht das root-Konto an, eskaliert nicht zu einer Shell und generiert keine fehlgeschlagenen Passwortereignisse für ein gültiges Konto auf einem Zielsystem. Das Markierungselement, das er abgleicht (msg_code:[expired_session]), wird von der Anwendung selbst als Reaktion auf das injizierte expired=1-Sitzungsfeld erzeugt und ist derselbe Indikator, den die offizielle cPanel-Anmeldeseite verwendet, wenn eine legitim abgelaufene Sitzung wiedergegeben wird.

Exploit-Modus (aktiv)

Das Übergeben von --exploit (oder --caldav-only) schaltet die CalDAV-Pfad-Traversal-Kette frei. Dies ist kein Detektor mehr – es ist ein funktionierender Exploit. Wenn aktiviert, wird der Scanner für jedes Ziel, bei dem die Domänenenumeration erfolgreich ist:

  • eine echte SMTP-Sitzung gegen den in scanner.ini konfigurierten Relay öffnen und eine kurze Nachricht pro Kandidatenempfänger senden (normalerweise 10–15 pro Domäne, 3 Domänen pro Ziel);
  • bis zu ~65 Sekunden pro Domäne warten, bis die Zustellung den bösartigen Maildir-Ordner materialisiert;
  • versuchen, die konfigurierte --read-file von jedem bestätigten Ziel zu lesen.

Die Standarddatei ist /etc/shadow. Ein erfolgreicher Lesevorgang gibt die Bytes der Datei zurück; ein leerer Textkörper deutet entweder auf ein unerreichbares Ziel oder einen Host hin, bei dem der Privilegienabstiegs-Fix (cPanel 11.134.0.26, my $privs = …) vorhanden ist. Die Erkennung vergleicht die empfangene Textkörperlänge mit Null, nicht mit dem angekündigten Content-Length der Antwort (der von stat() für den vom Angreifer gewählten Pfad abgeleitet wird und auch dann gefüllt wird, wenn das anschließende open() verweigert wird).

Um die Traversal-Erreichbarkeit unabhängig vom Privilegienabstiegs-Fix zu testen – z. B. wenn Sie wissen möchten, ob cpdavd erreichbar ist und die Maildir-Voraussetzung auf einem gepatchten Host erfüllt wurde – führen Sie erneut mit --read-file /etc/passwd aus. /etc/passwd ist weltlesbar, gibt also auf Vor-Patch- und Nach-Patch-Hosts Bytes zurück; die Kombination der beiden Signale (/etc/shadow-Textkörper vorhanden = Vor-Patch-Root-Lesevorgang; /etc/shadow leer + /etc/passwd vorhanden = Traversal erreichbar, aber Priv-Abstiegs-Fix angewendet) klassifiziert einen Host eindeutig.

Die Inhalte und eine 200-Byte-Vorschau werden in die JSONL-Ausgabe geschrieben und auf stdout ausgegeben. Die CalDAV-Exploitation pro Domäne kann eine Minute oder länger dauern – dies ist die Wiederholungsleiter, die auf die E-Mail-Zustellung wartet, kein Hängen.

Führen Sie --exploit nur gegen Assets aus, die Ihnen gehören oder für die Sie eine ausdrückliche schriftliche Genehmigung zum Testen haben. Der SMTP-Verkehr wird vom konfigurierten Relay und von jedem empfangenden Mail-System protokolliert; die Dateilesevorgänge werden von cpdavd protokolliert.

Tool herunterladen
  • --no-progress — Fortschrittsbalken deaktivieren.
  • --exploit — CalDAV-Pfad-Traversal-Kette aktivieren. Standardmäßig deaktiviert; siehe Exploit-Modus (aktiv) für die Nebenwirkungen, die dieses Flag freischaltet.
  • --config — INI-Datei mit den SMTP-Relay-Anmeldeinformationen und CalDAV-Tunables. Siehe scanner.ini.example.
  • --read-file — Datei, die exfiltriert werden soll, wenn die CalDAV-Kette erfolgreich ist. Überschreibt den Wert in der Konfigurationsdatei. Standardmäßig /etc/shadow – eine Nur-Root-Datei, sodass ein erfolgreicher Lesevorgang Vor-Patch (gibt Shadow-Inhalte zurück) von Nach-Patch (open verweigert, Textkörper leer → als NICHT ANFÄLLIG gemeldet) unterscheidet. Verwenden Sie --read-file /etc/passwd, um die Traversal-Erreichbarkeit zu testen, ohne zwischen gepatcht/ungepatcht zu unterscheiden.
  • --caldav-only — die 41940-Prüfung überspringen und nur die CalDAV-Kette ausführen. Impliziert --exploit. Nützlich, um die Kette erneut gegen eine Zielliste auszuführen, von der bereits bekannt ist, dass sie CalDAV-erreichbar ist.
  • --email ADDR — bekanntes virtuelles E-Mail-Konto auf dem Ziel. Überspringt die Zertifikat-SAN-Enumeration und die Streu-Wortliste; sendet genau eine Nachricht an ADDR und liest gegen diesen Principal. Kann wiederholt werden. Impliziert --exploit. Siehe Gezielte vs. gestreute Exploitation.
  • -v, --verbose — Fortschritt pro Domäne für die CalDAV-Kette ausgeben (Zertifikat-SAN-Liste, Streu-Anzahl, Wiederholungsleiter).