
Scanner Python leve para CVE-2023-48795 (truncamento de prefixo Terrapin do SSH). Realiza captura passiva de banner e análise do KEXINIT para detectar combinações vulneráveis de cifra/MAC e mitigação strict-KEX ausente.
Um scanner Python leve para a CVE-2023-48795 — a vulnerabilidade de truncamento de prefixo SSH Terrapin.
Terrapin é uma vulnerabilidade a nível de protocolo no SSH que permite a um invasor realizando um MitM ativo truncar as informações de extensão negociadas, rebaixando a segurança da conexão — sendo mais crítico desabilitar
ext-info(usado para algoritmos de assinatura do servidor) eping(usado pela extensãono-authdo OpenSSH).
| Campo | Detalhe |
|---|---|
| CVE | CVE-2023-48795 |
| CVSS | 5.9 (Médio) |
| Tipo | Protocolo SSH — Truncamento de Prefixo / Bypass de Integridade |
| Divulgação | Dezembro de 2023 |
| Afetados | OpenSSH < 9.6, PuTTY < 0.80, libssh < 0.10.6 e muitos outros |
| Referências | terrapin-attack.com |
A vulnerabilidade existe porque certas combinações de cifra/MAC do SSH — especificamente chacha20-poly1305 e cifras em modo CBC com Encrypt-then-MAC — permitem que um invasor MitM ativo injete e remova números de sequência durante o handshake, truncando os dados de extensão negociados sem detecção.
A correção introduziu uma extensão KEX estrita (kex-strict-*[email protected]) que tanto cliente quanto servidor devem anunciar para estarem imunes.
O script realiza apenas uma captura passiva de banner e análise do KEXINIT — nenhum handshake SSH completo, nenhuma autenticação, nenhuma exploração:
SSH_MSG_KEXINIT do servidorComo a verificação ocorre inteiramente dentro da fase de troca de chaves, ela é não intrusiva e não deixa rastros significativos além de uma tentativa normal de conexão TCP.
socket, struct, argparse, concurrent.futures)git clone https://github.com/Mr-Whiskerss/terrapin_check
cd terrapin_check
chmod +x terrapin_check.py
python3 terrapin_check.py <host> [port]
python3 terrapin_check.py 192.168.1.10
python3 terrapin_check.py 192.168.1.10 2222
Um alvo por linha — aceita formato host ou host:porta.
python3 terrapin_check.py -f targets.txt
python3 terrapin_check.py -f targets.txt --threads 20 --timeout 3
python3 terrapin_check.py -f targets.txt --summary
usage: terrapin_check.py [-h] [-f FILE] [-p PORT] [--threads THREADS] [--timeout TIMEOUT] [--summary] [host] [port]
positional arguments:
host Target host
port SSH port (default: 22)
options:
-h, --help Show this help message and exit
-f, --file FILE File containing hosts (host or host:port per line)
-p, --port-flag PORT Default port when using -f (default: 22)
--threads THREADS Concurrent threads for bulk scan (default: 10)
--timeout TIMEOUT Socket timeout in seconds (default: 5.0)
--summary Print one-line summary per host only
| Código | Significado |
|---|---|
0 | Nenhum host vulnerável encontrado |
1 | Um ou mais hosts vulneráveis detectados |
Isso permite que o script seja usado de forma limpa em pipelines e fluxos de trabalho automatizados.
────────────────────────────────────────────────────────────
Target : 192.168.1.10:22
Banner : SSH-2.0-OpenSSH_8.9p1 Ubuntu-3ubuntu0.6
Status : VULNERABLE
Strict-KEX : No
✗ ChaCha20-Poly1305 advertised → prefix-truncation possible
✗ CBC+ETM combination advertised
CBC ciphers : aes128-cbc, aes256-cbc
ETM MACs : [email protected], [email protected]
KEX algorithms:
curve25519-sha256
ecdh-sha2-nistp256
diffie-hellman-group14-sha256
────────────────────────────────────────────────────────────
[VULN] 192.168.1.10:22 VULNERABLE (CVE-2023-48795)
[SAFE] 192.168.1.20:22 Not vulnerable
[MIT] 192.168.1.30:22 Algorithms present but strict-KEX mitigates
[?] 192.168.1.99:22 ERROR: Connection refused
O script marca um host como VULNERÁVEL se qualquer das seguintes condições for verdadeira e a extensão KEX estrita não estiver anunciada:
O servidor anuncia [email protected] em qualquer direção de criptografia.
O servidor anuncia qualquer cifra em modo CBC e qualquer MAC ETM juntos:
Cifras CBC verificadas:
aes128-cbc, aes192-cbc, aes256-cbc, 3des-cbc, blowfish-cbc, cast128-cbc, idea-cbc, arcfour, arcfour128, arcfour256, [email protected]
MACs ETM verificados:
[email protected], [email protected], [email protected], [email protected] e variantes
Se o servidor anunciar [email protected] em sua lista de algoritmos KEX, a conexão está protegida independentemente de quais cifras e MACs são oferecidos. O script reportará MITIGADO em vez de VULNERÁVEL neste caso.
# /etc/ssh/sshd_config
Ciphers aes128-ctr,aes192-ctr,aes256-ctr,[email protected],[email protected]
MACs hmac-sha2-256,hmac-sha2-512
A remoção de algoritmos reduz a agilidade de cifras. A atualização é sempre a remediação preferida.
Esta ferramenta é destinada apenas para avaliações de segurança autorizadas. Use-a somente contra sistemas que você possui ou para os quais tenha permissão explícita por escrito para testar. O autor não se responsabiliza pelo uso indevido.
Parte do kit de ferramentas de pentest do Mr-Whiskerss.
| Ação | Detalhe |
|---|
| Atualizar OpenSSH | Atualizar para ≥ 9.6 tanto no cliente quanto no servidor. O KEX estrito está habilitado por padrão. |
| Corrigir outras implementações | PuTTY ≥ 0.80, libssh ≥ 0.10.6, Paramiko ≥ 3.4.0, AsyncSSH ≥ 2.14.2 |
| Remover algoritmos vulneráveis | Se a atualização não for imediatamente possível, remova chacha20-poly1305 e cifras CBC + MACs ETM do sshd_config: |