
Python-Exploit für CVE-2026-41940, eine kritische CRLF-Injection in cPanel/WHM cpsrvd, die Authentifizierung und 2FA umgeht und über eine 4-stufige HTTP-Angriffskette Root-Zugriff gewährt.
Schwachstelle: Session-Datei-Manipulation durch CRLF-Injection im HTTP-Basic-Authentifizierungs-Handler von cpsrvd CVE: CVE-2026-41940 CVSS: 9.8 (Kritisch) CWE: CWE-93 (CRLF Injection) / CWE-306 (Fehlende Authentifizierung) Betroffen: cPanel & WHM Versionen vor: 11.110.0.97, 11.118.0.63, 11.126.0.54, 11.132.0.29, 11.134.0.20, 11.136.0.5 Ports: 2082/2083 (cPanel), 2086/2087 (WHM), 2095/2096 (Webmail)
TECHNISCHE GRUNDURSPACHE: Der HTTP-Basic-Authentifizierungs-Handler von cpsrvd speichert das übergebene Passwort wörtlich in die Pre-Authentifizierungs-Session-Datei über Cpanel::Session::saveSession() – unter Umgehung der bereinigenden Wrapper Cpanel::Session::create() / Cpanel::Session::Modify::save(), die filter_sessiondata() aufrufen, um CR/LF zu entfernen. Da saveSession() selbst kein filter_sessiondata() aufruft, wird jedes CR/LF im Passwort als wörtliche Zeilenumbrüche in die rohe Session-Datei geschrieben.
Wenn eine Anfrage abgelehnt wird, weil sie die URL-gebundene Sicherheits-Token-Prüfung nicht besteht, ruft der Handler do_token_denied() von cpsrvd Cpanel::Session::Modify::new($session, nocache => 1) auf. Das Flag nocache => 1 erzwingt ein erneutes Parsen der rohen Session-Datei (zeilenweise key=value) anstatt den JSON-Cache zu laden. CRLF-getrennte Zeilen aus dem vom Angreifer kontrollierten Pass-Feld werden nun als separate key=value-Datensätze behandelt. Modify::save() schreibt dann den JSON-Cache mit allen geparsten Keys – einschließlich derer des Angreifers – neu, die zu Top-Level-Session-Einträgen hochgestuft werden.
Nach der Regeneration enthält die Session user=root, hasroot=1, tfa_verified=1, ein vom Angreifer gewähltes cp_security_token und einen frischen successful_internal_auth_with_timestamp. cpsrvd behandelt die Session als vollständig authentifiziert.
ANGRIFFSKETTE (4 HTTP-Anfragen):
ANMERKUNG: Aufgrund der randomisierten Hash-Iteration-Reihenfolge von Perl besteht eine Wettlaufsituation (Race Condition). Das ursprüngliche (nicht gesetzte) cp_security_token könnte das injizierte überschreiben. Mehrere Wiederholungen machen die Kette zuverlässig.
HAFTUNGSAUSSCHLUSS: Dieses Tool wird ausschließlich für autorisierte Sicherheitstests und Forschungszwecke bereitgestellt. Die unbefugte Nutzung gegen Systeme, die Sie nicht besitzen oder für die Sie keine ausdrückliche Erlaubnis zum Testen haben, ist illegal.