Détection et remédiation en une seule passe pour les serveurs cPanel/WHM compromis via CVE-2026-41940, incluant les vérifications IOC, le nettoyage des malwares, le blocage C2 et le correctif.
Détection et remédiation en une seule passe pour les serveurs cPanel/WHM compromis via CVE-2026-41940 et la campagne du botnet
nuclear.x86.
Le 28 avril 2026, cPanel a divulgué une vulnérabilité de contournement d'authentification pré-authentification (CVE-2026-41940, CVSS 9.8) affectant toutes les versions prises en charge de cPanel & WHM après la 11.40. Une seule requête HTTP vers le port 2087 permet à un attaquant non authentifié d'injecter une session user=root et d'accéder directement à WHM.
L'exploitation a été observée dans la nature depuis au moins le 23 février 2026 — six semaines avant la publication du correctif. La campagne que nous avons nettoyée sur plusieurs serveurs installe un botnet Linux nommé nuclear.x86 ainsi qu'un mineur de crypto-monnaie basé sur XMRig.
Ce dépôt contient un unique script Bash qui :
/scripts/upcp --forceIl est conçu pour les hébergeurs, administrateurs système et revendeurs cPanel qui doivent trier rapidement un parc de serveurs.
Si wget ou curl renvoient Killed lorsque vous essayez de télécharger des fichiers, le malware est toujours actif — nuclear.x86 tue activement les outils de téléchargement pour empêcher le nettoyage. Exécutez d'abord l'étape de kill (le script le fait pour vous en mode --fix).
Si vous ne pouvez pas télécharger ce script pour cette raison, copiez-collez-le via SSH depuis votre ordinateur portable, ou utilisez scp.
# En tant que root, sur le serveur cPanel :
cd /root
wget https://raw.githubusercontent.com/shahidmallaofficial/cpanel-cve-2026-41940-fix/main/fix-cpanel-cve-2026-41940.sh
chmod +x fix-cpanel-cve-2026-41940.sh
Ou avec curl :
cd /root
curl -fsSLO https://raw.githubusercontent.com/shahidmallaofficial/cpanel-cve-2026-41940-fix/main/fix-cpanel-cve-2026-41940.sh
chmod +x fix-cpanel-cve-2026-41940.sh
En une ligne (relisez d'abord le script, puis exécutez-le) :
cd /root && \
curl -fsSLO https://raw.githubusercontent.com/shahidmallaofficial/cpanel-cve-2026-41940-fix/main/fix-cpanel-cve-2026-41940.sh && \
chmod +x fix-cpanel-cve-2026-41940.sh && \
less fix-cpanel-cve-2026-41940.sh
# Après relecture, exécutez-le :
./fix-cpanel-cve-2026-41940.sh
Vérifiez avant d'exécuter. Ce script s'exécute en root et modifie l'état du système. Ouvrez-le et lisez-le d'abord. Ne pipez pas des scripts aléatoires d'Internet directement dans
bash.
# 1. Analyse uniquement (par défaut, aucune modification — toujours sûr à exécuter)
./fix-cpanel-cve-2026-41940.sh
# 2. Analyse + remédiation, avec une invite de confirmation pour chaque action destructive
./fix-cpanel-cve-2026-41940.sh --fix
# 3. Automatique complet : correction + mise à jour cPanel + purge du cache + durcissement léger
./fix-cpanel-cve-2026-41940.sh --auto
# 4. Sans intervention (aucune invite — pour cron, jump-boxes, scripts de parc)
./fix-cpanel-cve-2026-41940.sh --auto -y
# 5. Aide
./fix-cpanel-cve-2026-41940.sh --help
| Code | Signification |
|---|---|
0 | Propre — aucun IOC détecté |
2 | Indicateurs de compromission détectés (consultez le rapport) |
1 / autre | Échec de pré-vol (pas root, pas un serveur cPanel, etc.) |
/var/log/cpanel-cve-fix/scan-<TIMESTAMP>.log/var/log/cpanel-cve-fix/report-<TIMESTAMP>.txt/root/cve-cleanup-backup-<TIMESTAMP>/| # | Vérification | Ce qu'elle détecte |
|---|---|---|
| 1 | Build cPanel vs versions corrigées | Hôtes vulnérables (liste les 6 builds corrigées) |
| 2 | Processus en cours | nuclear.x86, xmrig, cpuminer, minerd, xmr-stak, 4thepool_miner |
| 3 | Connexions réseau actives | Les trois IP C2 connues + ports des pools de minage |
| 4 | Fichiers d'historique shell | Commandes IOC dans bash_history / zsh_history |
| 5 | Intégrité du pare-feu | L'étape de sabotage iptables -F |
| 6 | Répertoire brut des sessions cPanel | Fichiers de session falsifiés user=root |
| 7 | /tmp, /var/tmp, /dev/shm | Exécutables récemment déposés |
| 8 | Entrées cron | Persistance (système + par utilisateur) |
| 9 | Fichiers authorized_keys | Nouvelles clés SSH — audit en lecture seule |
| 10 | Journaux d'accès cPanel | Signatures d'exploitation Go-http-client / python-requests |
| 11 | Binaires critiques | wget / curl / ls / ps falsifiés (mtime + vérification RPM) |
/var/cpanel/sessions/raw/* (avec sauvegarde tar.gz d'abord)cpsrvd, cpdavd, cphulkd, queueprocd, dnsadmin/scripts/upcp --force (uniquement en --auto)rndc flush), les anciens journauxLF_INTEGRITY si disponibleCes actions feraient plus de mal que de bien lorsqu'elles sont exécutées sans surveillance via SSH, elles sont donc incluses dans le rapport d'actions manuelles à la place :
/home/*/public_htmlPour balayer de nombreux serveurs depuis une jump-box :
mkdir -p reports
while read -r host; do
echo "=== $host ==="
scp fix-cpanel-cve-2026-41940.sh "root@${host}:/root/" >/dev/null
ssh "root@${host}" '/root/fix-cpanel-cve-2026-41940.sh --auto -y'
scp "root@${host}:/var/log/cpanel-cve-fix/report-*.txt" "reports/${host}.txt" 2>/dev/null
done < servers.txt
Puis filtrez les rapports :
grep -l "COMPROMISE INDICATORS PRESENT" reports/*
Le script listera ces actions dans son rapport. Aucune d'entre elles ne peut être automatisée en toute sécurité.
/etc/shadow)wp-config.php, .env, config.php, etc./home/*/public_html pour les web-shells (fichiers .php récemment modifiés)Vous devez être à ou au-dessus de l'une de ces builds :
| Track | Build corrigée |
|---|---|
| 110.0.x | 11.110.0.97 |
| 118.0.x | 11.118.0.63 |
| 126.0.x | 11.126.0.54 |
| 132.0.x | 11.132.0.29 |
| 134.0.x | 11.134.0.20 |
| 136.0.x | 11.136.0.5 |
| WP² | 11.136.1.7 |
Vérifiez la vôtre avec /usr/local/cpanel/cpanel -V.
| Type | Indicateur |
|---|---|
| IP | 87.121.84.78 (dépôt nuclear.x86) |
| IP | 45.148.120.23 (dépôt alternatif nuclear.x86) |
| IP | 31.57.109.131 (script mineur) |
| Fichier | nuclear.x86 (ELF dérivé de Mirai) |
| Processus | nuclear.x86 xd |
| Script | 4thepool_miner.sh |
| User-Agent | Go-http-client/1.1 touchant le port 2087 |
| User-Agent | python-requests/* touchant le port 2087 |
| Motif | Nouveau fichier dans /var/cpanel/sessions/raw/ contenant user=root sans connexion réussie correspondante dans login_log |
| Motif | Règles iptables vides / vidées |
Est-il sûr de l'exécuter sur un serveur sain ? Oui. Le mode par défaut est l'analyse seule et n'apporte aucune modification. Les modes de correction et automatique sont idempotents.
Cela provoquera-t-il une interruption de service ?
--fix provoque une brève interruption de WHM/cPanel lorsqu'il redémarre cpsrvd (~10 secondes). --auto exécute /scripts/upcp --force qui peut prendre 10 à 30 minutes — les sites web restent en ligne pendant ce temps, mais WHM est brièvement indisponible à la fin.
Ma version cPanel n'est pas dans la liste des versions corrigées — suis-je en sécurité ? Si vous êtes sur un track antérieur à 110.0.x, vous êtes sur une version en fin de vie. cPanel ne publiera pas de correctif. Traitez l'hôte comme compromis jusqu'à preuve du contraire et effectuez une mise à niveau en urgence.
Le script affiche Killed lorsqu'il essaie de faire quoi que ce soit.
C'est nuclear.x86 qui tue activement vos outils. Exécutez d'abord l'étape de kill manuellement :
pkill -9 -f nuclear.x86
Puis relancez le script.
Cela fonctionne-t-il sur AlmaLinux / Rocky / CloudLinux / CentOS ? Oui — toutes les plateformes cPanel standard. Testé sur AlmaLinux 8, Rocky 9, CloudLinux 7+.
Cela touchera-t-il les sites web de mes clients ?
Non. Le script ne modifie rien dans /home/*/public_html. Il ne touche qu'à la configuration au niveau OS, aux sessions cPanel, aux règles de pare-feu et aux processus connus comme malveillants.
Les PR sont les bienvenues — en particulier pour :
Merci de ne rien ajouter qui fasse automatiquement la rotation des identifiants ou supprime des données utilisateur — maintenir une surface destructive étroite est intentionnel.
MIT. Utilisez-le, forkez-le, intégrez-le dans vos propres outils. L'attribution est appréciée mais non requise.
Développé par WHMCSPilot.com — SM.
Crédit de recherche sur la vulnérabilité : équipe sécurité cPanel, watchTowr Labs, Rapid7, KnownHost, et la communauté d'hébergement au sens large qui a partagé les IOC au fur et à mesure que la campagne se déroulait.
Ce script est fourni tel quel, sans garantie. C'est un outil de triage de première réponse — pas un substitut à une intervention complète de réponse à incident. Si vous traitez des données personnelles, des données de paiement ou d'autres données réglementées, consultez votre DPO et un cabinet IR qualifié avant de déclarer une machine compromise comme propre.
Si un serveur a été activement compromis, le chemin le plus sûr est toujours de reconstruire à partir d'une sauvegarde connue bonne, plutôt que de nettoyer sur place.