
Scanner Python léger pour CVE-2023-48795 (SSH Terrapin prefix truncation). Effectue une capture passive de bannière et une analyse KEXINIT pour détecter les combinaisons vulnérables de chiffrement/MAC et l'absence de mitigation strict-KEX.
Un scanner Python léger pour CVE-2023-48795 — la vulnérabilité de troncature de préfixe SSH Terrapin.
Terrapin est une vulnérabilité au niveau du protocole SSH qui permet à un attaquant effectuant un MitM actif de tronquer les informations d'extension négociées, dégradant la sécurité de la connexion — ce qui désactive de manière critique
ext-info(utilisé pour les algorithmes de signature du serveur) etping(utilisé par l'extensionno-authd'OpenSSH).
La vulnérabilité existe car certaines combinaisons de chiffrement/MAC SSH — spécifiquement chacha20-poly1305 et les chiffrements en mode CBC avec Encrypt-then-MAC — permettent à un attaquant MitM actif d'injecter et de supprimer des numéros de séquence SSH lors du handshake, tronquant les données d'extension négociées sans être détecté.
Le correctif a introduit une extension KEX stricte (kex-strict-*[email protected]) que le client et le serveur doivent annoncer pour être immunisés.
Le script effectue une récupération passive de bannière et une analyse KEXINIT uniquement — pas de handshake SSH complet, pas d'authentification, pas d'exploitation :
SSH_MSG_KEXINIT du serveurÉtant donné que la vérification se produit entièrement dans la phase d'échange de clés, elle est non intrusive et ne laisse aucune trace significative au-delà d'une tentative de connexion TCP normale.
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 hôte par ligne — accepte le format host ou 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]
arguments positionnels :
host Hôte cible
port Port SSH (par défaut : 22)
options :
-h, --help Affiche ce message d'aide et quitte
-f, --file FILE Fichier contenant les hôtes (host ou host:port par ligne)
-p, --port-flag PORT Port par défaut lors de l'utilisation de -f (par défaut : 22)
--threads THREADS Threads simultanés pour l'analyse groupée (par défaut : 10)
--timeout TIMEOUT Délai d'attente de la socket en secondes (par défaut : 5.0)
--summary Affiche un résumé d'une ligne par hôte uniquement
| Code | Signification |
|---|---|
0 | Aucun hôte vulnérable trouvé |
1 | Un ou plusieurs hôtes vulnérables détectés |
Cela permet d'utiliser le script proprement dans des pipelines et des workflows automatisés.
────────────────────────────────────────────────────────────
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
Le script marque un hôte comme VULNÉRABLE si l'une des conditions suivantes est vraie, et que l'extension KEX stricte n'est pas annoncée :
Le serveur annonce [email protected] dans l'une ou l'autre direction de chiffrement.
Le serveur annonce un chiffrement en mode CBC et un MAC ETM ensemble :
Chiffrements CBC vérifiés :
aes128-cbc, aes192-cbc, aes256-cbc, 3des-cbc, blowfish-cbc, cast128-cbc, idea-cbc, arcfour, arcfour128, arcfour256, [email protected]
MAC ETM vérifiés :
[email protected], [email protected], [email protected], [email protected], et variantes
Si le serveur annonce [email protected] dans sa liste d'algorithmes KEX, la connexion est protégée indépendamment des chiffrements et MAC proposés. Le script signalera MITIGATED plutôt que VULNERABLE dans ce cas.
# /etc/ssh/sshd_config
Ciphers aes128-ctr,aes192-ctr,aes256-ctr,[email protected],[email protected]
MACs hmac-sha2-256,hmac-sha2-512
La suppression d'algorithmes réduit l'agilité de chiffrement. La mise à jour est toujours la remédiation privilégiée.
Cet outil est destiné uniquement aux évaluations de sécurité autorisées. Utilisez-le uniquement sur des systèmes dont vous êtes propriétaire ou pour lesquels vous avez une autorisation écrite explicite de test. L'auteur décline toute responsabilité en cas d'utilisation abusive.
Partie de la boîte à outils de pentesting Mr-Whiskerss.
| Champ | Détail |
|---|
| CVE | CVE-2023-48795 |
| CVSS | 5.9 (Moyen) |
| Type | Protocole SSH — Troncature de préfixe / Contournement d'intégrité |
| Divulgation | Décembre 2023 |
| Affecté | OpenSSH < 9.6, PuTTY < 0.80, libssh < 0.10.6, et bien d'autres |
| Références | terrapin-attack.com |
| Action | Détail |
|---|
| Mettre à jour OpenSSH | Mettez à jour vers ≥ 9.6 sur le client et le serveur. KEX stricte est activée par défaut. |
| Corriger les autres implémentations | PuTTY ≥ 0.80, libssh ≥ 0.10.6, Paramiko ≥ 3.4.0, AsyncSSH ≥ 2.14.2 |
| Supprimer les algorithmes vulnérables | Si la mise à jour n'est pas immédiatement possible, supprimez chacha20-poly1305 et les chiffrements CBC + MAC ETM de sshd_config : |