
Exploit remoto di enumerazione degli username OpenSSH per CVE-2018-15473, con script di attacco a pacchetto malformato e timing, e scansione multi-thread.
OpenSSH fino alla versione 7.7 permette ad attaccanti remoti di enumerare username validi inviando richieste di autenticazione malformate e osservando le risposte differenziali del server.
| Campo | Valore |
|---|---|
| Software Affetto | OpenSSH 2.3 fino a 7.7 |
| CVSS v3.1 | 5.3 (Medio) |
| Vettore d'Attacco | Rete (remoto, nessuna autenticazione richiesta) |
| Causa Principale | Il server non ritarda l'uscita per gli utenti non validi fino a dopo l'analisi completa del pacchetto (auth2-gss.c, auth2-hostbased.c, auth2-pubkey.c) |
| Impatto | Divulgazione di informazioni — enumerazione degli username validi |
exploit.py — Pacchetto Malformato (veloce, multi-thread)Invia un SSH_MSG_USERAUTH_REQUEST troncato (campo booleano rimosso). Gli utenti non validi attivano un'uscita anticipata (USERAUTH_FAILURE), gli utenti validi causano la disconnessione del server.
exploit_timing.py — Attacco Temporale (più lento, funziona su server patchati)Invia una password molto lunga (~100KB) tramite autenticazione con password. Gli utenti validi impiegano più tempo perché il server hash la password prima di rifiutarla, mentre gli utenti non validi vengono rifiutati immediatamente. Esegue in sequenza e calibra automaticamente la soglia.
Usa questo quando exploit.py restituisce falsi positivi (server patchati).
git clone <url-di-questo-repo>
cd cve-2018-15473
pip install -r requirements.txt
# Pacchetto malformato (prova prima questo)
python3 exploit.py <target_ip> 22 <lhost> <lport> -u root
python3 exploit.py <target_ip> 22 <lhost> <lport> -w usernames.txt -t 8
# Attacco temporale (fallback per server patchati)
python3 exploit_timing.py <target_ip> 22 <lhost> <lport> -u root
python3 exploit_timing.py <target_ip> 22 <lhost> <lport> -w usernames.txt
| Argomento | Descrizione |
|---|
target_ip | IP del server SSH di destinazione |
target_port | Porta SSH di destinazione (di solito 22) |
lhost | IP dell'attaccante (non utilizzato, mantenuto per coerenza del template) |
lport | Porta dell'attaccante (non utilizzato, mantenuto per coerenza del template) |
-u, --username | Singolo username da testare |
-w, --wordlist | Percorso di un file wordlist (uno username per riga) |
-t, --threads | Numero di thread (default: 4, solo exploit.py) |