
Um honeypot em Rust que simula uma instância vulnerável de cPanel/WHM para a CVE-2026-41940

Um honeypot em Rust que simula uma instância vulnerável de cPanel/WHM para o CVE-2026-41940 (bypass de autenticação cPanel2Shell).
Este honeypot emula a sequência de respostas usada por scanners de vulnerabilidade cPanel2Shell:
msg_code:[expired_session] em endpoints de tokenAtacantes que prosseguem além da sonda inicial são direcionados para um shell bash falso apoiado por um sistema de arquivos virtual em memória.
cargo build --release
# Padrão: portas 2087, 2083 com TLS gerado automaticamente
./target/release/cpanel2shell-honeypot
# Portas personalizadas
./target/release/cpanel2shell-honeypot -p 2083,2087
# Desabilitar TLS
./target/release/cpanel2shell-honeypot --no-tls
# TLS por hostname com hot-reload
./target/release/cpanel2shell-honeypot --certs-config data/certs.toml
# Todas as opções
./target/release/cpanel2shell-honeypot --help
Crie data/certs.toml (veja 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 # Ponto de entrada, configuração de runtime
├── cli.rs # Argumentos de linha de comando
├── config.rs # Configuração da aplicação
├── router.rs # Definições de rotas HTTP
├── capture.rs # Registro de requisições e armazenamento de payload
├── sessions/ # Persistência de sessão
├── handlers/ # Handlers de requisições HTTP
├── shell/ # Interpretador bash e VFS
│ ├── lexer.rs # Tokenizador
│ ├── parser.rs # Parser descendente recursivo
│ ├── exec.rs # Executor de AST
│ ├── expand.rs # Expansão de variáveis
│ ├── builtins.rs # Builtins do shell
│ ├── commands.rs # Stubs de comandos externos
│ ├── vfs.rs # Sistema de arquivos virtual
│ └── init.rs # Dados de seed do sistema de arquivos
└── tls/ # Gerenciamento de certificados TLS
├── config.rs # Configuração de certificados
├── generator.rs # Geração de certificados
├── resolver.rs # Resolução de certificados SNI
└── watcher.rs # Hot-reload do arquivo de configuração
O shell falso implementa um subconjunto do bash:
$VAR, ${VAR:-default})$(cmd), `cmd`)O estado da sessão (cwd, env, gravações no VFS, histórico) persiste entre reinicializações via snapshots JSON.
Toda a atividade do atacante é gravada em ./captures/:
| Padrão de Arquivo | Descrição |
|---|---|
upload_*.bin | Arquivos enviados |
upload_meta_*.txt | Metadados de upload |
post_*.txt | Corpos de requisições POST |
cmd_*.txt | Comandos de terminal |
sessions/*.json | Snapshots de sessão |
certs/ | Certificados TLS em cache |
until/caseMIT