One-shot rilevamento e remediation per server cPanel/WHM compromessi tramite CVE-2026-41940, inclusi controlli IOC, pulizia malware, blocco C2 e applicazione delle patch.
Rilevamento e bonifica in un colpo solo per server cPanel/WHM compromessi tramite CVE-2026-41940 e la campagna botnet
nuclear.x86.
Il 28 aprile 2026, cPanel ha divulgato una vulnerabilità di bypass dell'autenticazione pre-autenticazione (CVE-2026-41940, CVSS 9.8) che interessa tutte le versioni supportate di cPanel & WHM successive alla 11.40. Una singola richiesta HTTP alla porta 2087 consente a un attaccante non autenticato di iniettare una sessione user=root e accedere direttamente a WHM.
Lo sfruttamento è stato osservato in natura almeno dal 23 febbraio 2026 — sei settimane prima del rilascio della patch. La campagna che abbiamo ripulito su più server installa un botnet Linux chiamato nuclear.x86 insieme a un crypto-miner basato su XMRig.
Questo repository contiene un singolo script Bash che:
/scripts/upcp --forceÈ progettato per provider di hosting, sysadmin e rivenditori cPanel che devono effettuare un triage rapido su una flotta di server.
Se wget o curl restituiscono Killed quando provi a scaricare file, il malware è ancora in esecuzione — nuclear.x86 termina attivamente gli strumenti di download per impedire la pulizia. Esegui prima il passaggio di kill (lo script lo fa per te in modalità --fix).
Se non riesci a scaricare questo script per questo motivo, copialo e incollalo via SSH dal tuo laptop, oppure usa scp.
# Come root, sul server 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
Oppure con 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
Comando singolo (prima esamina lo script, poi eseguilo):
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
# Dopo averlo esaminato, eseguilo:
./fix-cpanel-cve-2026-41940.sh
Verifica prima di eseguire. Questo script viene eseguito come root e modifica lo stato del sistema. Aprilo e leggilo prima. Non convogliare script casuali da internet direttamente in
bash.
# 1. Solo scansione (predefinita, nessuna modifica — sempre sicura da eseguire)
./fix-cpanel-cve-2026-41940.sh
# 2. Scansione + bonifica, con richiesta di conferma per ogni azione distruttiva
./fix-cpanel-cve-2026-41940.sh --fix
# 3. Auto completa: fix + aggiornamento cPanel + pulizia cache + hardening leggero
./fix-cpanel-cve-2026-41940.sh --auto
# 4. Non presidiata (nessuna richiesta — per cron, jump-box, script di flotta)
./fix-cpanel-cve-2026-41940.sh --auto -y
# 5. Aiuto
./fix-cpanel-cve-2026-41940.sh --help
| Codice | Significato |
|---|---|
0 | Pulito — nessun IOC rilevato |
2 | Indicatori di compromissione rilevati (esamina il report) |
1 / altro | Errore pre-volo (non root, non un server cPanel, ecc.) |
/var/log/cpanel-cve-fix/scan-<TIMESTAMP>.log/var/log/cpanel-cve-fix/report-<TIMESTAMP>.txt/root/cve-cleanup-backup-<TIMESTAMP>/| # | Controllo | Cosa rileva |
|---|---|---|
| 1 | Build cPanel vs release patchate | Host vulnerabili (elenca tutte le 6 build patchate) |
| 2 | Processi in esecuzione | nuclear.x86, xmrig, cpuminer, minerd, xmr-stak, 4thepool_miner |
| 3 | Connessioni di rete attive | I tre IP C2 noti + porte dei mining-pool |
| 4 | File di cronologia shell | Comandi IOC in bash_history / zsh_history |
| 5 | Integrità del firewall | Il passo di sabotaggio iptables -F |
| 6 | Directory raw delle sessioni cPanel | File di sessione contraffatti user=root |
| 7 | /tmp, /var/tmp, /dev/shm | Eseguibili depositati di recente |
| 8 | Voci cron | Persistenza (di sistema + per utente) |
| 9 | File authorized_keys | Nuove chiavi SSH — audit in sola lettura |
| 10 | Log di accesso cPanel | Firme di exploit Go-http-client / python-requests |
| 11 | Binari critici | wget / curl / ls / ps manomessi (mtime + verifica RPM) |
/var/cpanel/sessions/raw/* (con backup tar.gz prima)cpsrvd, cpdavd, cphulkd, queueprocd, dnsadmin/scripts/upcp --force (solo in --auto)rndc flush), i vecchi log journalLF_INTEGRITY se disponibileQueste azioni causerebbero più danni che benefici se eseguite in modalità non presidiata via SSH, quindi finiscono nel report delle azioni manuali:
/home/*/public_htmlPer eseguire la scansione su molti server da una 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
Poi cerca nei report:
grep -l "COMPROMISE INDICATORS PRESENT" reports/*
Lo script elencherà queste azioni nel suo report. Nessuna di esse può essere automatizzata in sicurezza.
/etc/shadow)wp-config.php, .env, config.php, ecc./home/*/public_html per web-shell (file .php modificati di recente)Devi essere su una di queste build o superiore:
| Track | Build patchata |
|---|---|
| 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 |
Controlla la tua con /usr/local/cpanel/cpanel -V.
| Tipo | Indicatore |
|---|---|
| IP | 87.121.84.78 (drop di nuclear.x86) |
| IP | 45.148.120.23 (drop alternativo di nuclear.x86) |
| IP | 31.57.109.131 (script miner) |
| File | nuclear.x86 (ELF derivato da Mirai) |
| Processo | nuclear.x86 xd |
| Script | 4thepool_miner.sh |
| User-Agent | Go-http-client/1.1 che colpisce la porta 2087 |
| User-Agent | python-requests/* che colpisce la porta 2087 |
| Pattern | Nuovo file in /var/cpanel/sessions/raw/ contenente user=root senza login riuscito corrispondente in login_log |
| Pattern | Regole iptables vuote / svuotate |
È sicuro eseguirlo su un server sano? Sì. La modalità predefinita è solo scansione e non apporta modifiche. Le modalità fix e auto sono idempotenti.
Causerà tempi di inattività?
--fix causa una breve interruzione di WHM/cPanel quando riavvia cpsrvd (~10 secondi). --auto esegue /scripts/upcp --force che può richiedere 10–30 minuti — i siti web restano attivi durante questo periodo, ma WHM è brevemente non disponibile alla fine.
La mia versione di cPanel non è nell'elenco delle patchate — sono al sicuro? Se sei su un track precedente alla 110.0.x, sei su una versione a fine vita. cPanel non rilascerà una patch. Tratta l'host come compromesso finché non viene dimostrato il contrario e aggiorna con urgenza.
Lo script dice Killed quando prova a fare qualsiasi cosa.
È nuclear.x86 che termina attivamente i tuoi strumenti. Esegui prima manualmente il passaggio di kill:
pkill -9 -f nuclear.x86
Poi rilancia lo script.
Funziona su AlmaLinux / Rocky / CloudLinux / CentOS? Sì — tutte le piattaforme cPanel standard. Testato su AlmaLinux 8, Rocky 9, CloudLinux 7+.
Toccherà i siti web dei miei clienti?
No. Lo script non modifica nulla in /home/*/public_html. Interviene solo sulla configurazione a livello di sistema operativo, sulle sessioni cPanel, sulle regole del firewall e sui processi noti come dannosi.
PR benvenuti — in particolare per:
Per favore non aggiungere nulla che ruoti automaticamente le credenziali o elimini dati utente — mantenere ristretta la superficie distruttiva è intenzionale.
MIT. Usalo, fai un fork, integralo nei tuoi strumenti. L'attribuzione è apprezzata ma non richiesta.
Realizzato da WHMCSPilot.com — SM.
Crediti per la ricerca sulla vulnerabilità: team di sicurezza cPanel, watchTowr Labs, Rapid7, KnownHost e la più ampia community di hosting che ha condiviso gli IOC mentre la campagna si sviluppava.
Questo script è fornito così com'è, senza garanzia. È uno strumento di triage di prima risposta — non un sostituto di un intervento completo di incident response. Se gestisci PII, dati di pagamento o altri dati regolamentati, consulta il tuo DPO e una società di IR qualificata prima di dichiarare pulita una macchina compromessa.
Se un server è stato attivamente compromesso, la strada più sicura è sempre ricostruire da un backup noto-buono, non pulire sul posto.