
Un honeypot en Rust que simula una instancia vulnerable de cPanel/WHM para CVE-2026-41940

Un honeypot en Rust que simula una instancia vulnerable de cPanel/WHM para CVE-2026-41940 (bypass de autenticación cPanel2Shell).
Este honeypot emula la secuencia de respuestas utilizada por los escáneres de vulnerabilidades cPanel2Shell:
msg_code:[expired_session] en los endpoints de tokenLos atacantes que superan la sonda inicial son llevados a un shell bash falso respaldado por un sistema de archivos virtual en memoria.
cargo build --release
# Por defecto: puertos 2087, 2083 con TLS autogenerado
./target/release/cpanel2shell-honeypot
# Puertos personalizados
./target/release/cpanel2shell-honeypot -p 2083,2087
# Deshabilitar TLS
./target/release/cpanel2shell-honeypot --no-tls
# TLS por nombre de host con recarga en caliente
./target/release/cpanel2shell-honeypot --certs-config data/certs.toml
# Todas las opciones
./target/release/cpanel2shell-honeypot --help
Crea data/certs.toml (consulta data/certs.example.toml):
default = "auto"
[auto]
cache_dir = "./captures/certs"
key_type = "ecdsa-p256"
validity_days = 365
issuer_cn = "Let's Encrypt Authority X3"
[[host]]
sni = "cpanel.example.com"
cert = "/etc/honeypot/certs/cpanel.pem"
key = "/etc/honeypot/certs/cpanel.key"
src/
├── main.rs # Punto de entrada, configuración del runtime
├── cli.rs # Argumentos de línea de comandos
├── config.rs # Configuración de la aplicación
├── router.rs # Definiciones de rutas HTTP
├── capture.rs # Registro de solicitudes y almacenamiento de payloads
├── sessions/ # Persistencia de sesiones
├── handlers/ # Manejadores de solicitudes HTTP
├── shell/ # Intérprete bash y VFS
│ ├── lexer.rs # Tokenizador
│ ├── parser.rs # Analizador sintáctico descendente recursivo
│ ├── exec.rs # Ejecutor de AST
│ ├── expand.rs # Expansión de variables
│ ├── builtins.rs # Comandos integrados del shell
│ ├── commands.rs # Stubs de comandos externos
│ ├── vfs.rs # Sistema de archivos virtual
│ └── init.rs # Datos semilla del sistema de archivos
└── tls/ # Gestión de certificados TLS
├── config.rs # Configuración de certificados
├── generator.rs # Generación de certificados
├── resolver.rs # Resolución de certificados SNI
└── watcher.rs # Recarga en caliente del archivo de configuración
El shell falso implementa un subconjunto de bash:
$VAR, ${VAR:-default})$(cmd), `cmd`)El estado de la sesión (cwd, env, escrituras VFS, historial) persiste entre reinicios mediante instantáneas JSON.
Toda la actividad del atacante se escribe en ./captures/:
| Patrón de archivo | Descripción |
|---|---|
upload_*.bin | Archivos subidos |
upload_meta_*.txt | Metadatos de subida |
post_*.txt | Cuerpos de solicitudes POST |
cmd_*.txt | Comandos de terminal |
sessions/*.json | Instantáneas de sesión |
certs/ | Certificados TLS en caché |
until/caseMIT