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:

RamoVersão segura
110.0.x11.110.0.97
118.0.x11.118.0.63
126.0.x11.126.0.54
132.0.x11.132.0.29
134.0.x11.134.0.20
136.0.x11.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_log
grep "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 IP
grep "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 invulgar
find /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 suspeitas
find /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 recentemente
awk -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 apagado
cat /root/.bash_history
# Processos lançados por utilizadores inesperados
last -F | head -40
# Verificar se há chaves SSH novas injetadas
cat /root/.ssh/authorized_keys
find /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/WHM
LF_CPANEL = 5 # Máximo de falhas antes de bloquear
LF_CPANEL_PERM = 1 # 1 = bloqueio permanente após atingir limite
# Bloquear IPs com muitas falhas de login em geral
LF_TRIGGER = 10
LF_INTERVAL = 3600
# Alertas por email em logins root via cPanel
LT_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
# ou
service lfd restart

Verificar se as regras estão ativas:

bash

csf -g <IP_SUSPEITO> # Ver se um IP está bloqueado
tail -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

Contacte a CpC para pedidos de ajuda, orientações, conselhos e propor iniciativas:

← Back

Your message has been sent

“A cibersegurança é a arte de proteger a informação digital sem restringir a inovação.”
— Satya Nadella