
Exploit Python pour CVE-2026-41940, une injection CRLF critique dans cPanel/WHM cpsrvd qui contourne l'authentification et la 2FA, accordant un accès de niveau root via une chaîne d'attaque HTTP en 4 étapes.
Vulnérabilité : Manipulation de fichier de session via injection CRLF dans le gestionnaire d'authentification HTTP Basic de cpsrvd CVE : CVE-2026-41940 CVSS : 9.8 (Critique) CWE : CWE-93 (Injection CRLF) / CWE-306 (Authentification manquante) Affecté : Versions de cPanel & WHM antérieures à : 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)
CAUSE RACINE TECHNIQUE : Le gestionnaire d'authentification HTTP Basic de cpsrvd stocke le mot de passe fourni textuellement dans le fichier de session de pré-authentification via Cpanel::Session::saveSession() -- contournant les wrappers de nettoyage Cpanel::Session::create() / Cpanel::Session::Modify::save(), qui appellent filter_sessiondata() pour supprimer les CR/LF. Étant donné que saveSession() elle-même n'appelle pas filter_sessiondata(), tout CR/LF dans le mot de passe est écrit dans le fichier de session brut sous forme de nouvelles lignes littérales.
Lorsqu'une requête est rejetée pour échec du contrôle de jeton de sécurité lié à l'URL, le gestionnaire do_token_denied() de cpsrvd invoque Cpanel::Session::Modify::new($session, nocache => 1). Le drapeau nocache => 1 force une réanalyse du fichier de session brut (ligne par ligne clé=valeur) au lieu de charger le cache JSON. Les lignes coupées par CRLF provenant du champ pass contrôlé par l'attaquant sont désormais traitées comme des enregistrements clé=valeur séparés. Modify::save() réécrit ensuite le cache JSON avec toutes les clés analysées -- y compris celles de l'attaquant -- promues en entrées de session de premier niveau.
Après la régénération, la session contient user=root, hasroot=1, tfa_verified=1, un cp_security_token choisi par l'attaquant, et un fresh successful_internal_auth_with_timestamp. cpsrvd traite la session comme complètement authentifiée.
CHAÎNE D'ATTAQUE (4 requêtes HTTP) :
NOTE : Il existe une condition de course due à l'ordre d'itération aléatoire des hashs de Perl. Le cp_security_token original (non défini) peut écraser celui injecté. Des tentatives multiples rendent la chaîne fiable.
AVERTISSEMENT : Cet outil est fourni uniquement à des fins de tests de sécurité autorisés et de recherche. Toute utilisation non autorisée contre des systèmes que vous ne possédez pas ou pour lesquels vous n'avez pas l'autorisation explicite de tester est illégale.