
Uno scanner Python leggero per CVE-2023-48795 — la vulnerabilità SSH Terrapin di troncamento del prefisso.
Terrapin è una vulnerabilità a livello di protocollo in SSH che consente a un attaccante che effettua un MitM attivo di troncare le informazioni di estensione negoziate, degradando la sicurezza della connessione — in particolare disabilitando
ext-info(usato per gli algoritmi di firma del server) eping(usato dall'estensioneno-authdi OpenSSH).
| Campo | Dettaglio |
|---|---|
| CVE | CVE-2023-48795 |
| CVSS | 5.9 (Medio) |
| Tipo | Protocollo SSH — Troncamento del prefisso / Bypass dell'integrità |
| Divulgazione | Dicembre 2023 |
| Versioni interessate | OpenSSH < 9.6, PuTTY < 0.80, libssh < 0.10.6 e molti altri |
| Riferimenti | terrapin-attack.com |
La vulnerabilità esiste perché alcune combinazioni cipher/MAC SSH — in particolare chacha20-poly1305 e i cipher in modalità CBC con Encrypt-then-MAC — consentono a un attaccante MitM attivo di iniettare e rimuovere i numeri di sequenza SSH durante l'handshake, troncando i dati di estensione negoziati senza essere rilevato.
La correzione ha introdotto un'estensione strict KEX (kex-strict-*[email protected]) che sia client che server devono annunciare per essere immuni.
Lo script esegue solo un banner grab passivo e un parsing di KEXINIT — nessun handshake SSH completo, nessuna autenticazione, nessuno sfruttamento:
SSH_MSG_KEXINIT del serverPoiché il controllo avviene interamente nella fase di scambio delle chiavi, è non intrusivo e non lascia tracce significative oltre a un normale tentativo di connessione 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
Un target per riga — accetta il formato host o host:port.
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
| Codice | Significato |
|---|---|
0 | Nessun host vulnerabile trovato |
1 | Rilevato uno o più host vulnerabili |
Questo consente di utilizzare lo script in modo pulito in pipeline e flussi di lavoro automatizzati.
────────────────────────────────────────────────────────────
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
Lo script segnala un host come VULNERABILE se è vera una delle seguenti condizioni e l'estensione strict-KEX non è annunciata:
Il server annuncia [email protected] in una delle due direzioni di cifratura.
Il server annuncia qualsiasi cipher in modalità CBC e qualsiasi MAC ETM insieme:
Cipher CBC controllati:
aes128-cbc, aes192-cbc, aes256-cbc, 3des-cbc, blowfish-cbc, cast128-cbc, idea-cbc, arcfour, arcfour128, arcfour256, [email protected]
MAC ETM controllati:
[email protected], [email protected], [email protected], [email protected] e varianti
Se il server annuncia [email protected] nella sua lista di algoritmi KEX, la connessione è protetta indipendentemente da quali cipher e MAC vengono offerti. In questo caso, lo script riporterà MITIGATED invece di VULNERABLE.
# /etc/ssh/sshd_config
Ciphers aes128-ctr,aes192-ctr,aes256-ctr,[email protected],[email protected]
MACs hmac-sha2-256,hmac-sha2-512
La rimozione degli algoritmi riduce l'agilità dei cipher. L'aggiornamento è sempre il rimedio preferito.
Questo strumento è destinato esclusivamente a valutazioni di sicurezza autorizzate. Utilizzalo solo contro sistemi di tua proprietà o per i quali hai ricevuto esplicita autorizzazione scritta per il test. L'autore non si assume alcuna responsabilità per un uso improprio.
Parte del toolkit di penetration testing Mr-Whiskerss.
| Azione | Dettaglio |
|---|
| Aggiornare OpenSSH | Aggiornare a ≥ 9.6 sia sul client che sul server. Strict KEX è abilitato per impostazione predefinita. |
| Applicare patch ad altre implementazioni | PuTTY ≥ 0.80, libssh ≥ 0.10.6, Paramiko ≥ 3.4.0, AsyncSSH ≥ 2.14.2 |
| Rimuovere gli algoritmi vulnerabili | Se l'aggiornamento non è immediatamente possibile, rimuovere chacha20-poly1305 e i cipher CBC + MAC ETM da sshd_config: |