O painel de controlo que gere mais de 70 milhões de sites tem uma falha que permite a qualquer pessoa assumir o controlo total do servidor – sem saber uma única palavra -passe. Já está a ser explorada ativamente.
O que é o cPanel/WHM?
O cPanel é o painel de controlo usado pela esmagadora maioria dos serviços de alojamento web para gerir servidores, domínios, contas de email, bases de dados e certificados SSL. O WHM é a versão administrativa que controla o servidor inteiro. Quem obtiver acesso root ao WHM tem acesso a tudo — a cada site, a cada conta, a cada ficheiro alojado nesse servidor.
O que foi descoberto
A vulnerabilidade CVE-2026-41940 afeta todas as versões suportadas do cPanel e WHM. A empresa de investigação watchTowr Labs publicou hoje a análise técnica completa do ataque, após o fornecedor de alojamento KnownHost confirmar que a falha já estava a ser usada para comprometer servidores em produção.
Como funciona o ataque:
O ataque completo resume-se a um punhado de pedidos HTTP:
Passo 1 — O atacante faz uma tentativa de login deliberadamente errada. O cPanel cria um registo temporário em disco e devolve um cookie associado a essa sessão.
Passo 2 — O atacante manipula o cookie para desativar a encriptação da palavra-passe. Em condições normais, o cPanel guarda as palavras-passe em disco de forma encriptada. Com uma alteração mínima ao cookie, passa a guardá-las em texto simples.
Passo 3 — O atacante envia uma tentativa de login onde o campo da palavra-passe contém quebras de linha ocultas. O cPanel não remove estas quebras de linha, que ficam escritas diretamente no ficheiro de sessão. Cada quebra de linha cria um novo registo falso. O atacante usa isto para injetar linhas que dizem “este utilizador é root” e “este utilizador já se autenticou com sucesso”.
Passo 4 — O atacante visita mais uma página qualquer do servidor para forçar o cPanel a reler o ficheiro. O cPanel promove as linhas injetadas para a sua memória de sessão principal.
Passo 5 — No pedido seguinte, o cPanel encontra um sinalizador que diz “este utilizador já passou a verificação de palavra-passe”. O cPanel confia nesse sinalizador, ignora a verificação da palavra-passe real, e deixa o atacante entrar como root.
Versões corrigidas
Se administra cPanel ou WHM, atualize imediatamente para uma das versões corrigidas:
| Ramo | Versão segura |
|---|---|
| 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 |
Se a sua versão for anterior a qualquer um destes valores, parta do princípio de que o servidor já foi comprometido e aja em conformidade.
O que fazer agora
1. Atualize imediatamente. Não espere pela próxima janela de manutenção (há alerta no seu painel e deve ter recebido outro por email).
2. Rotação completa de credenciais — trate todos os segredos do servidor como comprometidos:
- Palavra-passe root
- Tokens de API
- Chaves privadas SSL
- Chaves SSH
- Palavras-passe de email
- Palavras-passe de bases de dados
3. Se gerir alojamento partilhado, notifique os seus clientes. Esta falha não compromete apenas o servidor — compromete todos os sites e contas alojados nele.
Fontes: watchTowr Labs, divulgação KnownHost | CVE-2026-41940
Como procura nos logs por sinais de comprometimento?
1. Análise de logs — o que procurar e onde
Ficheiros de log relevantes no cPanel/WHM
bash
/usr/local/cpanel/logs/access_log # Pedidos à interface cPanel/WHM/usr/local/cpanel/logs/error_log/usr/local/cpanel/logs/login_log # Tentativas de login (crítico)/var/log/messages/var/log/secure # Autenticações SSH e su/sudo/var/log/wtmp # Histórico de sessões (via last)/var/cpanel/accounting.log # Criação/remoção de contas
Padrões de comprometimento a procurar
Sessões anómalas no login_log — o sinal mais direto desta CVE:
bash
grep -E "(AUTHED|root)" /usr/local/cpanel/logs/login_log | \ grep -v "^#" | \ awk '{print $1, $2, $3, $NF}' | \ sort | uniq -c | sort -rn | head -50
Procura específica por logins root via interface web (não SSH):
bash
grep "user=root" /usr/local/cpanel/logs/login_loggrep "type=passwd" /usr/local/cpanel/logs/login_log | grep "root"
Pedidos suspeitos no access_log — manipulação de cookies e sessões:
bash
# Pedidos com cookies anormalmente longos ou com %0a/%0d (line breaks codificados)grep -E "%0[aAdD]" /usr/local/cpanel/logs/access_log# Pedidos à interface de login com métodos POST repetidos do mesmo IPgrep "POST.*login" /usr/local/cpanel/logs/access_log | \ awk '{print $1}' | sort | uniq -c | sort -rn | head -20# Sequências de 401 seguidas de 200 do mesmo IP (padrão de exploração)awk '$9==401 || $9==200 {print $1, $9}' /usr/local/cpanel/logs/access_log | \ awk 'prev==$1 && prev_code=="401" && $2=="200" {print "SUSPEITO:", $1} \ {prev=$1; prev_code=$2}'
Ficheiros de sessão manipulados:
bash
# Sessões criadas recentemente com conteúdo invulgarfind /var/cpanel/sessions -newer /usr/local/cpanel/cpanel -type f 2>/dev/null | \ xargs grep -l "root\|authed\|authenticated" 2>/dev/null# Ver conteúdo de sessões suspeitasfind /var/cpanel/sessions -type f -exec grep -l "root" {} \;
Contas criadas ou modificadas em janelas temporais suspeitas:
bash
grep -E "(ADDACCT|REMOVEACCT|PASSWD)" /var/cpanel/accounting.log | tail -100# Utilizadores adicionados ao sistema recentementeawk -F: '$3 >= 1000 {print $1, $3, $6}' /etc/passwd | sort -k2 -n | tail -20
Comandos executados como root — verificar histórico:
bash
# Se o bash history não foi apagadocat /root/.bash_history# Processos lançados por utilizadores inesperadoslast -F | head -40# Verificar se há chaves SSH novas injetadascat /root/.ssh/authorized_keysfind /home -name "authorized_keys" -exec echo "=== {} ===" \; -exec cat {} \;
Integridade de binários críticos — possível pós-exploração:
bash
rpm -Va 2>/dev/null | grep -E "^..5|^.M" | head -30# O "5" indica alteração de checksum MD5; "M" indica permissões alteradas# Alternativa se não usar RPM:find /usr/bin /usr/sbin /bin /sbin -newer /usr/local/cpanel/cpanel \ -type f 2>/dev/null
2. Regras CSF para mitigação e deteção
Bloqueio de padrões de exploração conhecidos
No ficheiro /etc/csf/csf.pignore não mexe — as regras vão para o csf.conf e para o sistema de Custom Regex do LFD.
Em /etc/csf/csf.conf, ajuste ou confirme estes valores:
ini
# Limitar tentativas de login à interface cPanel/WHMLF_CPANEL = 5 # Máximo de falhas antes de bloquearLF_CPANEL_PERM = 1 # 1 = bloqueio permanente após atingir limite# Bloquear IPs com muitas falhas de login em geralLF_TRIGGER = 10LF_INTERVAL = 3600# Alertas por email em logins root via cPanelLT_EMAIL_ALERT = 1
Regras de regex custom para o LFD — adicione em /etc/csf/regex.custom.pm:
perl
# Deteção de tentativas de exploração CVE-2026-41940# Padrão: POST repetido ao login seguido de autenticação root bem-sucedida# Line breaks codificados em pedidos POST (sinal de injeção de sessão)if ($lgfile eq "/usr/local/cpanel/logs/access_log") { if ($line =~ /POST.*login.*%0[aAdD]/i) { $ip = $1 if $line =~ /^(\S+)/; return ("CVE-2026-41940 exploit attempt - encoded newline in POST", 3, $ip); }}# Login root via interface web cPanel (nunca deve acontecer em produção normal)if ($lgfile eq "/usr/local/cpanel/logs/login_log") { if ($line =~ /user=root.*type=passwd/i) { $ip = $1 if $line =~ /ip=(\S+)/; return ("Root login via cPanel web interface", 5, $ip); }}
Após editar o ficheiro, recarregue o LFD:
bash
systemctl restart lfd# ouservice lfd restart
Verificar se as regras estão ativas:
bash
csf -g <IP_SUSPEITO> # Ver se um IP está bloqueadotail -f /var/log/lfd.log # Monitor em tempo real do LFD
Rate limiting na porta 2083/2087 via CSF
Adicione em csf.conf:
ini
# Portas cPanel (2082/2083) e WHM (2086/2087)
PORTFLOOD = 2083;tcp;20;5,2087;tcp;10;5
# Formato: porta;protocolo;hits;segundos
# Bloqueia IPs que façam mais de 20 ligações à porta 2083 em 5 segundos

Deixe um comentário