
Scanner pour l'identification de serveurs avec des logiciels SSH potentiellement vulnérables aux CVE CVE-2024-6387 et CVE-2023-48795.
Scanner pour l'identification de serveurs avec des logiciels SSH potentiellement vulnérables aux CVEs CVE-2024-6387 et CVE-2023-48795.
| CVE | Nom | Condition | Sévérité |
|---|---|---|---|
| CVE-2024-6387 | regreSSHion | OpenSSH < 9.8p1 | CRITICAL |
| CVE-2023-48795 | Terrapin | OpenSSH < 9.6 | HIGH |
Condition de concurrence (race condition) dans le gestionnaire de signal SIGALRM du serveur OpenSSH permet RCE non authentifié en tant que root sur les systèmes Linux avec glibc. Affecte toutes les versions d'OpenSSH antérieures à la 9.8p1.
Attaque par troncature de préfixe dans le handshake SSH (protocole binaire) qui permet à un adversaire MITM de supprimer les messages d'extension de sécurité négociés au début de la session. Affecte OpenSSH < 9.6.
Le script se connecte directement sur le port SSH des cibles et lit la bannière d'identification (ex : SSH-2.0-OpenSSH_9.7), sans envoyer aucun identifiant. Avec la version en main, il compare avec les versions corrigées de chaque CVE et classe l'hôte.
Cible → Connexion TCP port 22 → Lecture de la bannière SSH → Identification du logiciel
→ Analyse de la version OpenSSH → Comparaison avec les versions corrigées → Classification + Log + CSV
Le script identifie également le fabricant/logiciel SSH à partir de la bannière, en reconnaissant :
pip install requests packaging urllib3 dnspython
dnspythonest optionnel, mais fortement recommandé — la résolution inverse parallèle est significativement plus rapide avec lui. Sansdnspython, le script utilisesocketcomme solution de repli.
# IP individuel
python ssh_scanner.py --ip 192.168.1.10
# Plage CIDR
python ssh_scanner.py --cidr 10.0.0.0/24
# Plusieurs CIDRs
python ssh_scanner.py --cidr 10.0.0.0/24 192.168.1.0/24
# ASN (préfixes résolus via RIPE Stat, repli sur bgp.tools)
python ssh_scanner.py --asn AS12345
# Combinaison d'entrées
python ssh_scanner.py --asn AS12345 --cidr 10.0.0.0/8 --ip 1.2.3.4
# À partir d'un fichier (un IP, CIDR ou ASN par ligne)
python ssh_scanner.py --file cibles.txt
# Ports supplémentaires (en plus du 22)
python ssh_scanner.py --cidr 10.0.0.0/24 --ports 22 2222 22222
La résolution DNS est exécutée par lot avant le scan SSH, avec une file dédiée de threads, évitant que la latence DNS n'impacte la vitesse du balayage.
Tous les résultats sont enregistrés dans ./logs/ :
| Fichier |
|---|
formato_estruturado.csv)Colonnes présentes :
Exemple de lignes :
IP | PORTA | TIMESTAMP_UTC | DOMINIO | FABRICANTE | SW_NAME | SW_VERSAO | CVEs | BANNER
192.168.1.10 | 22 | 2026-05-20T00:39:33Z | host.exemple.com | OpenSSH | OpenSSH | 9.7 | cve-2024-6387;cve-2023-48795 | SSH-2.0-OpenSSH_9.7
192.168.1.20 | 22 | 2026-05-20T12:46:03Z | host2.exemple.com | OpenSSH | OpenSSH | 9.4 | cve-2023-48795;cve-2024-6387 | SSH-2.0-OpenSSH_9.4
192.168.1.30 | 22 | 2026-05-20T12:47:11Z | routeur.exemple.com | Mikrotik | ROSSSH | N/D | | SSH-2.0-ROSSSH
À la fin du balayage, s'il y a des hôtes vulnérables, le script affiche automatiquement un aperçu des 20 premières lignes du CSV structuré dans le terminal.
Mettez à jour OpenSSH vers la version 9.8p1 ou supérieure (couvre les deux CVE) :
# Ubuntu / Debian — via le dépôt du système
sudo apt update && sudo apt install --only-upgrade openssh-server
ssh -V
# CentOS / RHEL / Rocky
sudo dnf update openssh-server
ssh -V
# Compilation à partir des sources (version la plus récente)
wget https://cdn.openbsd.org/pub/OpenBSD/OpenSSH/portable/openssh-9.9p1.tar.gz
tar xzf openssh-9.9p1.tar.gz
cd openssh-9.9p1 && ./configure && make && sudo make install
Après la mise à jour, redémarrez le service :
sudo systemctl restart sshd
Ce script est destiné à une utilisation sur votre propre infrastructure ou avec une autorisation explicite. Le balayage non autorisé peut violer diverses législations, donc utilisez-le avec prudence.
Toute action et ses conséquences résultant d'une mauvaise utilisation de cet outil sont de votre propre responsabilité.
Si vous avez des suggestions d'amélioration ou trouvez des bugs, ouvrez une issue ou envoyez une Pull Request. Toute contribution est la bienvenue ! 🚀
| Bannière | Fabricant identifié |
|---|
SSH-2.0-OpenSSH_9.7 | OpenSSH |
SSH-2.0-ROSSSH | Mikrotik |
SSH-2.0-Cisco-1.25 | Cisco |
SSH-2.0-dropbear_2022.83 | Dropbear |
SSH-2.0-libssh-0.9.6 | libssh |
SSH-2.0-AsyncSSH_2.13.2 | AsyncSSH |
SSH-2.0-paramiko_2.9.5 | Paramiko |
SSH-2.0-Bitvise-... | Bitvise |
SSH-2.0-WolfSSH_1.4.14 | wolfSSH |
| Autres non mappés | Nom extrait de la bannière |
| Paramètre | Défaut | Description |
|---|
--ports | 22 | Port(s) SSH à scanner |
--workers | 60 | Threads simultanés pour le scan SSH |
--timeout | 3.0 | Timeout de connexion SSH en secondes |
--dns-workers | 200 | Threads simultanés pour la résolution DNS inverse |
--dns-timeout | 1.5 | Timeout des requêtes DNS en secondes |
--no-confirm | — | Ignore la confirmation avant de démarrer (utile dans les automatisations) |
| Contenu |
|---|
ssh_scan_<timestamp>.log | Journal complet du balayage (tous les hôtes SSH trouvés) |
ssh_scan_<timestamp>_vulneraveis.txt | Uniquement les hôtes classés comme VULNERÁVEL |
ssh_scan_<timestamp>_resultados.csv | Tous les hôtes SSH avec statut complet |
ssh_scan_<timestamp>_formato_estruturado.csv | CSV structuré avec IP, port, timestamp, domaine, fabricant et CVEs |
| Colonne | Description |
|---|
IP | Adresse IP de l'hôte |
PORTA | Port SSH où la bannière a été capturée |
TIMESTAMP_UTC | Timestamp ISO 8601 UTC du moment du scan |
DOMINIO | Nom d'hôte via DNS inverse (PTR) ou SEM-PTR |
FABRICANTE | Fabricant identifié à partir de la bannière |
SW_NAME | Nom du logiciel SSH extrait de la bannière |
SW_VERSAO | Version du logiciel SSH |
CVEs | CVEs affectées séparées par ; (minuscules) |
BANNER | Bannière SSH complète capturée |
| Statut | Signification |
|---|
VULNERÁVEL | Version OpenSSH confirmée inférieure à la version corrigée |
SEGURO | Version OpenSSH confirmée à une version corrigée ou supérieure |
VERSÃO-OCULTA | SSH détecté mais version non exposée — non confirmé sûr |
SSH-NÃO-OPENSSH | Serveur SSH trouvé mais n'est pas OpenSSH (Dropbear, Cisco, etc.) |
NÃO-SSH | Le port a répondu mais la bannière ne correspond pas au protocole SSH |