
Scanner per l'identificazione di server con software SSH potenzialmente vulnerabili alle CVE CVE-2024-6387 e CVE-2023-48795.
Scanner per l'identificazione di server con software SSH potenzialmente vulnerabili a CVE-2024-6387 e CVE-2023-48795.
| CVE | Nome | Condizione | Severità |
|---|---|---|---|
| CVE-2024-6387 | regreSSHion | OpenSSH < 9.8p1 | CRITICAL |
| CVE-2023-48795 | Terrapin | OpenSSH < 9.6 | HIGH |
Race condition nell'handler del segnale SIGALRM del server OpenSSH consente RCE non autenticato come root su sistemi Linux con glibc. Colpisce tutte le versioni di OpenSSH precedenti alla 9.8p1.
Attacco di troncamento del prefisso nell'handshake SSH (protocollo binario) che consente a un avversario MITM di rimuovere i messaggi di estensione di sicurezza negoziati all'inizio della sessione. Colpisce OpenSSH < 9.6.
Lo script si connette direttamente alla porta SSH dei bersagli e legge il banner di identificazione (es: SSH-2.0-OpenSSH_9.7), senza inviare alcuna credenziale. Una volta ottenuta la versione, la confronta con le versioni corrette per ciascuna CVE e classifica l'host.
Alvo → Conexão TCP porta 22 → Leitura do banner SSH → Identificação do software
→ Parse da versão OpenSSH → Comparação com versões fixadas → Classificação + Log + CSV
Lo script identifica anche il produttore/software SSH dal banner, riconoscendo:
pip install requests packaging urllib3 dnspython
dnspythonè opzionale, ma altamente raccomandato: la risoluzione inversa parallela è significativamente più veloce con esso. Senzadnspython, lo script usasocketcome fallback.
# IP individual
python ssh_scanner.py --ip 192.168.1.10
# Faixa CIDR
python ssh_scanner.py --cidr 10.0.0.0/24
# Múltiplos CIDRs
python ssh_scanner.py --cidr 10.0.0.0/24 192.168.1.0/24
# ASN (prefixos resolvidos via RIPE Stat, fallback para bgp.tools)
python ssh_scanner.py --asn AS12345
# Combinação de entradas
python ssh_scanner.py --asn AS12345 --cidr 10.0.0.0/8 --ip 1.2.3.4
# A partir de um arquivo (um IP, CIDR ou ASN por linha)
python ssh_scanner.py --file alvos.txt
# Portas adicionais (além da 22)
python ssh_scanner.py --cidr 10.0.0.0/24 --ports 22 2222 22222
La risoluzione DNS viene eseguita in batch prima della scansione SSH, con una coda dedicata di thread, evitando che la latenza DNS influisca sulla velocità della scansione.
Tutti i risultati vengono salvati in ./logs/:
| File |
|---|
formato_estruturado.csv)Colonne presenti:
Esempio di righe:
IP | PORTA | TIMESTAMP_UTC | DOMINIO | FABRICANTE | SW_NAME | SW_VERSAO | CVEs | BANNER
192.168.1.10 | 22 | 2026-05-20T00:39:33Z | host.exemplo.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.exemplo.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 | router.exemplo.com | Mikrotik | ROSSSH | N/D | | SSH-2.0-ROSSSH
Al termine della scansione, se ci sono host vulnerabili, lo script mostra automaticamente un'anteprima delle prime 20 righe del CSV strutturato nel terminale.
Aggiorna OpenSSH alla versione 9.8p1 o successiva (copre entrambe le CVE):
# Ubuntu / Debian — via repositório do sistema
sudo apt update && sudo apt install --only-upgrade openssh-server
ssh -V
# CentOS / RHEL / Rocky
sudo dnf update openssh-server
ssh -V
# Compilação a partir do fonte (versão mais recente)
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
Dopo l'aggiornamento, riavvia il servizio:
sudo systemctl restart sshd
Questo script è destinato all'uso sulla propria infrastruttura o sotto esplicita autorizzazione. La scansione non autorizzata può violare diverse legislazioni, quindi usalo con cautela.
Qualsiasi azione e conseguenza derivante dall'uso improprio di questo strumento è di tua esclusiva responsabilità.
Se hai suggerimenti per miglioramenti o trovi bug, apri una issue o invia una Pull Request. Ogni contributo è il benvenuto! 🚀
| Banner | Produttore identificato |
|---|
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 |
| Altri non mappati | Nome estratto dal banner |
| Parametro | Default | Descrizione |
|---|
--ports | 22 | Porta(e) SSH da scansionare |
--workers | 60 | Thread simultanei per la scansione SSH |
--timeout | 3.0 | Timeout della connessione SSH in secondi |
--dns-workers | 200 | Thread simultanei per la risoluzione DNS inversa |
--dns-timeout | 1.5 | Timeout delle query DNS in secondi |
--no-confirm | — | Salta la conferma prima di iniziare (utile nelle automazioni) |
| Contenuto |
|---|
ssh_scan_<timestamp>.log | Log completo della scansione (tutti gli host SSH trovati) |
ssh_scan_<timestamp>_vulneraveis.txt | Solo gli host classificati come VULNERÁVEL |
ssh_scan_<timestamp>_resultados.csv | Tutti gli host SSH con stato completo |
ssh_scan_<timestamp>_formato_estruturado.csv | CSV strutturato con IP, porta, timestamp, dominio, produttore e CVE |
| Colonna | Descrizione |
|---|
IP | Indirizzo IP dell'host |
PORTA | Porta SSH su cui è stato catturato il banner |
TIMESTAMP_UTC | Timestamp ISO 8601 UTC del momento della scansione |
DOMINIO | Hostname tramite DNS inverso (PTR) o SEM-PTR |
FABRICANTE | Produttore identificato dal banner |
SW_NAME | Nome del software SSH estratto dal banner |
SW_VERSAO | Versione del software SSH |
CVEs | CVE interessate separate da ; (minuscole) |
BANNER | Banner SSH completo catturato |
| Stato | Significato |
|---|
VULNERÁVEL | Versione OpenSSH confermata inferiore alla versione corretta |
SEGURO | Versione OpenSSH confermata alla versione corretta o successiva |
VERSÃO-OCULTA | SSH rilevato ma versione non esposta — non confermato sicuro |
SSH-NÃO-OPENSSH | Server SSH trovato ma non è OpenSSH (Dropbear, Cisco, ecc.) |
NÃO-SSH | La porta ha risposto ma il banner non corrisponde al protocollo SSH |